diff --git a/local/local.go b/local/local.go index abf3793..9b7837e 100644 --- a/local/local.go +++ b/local/local.go @@ -17,12 +17,13 @@ import ( ) type SyncContext struct { - DryRun bool - KeepCache bool - TempDir string - LbrynetAddr string - ChannelID string - PublishBid float64 + DryRun bool + KeepCache bool + ReflectStreams bool + TempDir string + LbrynetAddr string + ChannelID string + PublishBid float64 YouTubeSourceConfig *YouTubeSourceConfig } @@ -57,6 +58,7 @@ func AddCommand(rootCmd *cobra.Command) { } cmd.Flags().BoolVar(&syncContext.DryRun, "dry-run", false, "Display information about the stream publishing, but do not publish the stream") cmd.Flags().BoolVar(&syncContext.KeepCache, "keep-cache", false, "Don't delete local files after publishing.") + cmd.Flags().BoolVar(&syncContext.ReflectStreams, "reflect-streams", true, "Require published streams to be reflected.") cmd.Flags().StringVar(&syncContext.TempDir, "temp-dir", getEnvDefault("TEMP_DIR", ""), "directory to use for temporary files") cmd.Flags().Float64Var(&syncContext.PublishBid, "publish-bid", 0.01, "Bid amount for the stream claim") cmd.Flags().StringVar(&syncContext.LbrynetAddr, "lbrynet-address", getEnvDefault("LBRYNET_ADDRESS", ""), "JSONRPC address of the local LBRYNet daemon") @@ -119,15 +121,19 @@ func localCmd(cmd *cobra.Command, args []string) { log.Debugf("Object to be published: %v", processedVideo) } else { - done, err := publisher.Publish(*processedVideo) + doneReflectingCh, err := publisher.Publish(*processedVideo, syncContext.ReflectStreams) if err != nil { log.Errorf("Error publishing video: %v", err) return } - err = <-done - if err != nil { - log.Errorf("Error while wating for stream to reflect: %v", err) + if syncContext.ReflectStreams { + err = <-doneReflectingCh + if err != nil { + log.Errorf("Error while wating for stream to reflect: %v", err) + } + } else { + log.Debugln("Not waiting for stream to reflect.") } } @@ -227,13 +233,14 @@ func getAbbrevDescription(v SourceVideo) string { return v.SourceURL } - maxLength := 2800 + additionalDescription := "\n...\n" + v.SourceURL + maxLength := 2800 - len(additionalDescription) + description := strings.TrimSpace(*v.Description) - additionalDescription := "\n" + v.SourceURL if len(description) > maxLength { description = description[:maxLength] } - return description + "\n..." + additionalDescription + return description + additionalDescription } type VideoSource interface { @@ -242,5 +249,5 @@ type VideoSource interface { } type VideoPublisher interface { - Publish(video PublishableVideo) (chan error, error) + Publish(video PublishableVideo, reflectStream bool) (chan error, error) } diff --git a/local/localSDKPublisher.go b/local/localSDKPublisher.go index 4e99355..3886eb9 100644 --- a/local/localSDKPublisher.go +++ b/local/localSDKPublisher.go @@ -48,7 +48,7 @@ func NewLocalSDKPublisher(sdkAddr, channelID string, publishBid float64) (*Local return &publisher, nil } -func (p *LocalSDKPublisher) Publish(video PublishableVideo) (chan error, error) { +func (p *LocalSDKPublisher) Publish(video PublishableVideo, reflectStream bool) (chan error, error) { streamCreateOptions := jsonrpc.StreamCreateOptions { ClaimCreateOptions: jsonrpc.ClaimCreateOptions { Title: &video.Title, @@ -67,6 +67,10 @@ func (p *LocalSDKPublisher) Publish(video PublishableVideo) (chan error, error) return nil, err } + if !reflectStream { + return nil, nil + } + done := make(chan error, 1) go func() { for { @@ -88,8 +92,9 @@ func (p *LocalSDKPublisher) Publish(video PublishableVideo) (chan error, error) break } if !fileStatus.UploadingToReflector { - log.Warn("Stream is not being uploaded to a reflector. Check your lbrynet settings if this is a mistake.") - break + log.Error("Stream is not being uploaded to a reflector. Check your lbrynet settings if this is a mistake.") + done <- errors.New("Stream is not being reflected (check lbrynet settings).") + return } log.Infof("Stream reflector progress: %d%%", fileStatus.ReflectorProgress) time.Sleep(5 * time.Second) diff --git a/local/readme.md b/local/readme.md index 16efe8b..81b0235 100644 --- a/local/readme.md +++ b/local/readme.md @@ -5,6 +5,7 @@ - LBRY SDK (what do we actually need this for?) - youtube-dl - enough space to cache stuff +- YouTube data API key ## Process @@ -15,6 +16,21 @@ - or easier, just error if no channel - enough lbc in wallet? +### Getting a YouTube API key + +To access the YouTube data API, you will first need some kind of google account. + +The API has two methods of authentication, OAuth2 and API keys. This application uses API keys. +These API keys are basically like passwords, and so once obtained, they should not be shared. + +The instructions for obtaining an API key are copied below from [here](https://developers.google.com/youtube/registering_an_application): + + +1. Open the [Credentials page](https://console.developers.google.com/apis/credentials) in the API Console. +2. Create an API key in the Console by clicking **Create credentials > API key**. You can restrict the key before using it in production by clicking **Restrict key** and selecting one of the **Restrictions**. + +To keep your API keys secure, follow the [best practices for securely using API keys](https://cloud.google.com/docs/authentication/api-keys). + ### Options to figure out what's already synced - simplest: assume nothing is synced yet @@ -50,4 +66,4 @@ ### Debugging -- dry-running the whole thing \ No newline at end of file +- dry-running the whole thing