c156daa8d779 — Ted Unangst 30 days ago
only fetch once for a search
4 files changed, 13 insertions(+), 16 deletions(-)

M activity.go
M database.go
M fun.go
M web.go
M activity.go +6 -5
@@ 1891,22 1891,23 @@ func gofish(name string) string {
 	return href
 }
 
-func investigate(name string) (*SomeThing, error) {
+func investigate(name string) (*SomeThing, junk.Junk, error) {
 	if name == "" {
-		return nil, fmt.Errorf("no name")
+		return nil, nil, fmt.Errorf("no name")
 	}
 	if name[0] == '@' {
 		name = gofish(name)
 	}
 	if name == "" {
-		return nil, fmt.Errorf("no name")
+		return nil, nil, fmt.Errorf("no name")
 	}
 	obj, err := GetJunkFast(readyLuserOne, name)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 	allinjest(originate(name), obj)
-	return somethingabout(obj)
+	info, err := somethingabout(obj)
+	return info, obj, err
 }
 
 func somethingabout(obj junk.Junk) (*SomeThing, error) {

          
M database.go +1 -1
@@ 1007,7 1007,7 @@ func savehonker(user *WhatAbout, url, na
 		owner = url
 
 	} else {
-		info, err := investigate(url)
+		info, _, err := investigate(url)
 		if err != nil {
 			ilog.Printf("failed to investigate honker: %s", err)
 			return 0, "", err

          
M fun.go +1 -1
@@ 636,7 636,7 @@ var allhandles = gencache.New(gencache.O
 	handle := getxonker(xid, "handle")
 	if handle == "" {
 		dlog.Printf("need to get a handle: %s", xid)
-		info, err := investigate(xid)
+		info, _, err := investigate(xid)
 		if err != nil {
 			m := re_unurl.FindStringSubmatch(xid)
 			if len(m) > 2 {

          
M web.go +5 -9
@@ 694,21 694,17 @@ func ximport(w http.ResponseWriter, r *h
 	xid := strings.TrimSpace(r.FormValue("q"))
 	xonk := getxonk(UserID(u.UserID), xid)
 	if xonk == nil {
-		p, _ := investigate(xid)
-		if p != nil {
-			xid = p.XID
-		}
-		j, err := GetJunk(UserID(u.UserID), xid)
-		if err != nil {
+		info, j, err := investigate(xid)
+		if j == nil {
 			http.Error(w, "error getting external object", http.StatusInternalServerError)
 			ilog.Printf("error getting external object: %s", err)
 			return
 		}
-		allinjest(originate(xid), j)
-		dlog.Printf("importing %s", xid)
+		if info != nil {
+			xid = info.XID
+		}
 		user, _ := butwhatabout(u.Username)
 
-		info, _ := somethingabout(j)
 		if info == nil {
 			xonk = xonksaver(user, j, originate(xid))
 		} else if info.What == SomeActor {