Пример #1
0
        private async Task HandleTorrentStatusUpdates(IReadOnlyList <ITorrentClientTorrent> torrents)
        {
            var downloadingMovies = (await _movieService.GetMoviesAsync())
                                    .Where(x =>
                                           x.Deleted == null &&
                                           (x.Status == MovieStatusEnum.Downloading || x.Status == MovieStatusEnum.DownloadQueued || x.Status == MovieStatusEnum.DownloadingPaused)
                                           );

            foreach (var torrent in torrents)
            {
                var movieJob = downloadingMovies.Where(x => x.TorrentHash == torrent.Hash).FirstOrDefault();
                if (movieJob == null)
                {
                    continue;
                }

                // Update our database status
                MovieStatusEnum status = movieJob.Status;
                switch (torrent.Status)
                {
                case TorrentStatusEnum.Check:
                case TorrentStatusEnum.CheckWait:
                case TorrentStatusEnum.DownloadWait:
                    status = MovieStatusEnum.DownloadQueued;
                    break;

                case TorrentStatusEnum.Download:
                    status = MovieStatusEnum.Downloading;
                    break;

                case TorrentStatusEnum.Stopped:
                    status = MovieStatusEnum.DownloadingPaused;
                    break;
                }

                if (movieJob.Status != status)
                {
                    await _movieService.SetMovieStatus(movieJob.Id, status);
                }

                if (!torrent.IsFinished)
                {
                    continue;
                }

                var path = Path.Combine(_configuration.MoviesDownloadDir, torrent.Name);
                if (Directory.Exists(path) || File.Exists(path))
                {
                    await _movieService.SetMovieStatus(movieJob.Id, MovieStatusEnum.Downloaded);
                }
            }
        }
Пример #2
0
        public async Task SetMovieStatus(int id, MovieStatusEnum status)
        {
            using (var db = _dbContextFactory.CreateDbContext())
            {
                var m = await db.Movies.Where(x => x.Id == id).FirstOrDefaultAsync();

                m.Status = status;
                if (status == MovieStatusEnum.Finished)
                {
                    m.Deleted = DateTime.Now;
                }

                if (status == MovieStatusEnum.TranscodingStarted)
                {
                    m.TranscodingStarted = DateTime.Now;
                }

                await db.SaveChangesAsync();
            }
        }