From af01d1626d30fbc0b38d6c518cee4eeb29c60c40 Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Fri, 29 Dec 2017 19:21:16 -0500 Subject: [PATCH] require channel name, read channel ids from file --- .gitignore | 2 +- cmd/ytsync.go | 20 +++++++++++--------- ytsync/README.md | 3 +-- ytsync/setup.go | 17 ++++++----------- ytsync/ytsync.go | 29 +++++++++++++++++++++++++++++ 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index b2a80c2..c08c1f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /.idea /lbry /vendor -tmp.sh +/tmp.sh diff --git a/cmd/ytsync.go b/cmd/ytsync.go index 74075bd..1c81e37 100644 --- a/cmd/ytsync.go +++ b/cmd/ytsync.go @@ -10,7 +10,7 @@ import ( func init() { var ytSyncCmd = &cobra.Command{ - Use: "ytsync []", + Use: "ytsync []", Args: cobra.RangeArgs(2, 3), Short: "Publish youtube channel into LBRY network.", Run: ytsync, @@ -21,7 +21,7 @@ func init() { RootCmd.AddCommand(ytSyncCmd) } -const defaultMaxTries = 1 +const defaultMaxTries = 3 var ( stopOnError bool @@ -31,14 +31,15 @@ var ( func ytsync(cmd *cobra.Command, args []string) { ytAPIKey := args[0] - channelID := args[1] - lbryChannelName := "" + lbryChannelName := args[1] + if string(lbryChannelName[0]) != "@" { + log.Errorln("LBRY channel name must start with an @") + return + } + + channelID := "" if len(args) > 2 { - lbryChannelName = args[2] - if string(lbryChannelName[0]) != "@" { - log.Errorln("LBRY channel name must start with an @") - return - } + channelID = args[2] } if stopOnError && maxTries != defaultMaxTries { @@ -61,6 +62,7 @@ func ytsync(cmd *cobra.Command, args []string) { } err := s.FullCycle() + if err != nil { if wrappedError, ok := err.(*errors.Error); ok { log.Error(wrappedError.Error() + "\n" + string(wrappedError.Stack())) diff --git a/ytsync/README.md b/ytsync/README.md index 7d6ba8d..d617343 100644 --- a/ytsync/README.md +++ b/ytsync/README.md @@ -3,8 +3,7 @@ - make sure you don't have a `.lbryum/wallets/default_wallet` - delete existing wallet if there's nothing you need there, or better yet, move it somewhere else in case you need it later - make sure daemon is stopped and can be controlled with `systemctl` -- run `lbry ytsync YOUTUBE_KEY YOUTUBE_CHANNEL_ID LBRY_CHANNEL_NAME --max-tries=5` - - `max-tries` will retry errors that you will probably get (e.g. failed publishes) +- run `lbry ytsync YOUTUBE_KEY LBRY_CHANNEL_NAME YOUTUBE_CHANNEL_ID` - after sync is complete, daemon will be stopped and wallet will be moved to `~/wallets/` - now mark content as synced in doc diff --git a/ytsync/setup.go b/ytsync/setup.go index 8fb652f..4b0b692 100644 --- a/ytsync/setup.go +++ b/ytsync/setup.go @@ -28,12 +28,9 @@ func (s *Sync) walletSetup() error { } log.Debugf("Source channel has %d videos", numOnSource) - numPublished := uint64(0) - if s.LbryChannelName != "" { - numPublished, err = s.daemon.NumClaimsInChannel(s.LbryChannelName) - if err != nil { - return err - } + numPublished, err := s.daemon.NumClaimsInChannel(s.LbryChannelName) + if err != nil { + return err } log.Debugf("We already published %d videos", numPublished) @@ -88,11 +85,9 @@ func (s *Sync) walletSetup() error { return err } - if s.LbryChannelName != "" { - err = s.ensureChannelOwnership() - if err != nil { - return err - } + err = s.ensureChannelOwnership() + if err != nil { + return err } balanceResp, err = s.daemon.WalletBalance() diff --git a/ytsync/ytsync.go b/ytsync/ytsync.go index b084bf9..b0cddc1 100644 --- a/ytsync/ytsync.go +++ b/ytsync/ytsync.go @@ -1,6 +1,7 @@ package ytsync import ( + "encoding/json" "io/ioutil" "net/http" "os" @@ -69,6 +70,14 @@ func (s *Sync) FullCycle() error { return errors.New("no $HOME env var found") } + if s.YoutubeChannelID == "" { + channelID, err := getChannelIDFromFile(s.LbryChannelName) + if err != nil { + return err + } + s.YoutubeChannelID = channelID + } + defaultWalletDir := os.Getenv("HOME") + "/.lbryum/wallets/default_wallet" walletBackupDir := os.Getenv("HOME") + "/wallets/" + strings.Replace(s.LbryChannelName, "@", "", 1) @@ -341,3 +350,23 @@ func stopDaemonViaSystemd() error { } return nil } + +func getChannelIDFromFile(channelName string) (string, error) { + channelsJSON, err := ioutil.ReadFile("./channels") + if err != nil { + return "", errors.Wrap(err, 0) + } + + var channels map[string]string + err = json.Unmarshal(channelsJSON, &channels) + if err != nil { + return "", errors.Wrap(err, 0) + } + + channelID, ok := channels[channelName] + if !ok { + return "", errors.New("channel not in list") + } + + return channelID, nil +}