Esempio n. 1
0
        /// <summary>
        /// 条目搜索
        /// </summary>
        /// <param name="client"></param>
        /// <param name="keywords">关键词</param>
        /// <param name="start">开始条数</param>
        /// <param name="maxResults">每页条数</param>
        /// <param name="type">类型</param>
        /// <param name="responseGroup">返回数据大小</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static async Task <SearchResult> SearchAsync(this IBangumiClient client, string keywords, int start, int maxResults, SubjectType?type = null, ResponseGroup responseGroup = ResponseGroup.Small, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/search/subject/{WebUtility.UrlEncode(keywords)}?";

            if (type.HasValue)
            {
                url += $"type={(int)type}";
            }
            url += $"&responseGroup={responseGroup.GetValue()}&start={start}&max_results={maxResults}";

            var result = await client.GetAsync <SearchResult>(url, cancellationToken);

            if (result.ErrorCode == (int)HttpStatusCode.NotFound)
            {
                result = new SearchResult
                {
                    List = Array.Empty <Subject>()
                };
            }

            return(result);
        }
Esempio n. 2
0
        public ProgressViewModel(
            IUserService userService,
            IBangumiClient bangumiClient,
            INavigationService navigationService,
            IAppToastService appToastService)
        {
            _userService       = userService;
            _bangumiClient     = bangumiClient;
            _navigationService = navigationService;
            _appToastService   = appToastService;

            MessengerInstance.Register <SignedInMessage>(this, message =>
            {
                RefreshCommand.Execute(null);
            });
            MessengerInstance.Register <SignedOutMessage>(this, message =>
            {
                Collection = null;
            });

            if (_bangumiClient.IsSignIn)
            {
                RefreshCommand.Execute(null);
            }
        }
        /// <summary>
        /// 管理收藏
        /// </summary>
        /// <param name="client"></param>
        /// <param name="subjectId">条目 ID</param>
        /// <param name="status">收藏状态</param>
        /// <param name="comment">简评</param>
        /// <param name="tags">标签</param>
        /// <param name="rating">评分</param>
        /// <param name="privacy">收藏隐私</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SubjectCollectionStatus> UpdateCollectionStatusAsync(this IBangumiClient client, int subjectId, CollectionStatus status, string comment = null, string[] tags = null, int?rating = null, bool privacy = false, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var postData = new Dictionary <string, string>
            {
                ["status"] = status.GetValue()
            };

            if (comment != null)
            {
                postData["comment"] = comment;
            }
            if (tags != null)
            {
                postData["tags"] = string.Join(" ", tags);
            }
            if (rating.HasValue)
            {
                postData["rating"] = rating.Value.ToString();
            }
            postData["privacy"] = privacy ? "1" : "0";

            var postContent = new FormUrlEncodedContent(postData);

            var url = $"/collection/{subjectId}/update";

            return(client.PostAsync <SubjectCollectionStatus>(url, postContent, cancellationToken));
        }
        /// <summary>
        /// 获取用户收藏列表
        /// </summary>
        /// <param name="client"></param>
        /// <param name="uid">UID</param>
        /// <param name="cat">收藏类型</param>
        /// <param name="ids">收藏条目 ID</param>
        /// <param name="responseGroup"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <CollectionSubject[]> GetUserCollectionAsync(
            this IBangumiClient client,
            long uid,
            CollectionType cat,
            int[] ids = null,
            ResponseGroup responseGroup         = ResponseGroup.Medium,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (responseGroup == ResponseGroup.Large)
            {
                throw new NotSupportedException();
            }

            var url = $"/user/{uid}/collection?cat={cat.GetValue()}";

            if (ids != null)
            {
                url += $"&ids={string.Join(",", ids)}";
            }
            url += $"&responseGroup={responseGroup.GetValue()}";
            return(client.GetAsync <CollectionSubject[]>(url, cancellationToken));
        }
        /// <summary>
        /// 获取章节数据
        /// </summary>
        /// <param name="client"></param>
        /// <param name="id">条目 ID</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <Subject> GetSubjectEpInfoAsync(this IBangumiClient client, int id, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/subject/{id}/ep";

            return(client.GetAsync <Subject>(url, cancellationToken));
        }
        /// <summary>
        /// 获取每日放送
        /// </summary>
        /// <param name="client"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <Calendar[]> GetCalendarAsync(this IBangumiClient client, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            const string url = "/calendar";

            return(client.GetAsync <Calendar[]>(url, cancellationToken));
        }
Esempio n. 7
0
        /// <summary>
        /// 更新收视进度
        /// </summary>
        /// <param name="client"></param>
        /// <param name="epId">章节 ID</param>
        /// <param name="status">收视类型</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <BangumiResult> UpdateEpStatusAsync(this IBangumiClient client, int epId, EpStatus status, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/ep/{epId}/status/{status.GetValue()}";

            return(client.GetAsync <BangumiResult>(url, cancellationToken));
        }
        /// <summary>
        /// 获取用户基础信息
        /// </summary>
        /// <param name="client"></param>
        /// <param name="uid">UID</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <User> GetUserAsync(this IBangumiClient client, long uid, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/user/{uid}";

            return(client.GetAsync <User>(url, cancellationToken));
        }
        /// <summary>
        /// 获取用户某个条目收视进度
        /// </summary>
        /// <param name="client"></param>
        /// <param name="uid">UID</param>
        /// <param name="subjectId">条目 ID</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SubjectProgress> GetSubjectProgressAsync(this IBangumiClient client, long uid, int subjectId, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/user/{uid}/progress?subject_id={subjectId}";

            return(client.GetAsync <SubjectProgress>(url, cancellationToken));
        }
        /// <summary>
        /// 获取条目信息
        /// </summary>
        /// <param name="client"></param>
        /// <param name="id">条目 ID</param>
        /// <param name="responseGroup">返回数据大小</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <Subject> GetSubjectAsync(this IBangumiClient client, int id, ResponseGroup responseGroup = ResponseGroup.Small, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/subject/{id}?responseGroup={responseGroup.GetValue()}";

            return(client.GetAsync <Subject>(url, cancellationToken));
        }
        /// <summary>
        /// 获取用户指定类型的收藏概览,固定返回最近更新的收藏,不支持翻页
        /// </summary>
        /// <param name="client"></param>
        /// <param name="uid"></param>
        /// <param name="subjectType"></param>
        /// <param name="maxResults"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <CollectionOverview[]> GetUserCollectionsOverviewAsync(this IBangumiClient client, long uid, SubjectType subjectType, int maxResults, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/user/{uid}/collections/{subjectType.GetValue()}?max_results={maxResults}";

            return(client.GetAsync <CollectionOverview[]>(url, cancellationToken));
        }
        /// <summary>
        /// 获取指定条目收藏信息
        /// </summary>
        /// <param name="client"></param>
        /// <param name="subjectId">条目 ID</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SubjectCollectionStatus> GetCollectionStatusAsync(this IBangumiClient client, int subjectId, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            var url = $"/collection/{subjectId}";

            return(client.GetAsync <SubjectCollectionStatus>(url, cancellationToken));
        }
        /// <summary>
        /// 获取用户基础信息
        /// </summary>
        /// <param name="client"></param>
        /// <param name="username">用户名</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <User> GetUserAsync(this IBangumiClient client, string username, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }

            var url = $"/user/{WebUtility.UrlEncode(username)}";

            return(client.GetAsync <User>(url, cancellationToken));
        }
        /// <summary>
        /// 获取用户某个条目收视进度
        /// </summary>
        /// <param name="client"></param>
        /// <param name="username">用户名</param>
        /// <param name="subjectId">条目 ID</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SubjectProgress> GetSubjectProgressAsync(this IBangumiClient client, string username, int subjectId, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }

            var url = $"/user/{WebUtility.UrlEncode(username)}/progress?subject_id={subjectId}";

            return(client.GetAsync <SubjectProgress>(url, cancellationToken));
        }
Esempio n. 15
0
        public RefreshTokenTask()
        {
            var appConfiguration = new AppConfiguration();

            _bangumiClient = new BangumiClientBuilder()
                             .WithConfig(options =>
            {
                options.AppKey      = appConfiguration.AppKey;
                options.AppSecret   = appConfiguration.AppSecret;
                options.RedirectUri = appConfiguration.RedirectUri;
                options.RetryCount  = 3;
                options.RetryDelay  = TimeSpan.FromSeconds(1);
            })
                             .UseDefaultAuthorizationProvider()
                             .UseDefaultAccessTokenStorage()
                             .Build();
        }
Esempio n. 16
0
        public ShellViewModel(
            IBangumiClient client,
            IUserService userService,
            IAppDialogService appDialogService,
            IAppToastService appToastService,
            IAppCache appCache,
            IMessenger messenger)
        {
            _client           = client;
            _userService      = userService;
            _appDialogService = appDialogService;
            _appToastService  = appToastService;
            _appCache         = appCache;
            _messenger        = messenger;

            if (IsSignIn)
            {
                LoadUser();
            }
        }
Esempio n. 17
0
        public SubjectViewModel(
            IBangumiClient client,
            ISubjectService subjectService,
            IAppToastService appToastService,
            IMessenger messenger)
        {
            _client          = client;
            _subjectService  = subjectService;
            _appToastService = appToastService;

            messenger.Register <SignedInMessage>(this, message =>
            {
                RaisePropertyChanged(nameof(IsSignIn));
                Load(_id);
            });
            messenger.Register <SignedOutMessage>(this, message =>
            {
                RaisePropertyChanged(nameof(IsSignIn));
                Load(_id);
            });
        }
Esempio n. 18
0
 public CalendarService(IBangumiClient client)
 {
     _client = client;
 }
Esempio n. 19
0
 public SubjectService(IBangumiClient client)
 {
     _client = client;
 }
Esempio n. 20
0
 public UserService(IBangumiClient client)
 {
     _client = client;
 }