func (imp) Run(ctx *importer.RunContext) error { clientId, secret, err := ctx.Credentials() if err != nil { return err } acctNode := ctx.AccountNode() ocfg := baseOAuthConfig ocfg.ClientId, ocfg.ClientSecret = clientId, secret token := decodeToken(acctNode.Attr(acctAttrOAuthToken)) transport := &oauth.Transport{ Config: &ocfg, Token: &token, Transport: notOAuthTransport(ctx.HTTPClient()), } ctx.Context = ctx.Context.New(context.WithHTTPClient(transport.Client())) root := ctx.RootNode() if root.Attr(nodeattr.Title) == "" { if err := root.SetAttr(nodeattr.Title, fmt.Sprintf("%s %s - Google/Picasa Photos", acctNode.Attr(importer.AcctAttrGivenName), acctNode.Attr(importer.AcctAttrFamilyName))); err != nil { return err } } r := &run{ RunContext: ctx, incremental: !forceFullImport && acctNode.Attr(importer.AcctAttrCompletedVersion) == runCompleteVersion, photoGate: syncutil.NewGate(3), } if err := r.importAlbums(); err != nil { return err } r.mu.Lock() anyErr := r.anyErr r.mu.Unlock() if !anyErr { if err := acctNode.SetAttrs(importer.AcctAttrCompletedVersion, runCompleteVersion); err != nil { return err } } return nil }
func (imp) Run(rctx *importer.RunContext) error { clientID, secret, err := rctx.Credentials() if err != nil { return err } acctNode := rctx.AccountNode() ocfg := &oauth2.Config{ Endpoint: google.Endpoint, ClientID: clientID, ClientSecret: secret, Scopes: []string{scopeURL}, } token := decodeToken(acctNode.Attr(acctAttrOAuthToken)) baseCtx := rctx.Context() ctx := context.WithValue(baseCtx, ctxutil.HTTPClient, ocfg.Client(baseCtx, token)) root := rctx.RootNode() if root.Attr(nodeattr.Title) == "" { if err := root.SetAttr( nodeattr.Title, fmt.Sprintf("%s - Google Photos", acctNode.Attr(importer.AcctAttrName)), ); err != nil { return err } } r := &run{ RunContext: rctx, incremental: !forceFullImport && acctNode.Attr(importer.AcctAttrCompletedVersion) == runCompleteVersion, photoGate: syncutil.NewGate(3), } if err := r.importAlbums(ctx); err != nil { return err } if err := acctNode.SetAttrs(importer.AcctAttrCompletedVersion, runCompleteVersion); err != nil { return err } return nil }
func checkTweets(t *testing.T, rc *importer.RunContext, expectedPostGroups ...map[string]string) { postsNode, err := imptest.GetRequiredChildPathObj(rc.RootNode(), "tweets") if err != nil { t.Fatal(err) } childRefs, err := imptest.FindChildRefs(postsNode) if err != nil { t.Fatal(err) } // Merges groups, last wins expectedPosts := map[string]string{} for _, posts := range expectedPostGroups { for k, v := range posts { expectedPosts[k] = v } } if len(childRefs) != len(expectedPosts) { t.Fatalf("After import, found %d child refs, want %d: %v", len(childRefs), len(expectedPosts), childRefs) } for _, ref := range childRefs { childNode, err := rc.Host.ObjectFromRef(ref) if err != nil { t.Fatal(err) } foundID := childNode.Attr("twitterId") expectedContent, ok := expectedPosts[foundID] if !ok { t.Fatalf("Found unexpected child node %v with id %q", childNode, foundID) } foundContent := childNode.Attr(nodeattr.Content) if foundContent != expectedContent { t.Fatalf("Found unexpected child node %v with content %q when we want %q", childNode, foundContent, expectedContent) } delete(expectedPosts, foundID) } if len(expectedPosts) != 0 { t.Fatalf("The following entries were expected but not found: %#v", expectedPosts) } }
func (im *imp) Run(ctx *importer.RunContext) (err error) { log.Printf("Running dummy importer.") defer func() { log.Printf("Dummy importer returned: %v", err) }() root := ctx.RootNode() fileRef, err := schema.WriteFileFromReader(ctx.Host.Target(), "foo.txt", strings.NewReader("Some file.\n")) if err != nil { return err } obj, err := root.ChildPathObject("foo.txt") if err != nil { return err } if err = obj.SetAttr("camliContent", fileRef.String()); err != nil { return err } n, _ := strconv.Atoi(ctx.AccountNode().Attr(acctAttrRunNumber)) n++ ctx.AccountNode().SetAttr(acctAttrRunNumber, fmt.Sprint(n)) // Update the title each time, just to show it working. You // wouldn't actually do this: return root.SetAttr("title", fmt.Sprintf("dummy: %s import #%d", ctx.AccountNode().Attr(acctAttrUsername), n)) }