Example #1
0
        private Response SaveCouchPotato()
        {
            var couchPotatoSettings = this.Bind <CouchPotatoSettings>();
            var valid = this.Validate(couchPotatoSettings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            var watcherSettings = WatcherSettings.GetSettings();

            if (watcherSettings.Enabled)
            {
                return
                    (Response.AsJson(new JsonResponseModel
                {
                    Result = false,
                    Message = "Cannot have Watcher and CouchPotato both enabled."
                }));
            }

            couchPotatoSettings.ApiKey = couchPotatoSettings.ApiKey.Trim();
            var result = CpService.SaveSettings(couchPotatoSettings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for CouchPotato!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
 public WatcherViewModel(WatcherService service, WatcherSettings settings)
 {
     this.Service = service;
     this.Settings = settings;
     this.Settings.PropertyChanged += this.OnSettingsChanged;
     this.ApplySettings();
 }
Example #3
0
        private void DoWork(WatcherSettings watcher, double newPrice)
        {
            var message = new MimeMessage();

            AppSettings.Current.MailSettings.Targets.ForEach(currentMailTarget =>
            {
                if (!string.IsNullOrEmpty(currentMailTarget))
                {
                    message.From.Add(new MailboxAddress(currentMailTarget));
                }
            });

            message.Subject = $"Change of price on item [{watcher.Name}]";
            message.Body    = new TextPart("plain")
            {
                Text = $@"Hello, 

Price of item '{watcher.Name}' just changed from '{watcher.LastPrice}' to '{newPrice}').
Url : {watcher.Url}

Bye."
            };

            using (var client = new SmtpClient())
            {
                // Accept all SSL certificates (in case the server supports STARTTLS)
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                client.Connect(AppSettings.Current.MailSettings.HostName, AppSettings.Current.MailSettings.Port, AppSettings.Current.MailSettings.EnableSsl);
                client.Authenticate(AppSettings.Current.MailSettings.Login, AppSettings.Current.MailSettings.Password);
                client.Send(message);
                client.Disconnect(true);
            }
        }
Example #4
0
        public static IObservable <FileSystemEventArgs> FileChanges(WatcherSettings watcherSettings)
        {
            return(Observable.Create <FileSystemEventArgs>(observer => {
                var disp = new CompositeDisposable();

                var watcher = new FileSystemWatcher(watcherSettings.Directory)
                {
                    NotifyFilter = watcherSettings.NotifyFilters,
                    Filter = watcherSettings.SearchPattern,
                    IncludeSubdirectories = watcherSettings.SearchOption == SearchOption.AllDirectories
                };
                disp.Add(watcher);

                disp.Add(Observable.Merge(
                             Observable.FromEventPattern <RenamedEventHandler, FileSystemEventArgs>(x => watcher.Renamed += x,
                                                                                                    x => watcher.Renamed -= x),
                             Observable.FromEventPattern <FileSystemEventHandler, FileSystemEventArgs>(x => watcher.Changed += x,
                                                                                                       x => watcher.Changed -= x),
                             Observable.FromEventPattern <FileSystemEventHandler, FileSystemEventArgs>(x => watcher.Created += x,
                                                                                                       x => watcher.Created -= x),
                             Observable.FromEventPattern <FileSystemEventHandler, FileSystemEventArgs>(x => watcher.Deleted += x,
                                                                                                       x => watcher.Deleted -= x))
                         .Select(x => x.EventArgs)
                         .Synchronize(observer)
                         .Subscribe(observer));

                watcher.EnableRaisingEvents = true;

                return disp;
            }).Publish().RefCount());
        }
Example #5
0
        public async Task <MovieSenderResult> Send(RequestedModel model, string qualityId = "")
        {
            var cpSettings = await CouchPotatoSettings.GetSettingsAsync();

            var watcherSettings = await WatcherSettings.GetSettingsAsync();

            var radarrSettings = await RadarrSettings.GetSettingsAsync();

            if (cpSettings.Enabled)
            {
                return(SendToCp(model, cpSettings, string.IsNullOrEmpty(qualityId) ? cpSettings.ProfileId : qualityId));
            }

            if (watcherSettings.Enabled)
            {
                return(SendToWatcher(model, watcherSettings));
            }

            if (radarrSettings.Enabled)
            {
                return(SendToRadarr(model, radarrSettings));
            }

            return(new MovieSenderResult {
                Result = false, MovieSendingEnabled = false
            });
        }
Example #6
0
        private async Task <Response> SaveWatcher()
        {
            var settings = this.Bind <WatcherSettings>();
            var valid    = this.Validate(settings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            var cpSettings = await CpSettings.GetSettingsAsync().ConfigureAwait(false);

            if (cpSettings.Enabled)
            {
                return
                    (Response.AsJson(new JsonResponseModel
                {
                    Result = false,
                    Message = "Cannot have Watcher and CouchPotato both enabled."
                }));
            }

            settings.ApiKey = settings.ApiKey.Trim();
            var result = await WatcherSettings.SaveSettingsAsync(settings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for Watcher!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
Example #7
0
        public void Queued()
        {
            Log.Trace("Getting the settings");

            var watcherSettings = WatcherSettings.GetSettings();

            Job.SetRunning(true, JobNames.WatcherCacher);
            try
            {
                if (watcherSettings.Enabled)
                {
                    var movies = WatcherApi.ListMovies(watcherSettings.ApiKey, watcherSettings.FullUri);
                    if (movies.Error)
                    {
                        Log.Error("Error when trying to get Watchers movies");
                        Log.Error(movies.ErrorMessage);
                    }
                    var wantedMovies =
                        movies?.Movies?.Where(x => x.status.Equals("Wanted", StringComparison.CurrentCultureIgnoreCase));
                    if (wantedMovies != null && wantedMovies.Any())
                    {
                        Cache.Set(CacheKeys.WatcherQueued, movies.Movies.Select(x => x.imdbid).ToArray(), CacheKeys.TimeFrameMinutes.SchedulerCaching);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
            finally
            {
                Job.Record(JobNames.WatcherCacher);
                Job.SetRunning(false, JobNames.WatcherCacher);
            }
        }
Example #8
0
 public void Execute(PerformContext context, WatcherSettings watcher, double newPrice)
 {
     lock (Lock)
     {
         _context = context;
         DoWork(watcher, newPrice);
     };
 }
Example #9
0
 public static IEnumerable <FileReference> GetCurrentFiles(WatcherSettings watcherSettings)
 {
     return(Directory
            .GetFiles(watcherSettings.Directory, watcherSettings.SearchPattern, watcherSettings.SearchOption)
            .Select(fullPath => new FileReference {
         FullPath = fullPath
     }));
 }
Example #10
0
        public Watcher(
            string dir,
            Action <string> directoryCreated,
            Action <string> directoryDeleted,
            Action <string> fileCreated,
            Action <string> fileChanged,
            Action <string> fileDeleted)
        {
            _dir      = dir;
            _cache    = new Cache(_dir, () => _exit);
            _settings = SettingsReader.GetSettings();

            _directoryCreated = directoryCreated;
            _directoryDeleted = directoryDeleted;
            _fileCreated      = fileCreated;
            _fileChanged      = fileChanged;
            _fileDeleted      = fileDeleted;
        }
Example #11
0
        public static IObservable <IList <FileReference> > TrackDirectory(WatcherSettings watcherSettings)
        {
            return(Observable.Create <IList <FileReference> >(observer => {
                var initialFiles = GetCurrentFiles(watcherSettings).ToImmutableList();

                var disposable = FileChanges(watcherSettings)
                                 .Scan(initialFiles, (fileList, fileEvent) => {
                    var file = new FileReference {
                        FullPath = fileEvent.FullPath
                    };
                    if (fileEvent.ChangeType == WatcherChangeTypes.Created)
                    {
                        fileList = fileList.Add(file);
                    }
                    else if (fileEvent.ChangeType == WatcherChangeTypes.Renamed)
                    {
                        var renameEvent = (RenamedEventArgs)fileEvent;
                        var oldFile = new FileReference {
                            FullPath = renameEvent.OldFullPath
                        };
                        fileList = fileList.Remove(oldFile);
                        fileList = fileList.Add(file);
                    }
                    else if (fileEvent.ChangeType == WatcherChangeTypes.Deleted)
                    {
                        fileList = fileList.Remove(file);
                    }

                    fileList = fileList.Sort();

                    return fileList;
                })
                                 .Select(fileList => fileList as IList <FileReference>)
                                 .Synchronize(observer)
                                 .Subscribe(observer);

                observer.OnNext(initialFiles);

                return disposable;
            }).Replay(1).RefCount());
        }
Example #12
0
        private async Task <Response> SaveRadarr()
        {
            var radarrSettings = this.Bind <RadarrSettings>();

            //Check Watcher and CP make sure they are not enabled
            var watcher = await WatcherSettings.GetSettingsAsync();

            if (watcher.Enabled)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "Watcher is enabled, we cannot enable Watcher and Radarr"
                }));
            }

            var cp = await CpSettings.GetSettingsAsync();

            if (cp.Enabled)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "CouchPotato is enabled, we cannot enable Watcher and CouchPotato"
                }));
            }

            var valid = this.Validate(radarrSettings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            radarrSettings.ApiKey = radarrSettings.ApiKey.Trim();
            var result = await RadarrSettings.SaveSettingsAsync(radarrSettings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for Radarr!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
Example #13
0
        private MovieSenderResult SendToWatcher(RequestedModel model, WatcherSettings settings)
        {
            var result = WatcherApi.AddMovie(model.ImdbId, settings.ApiKey, settings.FullUri);

            if (result.Error)
            {
                Log.Error(result.ErrorMessage);
                return(new MovieSenderResult {
                    Result = false
                });
            }
            if (result.response)
            {
                return(new MovieSenderResult {
                    Result = true, MovieSendingEnabled = true
                });
            }
            Log.Error(result.message);
            return(new MovieSenderResult {
                Result = false, MovieSendingEnabled = true
            });
        }
Example #14
0
        // we do not want to set here...
        public string[] QueuedIds()
        {
            try
            {
                var watcherSettings = WatcherSettings.GetSettings();

                if (watcherSettings.Enabled)
                {
                    var movies = Cache.Get <string[]>(CacheKeys.WatcherQueued);

                    if (movies != null)
                    {
                        return(movies);
                    }
                    return(new string[] {});
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
                return(new string[] { });
            }
            return(new string[] {});
        }
Example #15
0
        private async Task <Negotiator> Watcher()
        {
            var settings = await WatcherSettings.GetSettingsAsync();

            return(View["Watcher", settings]);
        }