diff --git a/go.mod b/go.mod index b9380c3..e223023 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/docker/go-units v0.4.0 // indirect github.com/go-ini/ini v1.41.0 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/lbryio/lbry.go v0.0.0-20190924163117-c36c67961f10 + github.com/lbryio/lbry.go v0.0.0-20190924183703-712e346bd209 github.com/lbryio/reflector.go v1.0.6-0.20190828131602-ce3d4403dbc6 github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936 github.com/mitchellh/mapstructure v1.1.2 // indirect diff --git a/go.sum b/go.sum index 88ff402..df41268 100644 --- a/go.sum +++ b/go.sum @@ -159,8 +159,8 @@ github.com/lbryio/errors.go v0.0.0-20180223142025-ad03d3cc6a5c h1:BhdcWGsuKif/Xo github.com/lbryio/errors.go v0.0.0-20180223142025-ad03d3cc6a5c/go.mod h1:muH7wpUqE8hRA3OrYYosw9+Sl681BF9cwcjzE+OCNK8= github.com/lbryio/lbry.go v0.0.0-20190828131228-f3a1fbdd5303 h1:CyDDxUMREhAxPlgP+mgcArgkGJKtdXssj7CXk7o3h84= github.com/lbryio/lbry.go v0.0.0-20190828131228-f3a1fbdd5303/go.mod h1:qR+Ui0hYhemIU4fXqM3d1P9eiaRFlof777VJgV7KJ8w= -github.com/lbryio/lbry.go v0.0.0-20190924163117-c36c67961f10 h1:hNb0M76o3FPLQtsLsa3DVv2+5viKZptxmwnn/Ga6NYU= -github.com/lbryio/lbry.go v0.0.0-20190924163117-c36c67961f10/go.mod h1:wnoiUIfkeUmbiIGR/dg3Xvb6a6Jz7vPxtUoENyyl5QE= +github.com/lbryio/lbry.go v0.0.0-20190924183703-712e346bd209 h1:idtWts2fhF8TiGK4W+REJtrj5r6EeXr8+77g/nz8snk= +github.com/lbryio/lbry.go v0.0.0-20190924183703-712e346bd209/go.mod h1:wnoiUIfkeUmbiIGR/dg3Xvb6a6Jz7vPxtUoENyyl5QE= github.com/lbryio/lbryschema.go v0.0.0-20190602173230-6d2f69a36f46 h1:LemfR+rMxhf7nnOrzy2HqS7Me7SZ5gEwOcNFzKC8ySQ= github.com/lbryio/lbryschema.go v0.0.0-20190602173230-6d2f69a36f46/go.mod h1:dAzPCBj3CKKWBGYBZxK6tKBP5SCgY2tqd9SnQd/OyKo= github.com/lbryio/ozzo-validation v0.0.0-20170323141101-d1008ad1fd04 h1:Nze+C2HbeKvhjI/kVn+9Poj/UuEW5sOQxcsxqO7L3GI= diff --git a/manager/manager.go b/manager/manager.go index 925d733..176e5a6 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -142,6 +142,7 @@ func (s *SyncManager) Start() error { namer: namer.NewNamer(), Fee: channels[0].Fee, publishAddress: channels[0].PublishAddress, + publicKey: channels[0].PublicKey, transferState: channels[0].TransferState, } shouldInterruptLoop = true @@ -184,6 +185,7 @@ func (s *SyncManager) Start() error { namer: namer.NewNamer(), Fee: c.Fee, publishAddress: c.PublishAddress, + publicKey: c.PublicKey, transferState: c.TransferState, }) if q != StatusFailed { diff --git a/manager/ytsync.go b/manager/ytsync.go index bc366ce..f4147cb 100644 --- a/manager/ytsync.go +++ b/manager/ytsync.go @@ -88,6 +88,7 @@ type Sync struct { queue chan video transferState int publishAddress string + publicKey string } func (s *Sync) AppendSyncedVideo(videoID string, published bool, failureReason string, claimName string, claimID string, metadataVersion int8, size int64) { @@ -666,6 +667,10 @@ func (s *Sync) doSync() error { if err != nil { return errors.Prefix("could not set address reuse policy", err) } + err = s.importPublicKey() + if err != nil { + return errors.Prefix("could not import the transferee public key", err) + } err = s.walletSetup() if err != nil { return errors.Prefix("Initial wallet setup failed! Manual Intervention is required.", err) @@ -1050,6 +1055,28 @@ func (s *Sync) processVideo(v video) (err error) { return nil } +func (s *Sync) importPublicKey() error { + if s.publicKey != "" { + accountsResponse, err := s.daemon.AccountList() + if err != nil { + return errors.Err(err) + } + accounts := accountsResponse.LBCMainnet + if logUtils.IsRegTest() { + accounts = accountsResponse.LBCRegtest + } + for _, a := range accounts { + if a.PublicKey == s.publicKey { + return nil + } + } + log.Infof("Could not find public key %s in the wallet. Importing it...") + _, err = s.daemon.AccountAdd(s.LbryChannelName, nil, nil, &s.publicKey, util.PtrToBool(true), nil) + return errors.Err(err) + } + return nil +} + // waitForDaemonProcess observes the running processes and returns when the process is no longer running or when the timeout is up func waitForDaemonProcess(timeout time.Duration) error { processes, err := ps.Processes() diff --git a/sdk/api.go b/sdk/api.go index 356b312..2ae911d 100644 --- a/sdk/api.go +++ b/sdk/api.go @@ -58,6 +58,7 @@ type YoutubeChannel struct { ChannelClaimID string `json:"channel_claim_id"` TransferState int `json:"transfer_state"` PublishAddress string `json:"publish_address"` + PublicKey string `json:"public_key"` } func (a *APIConfig) FetchChannels(status string, cp *SyncProperties) ([]YoutubeChannel, error) {