public DownloadViewModel(DownloadedChapterInfo downloadInfo, ISemaphore downloadSemaphore)
        {
            if (downloadInfo == null)
                throw new ArgumentNullException("downloadInfo");

            if (downloadSemaphore == null)
                throw new ArgumentNullException("downloadSemaphore");

            if (downloadInfo.ChapterRecord == null)
                throw new ArgumentException("Chapter record is invalid.", "downloadInfo");

            if (String.IsNullOrEmpty(downloadInfo.ChapterRecord.ChapterId))
                throw new ArgumentException("Chapter record id is invalid.", "downloadInfo");

            if (downloadInfo.ChapterRecord.MangaRecord == null)
                throw new ArgumentException("Manga record is invalid.", "downloadInfo");

            if (String.IsNullOrEmpty(downloadInfo.ChapterRecord.MangaRecord.MangaId))
                throw new ArgumentException("Manga record id is invalid.", "downloadInfo");

            _downloadInfo = downloadInfo;
            _downloadSemaphore = downloadSemaphore;

            _scraper = ScraperLoader.Instance.AllScrapers.FirstOrDefault(s => s.ScraperGuid == downloadInfo.ChapterRecord.Scraper);

            if (_scraper != null)
            {
                _downloader = _scraper.GetDownloader();

                // register downloader events
                _downloader.DownloadProgress += _downloader_DownloadProgress;
                _downloader.DownloadCompleted += _downloader_DownloadCompleted;
            }

            if (!String.IsNullOrEmpty(_downloadInfo.Path))
            {
                // file was already downloaded
                State = DownloadState.Unknown;
                Completed = true;
            }
            else
            {
                // we will be downloading the file now
                State = DownloadState.Ok;
                Completed = false;
            }

            CurrentActionText = String.Empty;

            _cancelDownloadCommand = new RelayCommand(Cancel, x => !Completed);
            _removeDownloadCommand = new RelayCommand(Remove);
            _openDownloadCommand = new RelayCommand(Open, x => DownloadExists);
            _retryDownloadCommand = new RelayCommand(RetryDownload, x => _downloader != null
                                                                         && Completed
                                                                         && !DownloadExists
                                                                         && !String.IsNullOrEmpty(_downloadInfo.DownloadFolder));

            CancelText = ButtonCancelText;
        }
        public ChapterViewModel(IChapterRecord chapter, DownloadedChapterInfo downloadInfo)
        {
            if (chapter == null)
                throw new ArgumentNullException("chapter");

            _chapterRecord = chapter;
            _downloadInfo = downloadInfo;
        }
Example #3
0
        public ChapterViewModel(IChapterRecord chapter, DownloadedChapterInfo downloadInfo)
        {
            if (chapter == null)
            {
                throw new ArgumentNullException("chapter");
            }

            _chapterRecord = chapter;
            _downloadInfo  = downloadInfo;
        }
Example #4
0
        public bool RemoveDownloadInfo(DownloadedChapterInfo downloadedChapterInfo)
        {
            if (downloadedChapterInfo == null)
            {
                throw new ArgumentNullException("downloadedChapterInfo");
            }

            if (downloadedChapterInfo.ChapterRecord == null)
            {
                throw new ArgumentException("Invalid chapter record.", "downloadedChapterInfo");
            }

            return(_storage.RemoveDownloadInfo(downloadedChapterInfo.ChapterRecord.ChapterId));
        }
 public bool StoreDownloadInfo(DownloadedChapterInfo downloadedChapterInfo)
 {
     return _storage.StoreChapterInfo(downloadedChapterInfo);
 }
        public bool RemoveDownloadInfo(DownloadedChapterInfo downloadedChapterInfo)
        {
            if (downloadedChapterInfo == null)
                throw new ArgumentNullException("downloadedChapterInfo");

            if (downloadedChapterInfo.ChapterRecord == null)
                throw new ArgumentException("Invalid chapter record.", "downloadedChapterInfo");

            return _storage.RemoveDownloadInfo(downloadedChapterInfo.ChapterRecord.ChapterId);
        }
Example #7
0
        public bool StoreChapterInfo(DownloadedChapterInfo chapterInfo)
        {
            if (chapterInfo == null)
            {
                throw new ArgumentNullException("chapterInfo");
            }

            if (chapterInfo.ChapterRecord == null)
            {
                throw new ArgumentException("Chapter record is invalid.", "chapterInfo");
            }

            if (String.IsNullOrEmpty(chapterInfo.ChapterRecord.ChapterId))
            {
                throw new ArgumentException("Chapter record id is invalid.", "chapterInfo");
            }

            if (chapterInfo.ChapterRecord.MangaRecord == null)
            {
                throw new ArgumentException("Manga record is invalid.", "chapterInfo");
            }

            if (String.IsNullOrEmpty(chapterInfo.ChapterRecord.MangaRecord.MangaId))
            {
                throw new ArgumentException("Manga record id is invalid.", "chapterInfo");
            }

            const string insertMangaSql = @"INSERT OR IGNORE 
                                                INTO Mangas(
                                                        ScraperId, 
                                                        MangaId, 
                                                        MangaName, 
                                                        Url) 
                                                VALUES (
                                                        @ScraperId, 
                                                        @MangaId, 
                                                        @MangaName,
                                                        @Url)";

            const string insertChapterSql = @"INSERT OR REPLACE 
                                                INTO Chapters(
                                                        ScraperId, 
                                                        MangaId, 
                                                        ChapterId, 
                                                        ChapterName, 
                                                        Url, 
                                                        Downloaded, 
                                                        Path,
                                                        DownloadFolder,
                                                        FormatProviderId) 
                                                VALUES (
                                                        @ScraperId, 
                                                        @MangaId, 
                                                        @ChapterId, 
                                                        @ChapterName, 
                                                        @Url, 
                                                        @Downloaded, 
                                                        @Path,
                                                        @DownloadFolder,
                                                        @FormatProviderId);";

            int affectedRows;

            using (var connection = GetConnection())
                using (var transaction = connection.BeginTransaction())
                {
                    using (var command = GetTextCommand(insertMangaSql))
                    {
                        command.Parameters.AddWithValue("@ScraperId", chapterInfo.ChapterRecord.MangaRecord.Scraper);
                        command.Parameters.AddWithValue("@MangaId", chapterInfo.ChapterRecord.MangaRecord.MangaId);
                        command.Parameters.AddWithValue("@MangaName", chapterInfo.ChapterRecord.MangaRecord.MangaName);
                        command.Parameters.AddWithValue("@Url", chapterInfo.ChapterRecord.MangaRecord.Url);

                        ExecuteNonQuery(command, connection, transaction);
                    }

                    using (var command = GetTextCommand(insertChapterSql))
                    {
                        command.Parameters.AddWithValue("@ScraperId", chapterInfo.ChapterRecord.MangaRecord.Scraper);
                        command.Parameters.AddWithValue("@MangaId", chapterInfo.ChapterRecord.MangaRecord.MangaId);
                        command.Parameters.AddWithValue("@ChapterId", chapterInfo.ChapterRecord.ChapterId);
                        command.Parameters.AddWithValue("@ChapterName", chapterInfo.ChapterRecord.ChapterName);
                        command.Parameters.AddWithValue("@Url", chapterInfo.ChapterRecord.Url);
                        command.Parameters.AddWithValue("@Downloaded", GetDBSafeDateTime(chapterInfo.Downloaded));
                        command.Parameters.AddWithValue("@Path", chapterInfo.Path);
                        command.Parameters.AddWithValue("@DownloadFolder", chapterInfo.DownloadFolder);
                        command.Parameters.AddWithValue("@FormatProviderId", chapterInfo.DownloadFormatProviderId);

                        affectedRows = ExecuteNonQuery(command, connection, transaction);
                    }

                    CommitTransaction(transaction);
                }

            return(affectedRows == 1);
        }
Example #8
0
        public DownloadViewModel(DownloadedChapterInfo downloadInfo, ISemaphore downloadSemaphore)
        {
            if (downloadInfo == null)
            {
                throw new ArgumentNullException("downloadInfo");
            }

            if (downloadSemaphore == null)
            {
                throw new ArgumentNullException("downloadSemaphore");
            }

            if (downloadInfo.ChapterRecord == null)
            {
                throw new ArgumentException("Chapter record is invalid.", "downloadInfo");
            }

            if (String.IsNullOrEmpty(downloadInfo.ChapterRecord.ChapterId))
            {
                throw new ArgumentException("Chapter record id is invalid.", "downloadInfo");
            }

            if (downloadInfo.ChapterRecord.MangaRecord == null)
            {
                throw new ArgumentException("Manga record is invalid.", "downloadInfo");
            }

            if (String.IsNullOrEmpty(downloadInfo.ChapterRecord.MangaRecord.MangaId))
            {
                throw new ArgumentException("Manga record id is invalid.", "downloadInfo");
            }

            _downloadInfo      = downloadInfo;
            _downloadSemaphore = downloadSemaphore;

            _scraper = ScraperLoader.Instance.AllScrapers.FirstOrDefault(s => s.ScraperGuid == downloadInfo.ChapterRecord.Scraper);

            if (_scraper != null)
            {
                _downloader = _scraper.GetDownloader();

                // register downloader events
                _downloader.DownloadProgress  += _downloader_DownloadProgress;
                _downloader.DownloadCompleted += _downloader_DownloadCompleted;
            }

            if (!String.IsNullOrEmpty(_downloadInfo.Path))
            {
                // file was already downloaded
                State     = DownloadState.Unknown;
                Completed = true;
            }
            else
            {
                // we will be downloading the file now
                State     = DownloadState.Ok;
                Completed = false;
            }

            CurrentActionText = String.Empty;

            _cancelDownloadCommand = new RelayCommand(Cancel, x => !Completed);
            _removeDownloadCommand = new RelayCommand(Remove);
            _openDownloadCommand   = new RelayCommand(Open, x => DownloadExists);
            _retryDownloadCommand  = new RelayCommand(RetryDownload, x => _downloader != null &&
                                                      Completed &&
                                                      !DownloadExists &&
                                                      !String.IsNullOrEmpty(_downloadInfo.DownloadFolder));

            CancelText = ButtonCancelText;
        }
Example #9
0
        public bool StoreChapterInfo(DownloadedChapterInfo chapterInfo)
        {
            if (chapterInfo == null)
                throw new ArgumentNullException("chapterInfo");

            if (chapterInfo.ChapterRecord == null)
                throw new ArgumentException("Chapter record is invalid.", "chapterInfo");

            if (String.IsNullOrEmpty(chapterInfo.ChapterRecord.ChapterId))
                throw new ArgumentException("Chapter record id is invalid.", "chapterInfo");

            if (chapterInfo.ChapterRecord.MangaRecord == null)
                throw new ArgumentException("Manga record is invalid.", "chapterInfo");

            if (String.IsNullOrEmpty(chapterInfo.ChapterRecord.MangaRecord.MangaId))
                throw new ArgumentException("Manga record id is invalid.", "chapterInfo");

            const string insertMangaSql = @"INSERT OR IGNORE
                                                INTO Mangas(
                                                        ScraperId,
                                                        MangaId,
                                                        MangaName,
                                                        Url)
                                                VALUES (
                                                        @ScraperId,
                                                        @MangaId,
                                                        @MangaName,
                                                        @Url)";

            const string insertChapterSql = @"INSERT OR REPLACE
                                                INTO Chapters(
                                                        ScraperId,
                                                        MangaId,
                                                        ChapterId,
                                                        ChapterName,
                                                        Url,
                                                        Downloaded,
                                                        Path,
                                                        DownloadFolder,
                                                        FormatProviderId)
                                                VALUES (
                                                        @ScraperId,
                                                        @MangaId,
                                                        @ChapterId,
                                                        @ChapterName,
                                                        @Url,
                                                        @Downloaded,
                                                        @Path,
                                                        @DownloadFolder,
                                                        @FormatProviderId);";

            int affectedRows;

            using (var connection = GetConnection())
            using (var transaction = connection.BeginTransaction())
            {
                using (var command = GetTextCommand(insertMangaSql))
                {
                    command.Parameters.AddWithValue("@ScraperId", chapterInfo.ChapterRecord.MangaRecord.Scraper);
                    command.Parameters.AddWithValue("@MangaId", chapterInfo.ChapterRecord.MangaRecord.MangaId);
                    command.Parameters.AddWithValue("@MangaName", chapterInfo.ChapterRecord.MangaRecord.MangaName);
                    command.Parameters.AddWithValue("@Url", chapterInfo.ChapterRecord.MangaRecord.Url);

                    ExecuteNonQuery(command, connection, transaction);
                }

                using (var command = GetTextCommand(insertChapterSql))
                {
                    command.Parameters.AddWithValue("@ScraperId", chapterInfo.ChapterRecord.MangaRecord.Scraper);
                    command.Parameters.AddWithValue("@MangaId", chapterInfo.ChapterRecord.MangaRecord.MangaId);
                    command.Parameters.AddWithValue("@ChapterId", chapterInfo.ChapterRecord.ChapterId);
                    command.Parameters.AddWithValue("@ChapterName", chapterInfo.ChapterRecord.ChapterName);
                    command.Parameters.AddWithValue("@Url", chapterInfo.ChapterRecord.Url);
                    command.Parameters.AddWithValue("@Downloaded", GetDBSafeDateTime(chapterInfo.Downloaded));
                    command.Parameters.AddWithValue("@Path", chapterInfo.Path);
                    command.Parameters.AddWithValue("@DownloadFolder", chapterInfo.DownloadFolder);
                    command.Parameters.AddWithValue("@FormatProviderId", chapterInfo.DownloadFormatProviderId);

                    affectedRows = ExecuteNonQuery(command, connection, transaction);
                }

                CommitTransaction(transaction);
            }

            return affectedRows == 1;
        }
Example #10
0
 public bool StoreDownloadInfo(DownloadedChapterInfo downloadedChapterInfo)
 {
     return(_storage.StoreChapterInfo(downloadedChapterInfo));
 }