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; } }
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; } }