public virtual async ValueTask <Tuple <ResponseStatus, object> > GetImage(long imageId) { var image = await MangaManager.GetImage(imageId); FileTreeNode path = null; if (image != null) { path = LibraryManager.GeFileTreeNode(image.PathId); } if (path == null) { return(new Tuple <ResponseStatus, object>( ResponseStatus.NotFound, null)); } var data = await path.ReadAllBytes(); return(new Tuple <ResponseStatus, object>( data != null ? ResponseStatus.Success : ResponseStatus.NotFound, data)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > RemoveMangaFavorite(long userId, long mangaId) { await MangaManager.RemoveMangaFavorite(userId, mangaId); return(new Tuple <ResponseStatus, object>( ResponseStatus.Success, null)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > RecordReadProgress(ReadProgress readProgress, long userId) { readProgress.UserId = userId; await MangaManager.Upsert(readProgress); return(new Tuple <ResponseStatus, object>( ResponseStatus.Success, null)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > GetChapter(long userId, long chapterId) { var chapter = await MangaManager.GetChapter(chapterId, userId); return(new Tuple <ResponseStatus, object>( chapter != null ? ResponseStatus.Success : ResponseStatus.NotFound, chapter)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > GetManga(long userId, long mangaId) { var manga = await MangaManager.GetManga(mangaId, userId); return(new Tuple <ResponseStatus, object>( manga != null ? ResponseStatus.Success : ResponseStatus.NotFound, manga)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > AddTag(Tag tag) { tag = await MangaManager.Insert(tag); return(new Tuple <ResponseStatus, object>( tag != null ? ResponseStatus.Success : ResponseStatus.BadRequest, tag)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > DeleteTagType(long typeId) { var success = await MangaManager.DeleteTagType(typeId); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.BadRequest, success)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > ListTagTypes() { var tagTypes = await MangaManager.GetTagTypes(); return(new Tuple <ResponseStatus, object>( tagTypes != null ? ResponseStatus.Success : ResponseStatus.NotFound, tagTypes)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > AddTagType(TagType tagType) { var objectId = await MangaManager.Insert(tagType); return(new Tuple <ResponseStatus, object>( objectId > 0 ? ResponseStatus.Success : ResponseStatus.BadRequest, objectId)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > DeleteTag(long tagId) { var success = await MangaManager.DeleteTag(tagId); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.NotFound, success)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > GetTag(long tagId) { var tag = await MangaManager.GetTag(tagId); return(new Tuple <ResponseStatus, object>( tag != null ? ResponseStatus.Success : ResponseStatus.NotFound, tag)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > UpdateTag(Tag tag) { var success = await MangaManager.Update(tag); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.BadRequest, success)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > GetChapterReadProgress(long userId, long chapterId) { var readProgress = await MangaManager.GetReadProgress(userId, chapterId); return(new Tuple <ResponseStatus, object>( readProgress != null ? ResponseStatus.Success : ResponseStatus.NotFound, readProgress)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > AddComment(Comment comment, long userId) { comment.UserId = userId; var success = await MangaManager.Upsert(comment); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.BadRequest, success)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > ListTags(TagQueryHelper query) { var tagIds = await TagKeywordSearchService.Search(query.QueryString, query.TypeId); var tags = await MangaManager.GetTags(tagIds, query.Offset, query.Limit); return(new Tuple <ResponseStatus, object>( tags != null ? ResponseStatus.Success : ResponseStatus.NotFound, tags)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > ListMangas(MangaQueryHelper query, long userId) { var mangaIds = query.QueryType switch { QueryType.Keyword => await MangaKeywordSearchService.Search(query.QueryString), QueryType.Favorite => await FavoriteMangaSearchService.Search(userId), QueryType.History => await MangaReadHistorySearchService.Search(userId), _ => throw new ArgumentOutOfRangeException() }; var mangas = await MangaManager.GetMangas(mangaIds, query.Offset, query.Limit, query.OrderType, query.Asc); return(new Tuple <ResponseStatus, object>( mangas != null ? ResponseStatus.Success : ResponseStatus.NotFound, mangas)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > DeleteManga(long mangaId) { var manga = await MangaManager.GetManga(mangaId, -1); if (manga == null) { return(new Tuple <ResponseStatus, object>( ResponseStatus.NotFound, null)); } var path = LibraryManager.GeFileTreeNode(manga.PathId); var success = await MangaManager.DeleteManga(mangaId) && LibraryManager.Delete(path); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.BadRequest, success)); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > DeleteLibrary(long libraryId) { var library = LibraryManager.GetLibrary(libraryId); if (library == null) { return(new Tuple <ResponseStatus, object>( ResponseStatus.NotFound, false)); } var mangaPathIds = library.Repository.GetAllNodeObjectId(); var mangaIds = await MangaManager.GetMangaIdByFileTreeNodeId(mangaPathIds); foreach (var mangaId in mangaIds) { await MangaManager.DeleteManga(mangaId); } LibraryManager.Delete(library); return(new Tuple <ResponseStatus, object>( ResponseStatus.Success, true)); }
public async ValueTask Execute(ScanMangaTask scanMangaTask) { try { if (scanMangaTask.MangaPath.IsNewItem) { scanMangaTask.Update(TaskStatus.Executing); var manga = await FileTreeNodeToMangaConverter.CreateManga(scanMangaTask.MangaPath); FileTreeNode coverPath = null; if (manga.Cover == null) { coverPath = LibraryManager.GenerateThumbnail(manga.Chapters.First().Images.First().Path); manga.Cover = FileTreeNodeToMangaConverter.CreateImage(coverPath); manga.CoverId = manga.Cover.ObjectId; } if (scanMangaTask.Scraper != null) { var context = new MangaDetail() { Name = manga.Title }; await scanMangaTask.Scraper.ScrapeMetadata(context); manga = await FileTreeNodeToMangaConverter.UpdateManga(manga, context); } manga.Tags = await MangaManager.Insert(manga.Tags); var success = await MangaManager.Insert(manga); if (!success) { Logger.Info($"Update {manga.Title} fail"); if (coverPath != null) { } scanMangaTask.Update(TaskStatus.Fail); } else { LibraryManager.StoreFileTree(scanMangaTask.MangaPath); if (coverPath != null) { LibraryManager.StoreFileTree(coverPath); } scanMangaTask.Update(TaskStatus.Success); } } else { var manga = await FileTreeNodeToMangaConverter.UpdateManga(scanMangaTask.MangaPath); manga.Tags = await MangaManager.Insert(manga.Tags); var success = await MangaManager.Update(manga, true); if (!success) { Logger.Info($"Update {manga.Title} fail"); scanMangaTask.Update(TaskStatus.Fail); } else { LibraryManager.StoreFileTree(scanMangaTask.MangaPath); scanMangaTask.Update(TaskStatus.Success); } } } catch (Exception e) { Logger.Warn(e); scanMangaTask.Update(TaskStatus.Fail); } }