Ejemplo n.º 1
0
        public async Task ExtractCover(Libraries.LibraryModel library, ComicFile comicFile)
        {
            try
            {
                // OPEN ZIP ARCHIVE
                if (!File.Exists(comicFile.FilePath))
                {
                    return;
                }
                using (var zipArchiveStream = new FileStream(comicFile.FilePath, FileMode.Open, FileAccess.Read))
                {
                    using (var zipArchive = new ZipArchive(zipArchiveStream, ZipArchiveMode.Read))
                    {
                        // LOCATE FIRST JPG ENTRY
                        var zipEntry = zipArchive.Entries
                                       .Where(x =>
                                              x.Name.ToLower().EndsWith(".jpg") ||
                                              x.Name.ToLower().EndsWith(".jpeg") ||
                                              x.Name.ToLower().EndsWith(".png"))
                                       .OrderBy(x => x.Name)
                                       .Take(1)
                                       .FirstOrDefault();
                        if (zipEntry == null)
                        {
                            return;
                        }

                        // OPEN STREAM
                        using (var zipEntryStream = zipEntry.Open())
                        {
                            await this.SaveThumbnail(zipEntryStream, comicFile.CoverPath);

                            zipEntryStream.Close();
                            zipEntryStream.Dispose();
                        }

                        // RELEASE DATE
                        File.SetLastWriteTime(comicFile.CoverPath, zipEntry.LastWriteTime.DateTime.ToLocalTime());
                        comicFile.ReleaseDate = zipEntry.LastWriteTime.DateTime.ToLocalTime();

                        zipArchive.Dispose();
                    }

                    zipArchiveStream.Close();
                    zipArchiveStream.Dispose();
                }
            }
            catch (Exception) { throw; }
        }
        public async Task <bool> SaveData(Libraries.LibraryModel library, byte[] serializedData)
        {
            try
            {
                var libraryDataPath = $"{library.LibraryKey}{this.PathSeparator}{Libraries.LibraryModel.SyncFile}";
                if (System.IO.File.Exists(libraryDataPath))
                {
                    System.IO.File.Delete(libraryDataPath);
                }
                await Task.Run(() => System.IO.File.WriteAllBytes(libraryDataPath, serializedData));

                return(System.IO.File.Exists(libraryDataPath));
            }
            catch (Exception) { throw; }
        }
        public async Task <byte[]> LoadData(Libraries.LibraryModel library)
        {
            try
            {
                var libraryDataPath = $"{library.LibraryKey}{this.PathSeparator}{Libraries.LibraryModel.SyncFile}";
                if (!System.IO.File.Exists(libraryDataPath))
                {
                    libraryDataPath = $"{library.LibraryKey}{this.PathSeparator}{Libraries.LibraryModel.SyncFile_OLD}";
                }

                if (!System.IO.File.Exists(libraryDataPath))
                {
                    return(null);
                }

                byte[] serializedData = null;
                await Task.Run(() => serializedData = System.IO.File.ReadAllBytes(libraryDataPath));

                return(serializedData);
            }
            catch (Exception) { throw; }
        }
Ejemplo n.º 4
0
        public async Task <List <ComicPageVM> > ExtractPages(Libraries.LibraryModel library, ComicFile comicFile)
        {
            var pages = new List <ComicPageVM>();

            try
            {
                if (!File.Exists(comicFile.FilePath))
                {
                    return(pages);
                }
                if (!Directory.Exists(comicFile.CachePath))
                {
                    Directory.CreateDirectory(comicFile.CachePath);
                }

                // OPEN ZIP ARCHIVE
                using (var zipArchiveStream = new FileStream(comicFile.FilePath, FileMode.Open, FileAccess.Read))
                {
                    using (var zipArchive = new ZipArchive(zipArchiveStream, ZipArchiveMode.Read))
                    {
                        // LOCATE PAGE ENTRIES
                        short pageIndex  = 0;
                        var   zipEntries = zipArchive.Entries
                                           .Where(x =>
                                                  x.Name.ToLower().EndsWith(".jpg") ||
                                                  x.Name.ToLower().EndsWith(".jpeg") ||
                                                  x.Name.ToLower().EndsWith(".png"))
                                           .OrderBy(x => x.Name)
                                           .ToList();
                        if (zipEntries == null)
                        {
                            return(pages);
                        }

                        // LOOP THROUGH ZIP ENTRIES
                        foreach (var zipEntry in zipEntries)
                        {
                            // PAGE DATA
                            var page = new ComicPageVM
                            {
                                Index     = pageIndex,
                                Text      = pageIndex.ToString().PadLeft(3, "0".ToCharArray()[0]),
                                IsVisible = false
                            };
                            page.Path = $"{comicFile.CachePath}{this.PathSeparator}P{page.Text}.jpg";
                            pages.Add(page);
                            pageIndex++;

                            // EXTRACT PAGE FILE
                            if (!File.Exists(page.Path))
                            {
                                using (var zipEntryStream = zipEntry.Open())
                                {
                                    using (var pageStream = new FileStream(page.Path, FileMode.CreateNew, FileAccess.Write))
                                    {
                                        await zipEntryStream.CopyToAsync(pageStream);

                                        await pageStream.FlushAsync();

                                        pageStream.Close();
                                    }
                                    zipEntryStream.Close();
                                    zipEntryStream.Dispose();
                                }
                            }

                            // PAGE SIZE
                            var pageSize = await this.GetPageSize(page.Path);

                            page.PageSize = new ComicPageSize(pageSize.Width, pageSize.Height);
                        }

                        zipArchive.Dispose();
                    }

                    zipArchiveStream.Close();
                    zipArchiveStream.Dispose();
                }

                return(pages);
            }
            catch (Exception) { throw; }
        }