Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
        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));
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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));
        }
Ejemplo n.º 13
0
        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));
        }
Ejemplo n.º 14
0
        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));
        }
Ejemplo n.º 15
0
        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));
        }
Ejemplo n.º 16
0
        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));
        }
Ejemplo n.º 17
0
        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));
        }
Ejemplo n.º 18
0
        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));
        }
Ejemplo n.º 19
0
        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);
            }
        }