diff --git a/src/BiliLite.UWP/BiliLite.UWP.csproj b/src/BiliLite.UWP/BiliLite.UWP.csproj index b11cf3a7..ed2dbce8 100644 --- a/src/BiliLite.UWP/BiliLite.UWP.csproj +++ b/src/BiliLite.UWP/BiliLite.UWP.csproj @@ -185,6 +185,7 @@ + @@ -1287,4 +1288,4 @@ --> - \ No newline at end of file + diff --git a/src/BiliLite.UWP/Models/Exceptions/NotFoundException.cs b/src/BiliLite.UWP/Models/Exceptions/NotFoundException.cs new file mode 100644 index 00000000..bfbca802 --- /dev/null +++ b/src/BiliLite.UWP/Models/Exceptions/NotFoundException.cs @@ -0,0 +1,11 @@ +using System; + +namespace BiliLite.Models.Exceptions +{ + public class NotFoundException : Exception + { + public NotFoundException(string msg) : base(msg) + { + } + } +} diff --git a/src/BiliLite.UWP/Models/Requests/Api/SeasonApi.cs b/src/BiliLite.UWP/Models/Requests/Api/SeasonApi.cs index fd4b2592..247b6ed1 100644 --- a/src/BiliLite.UWP/Models/Requests/Api/SeasonApi.cs +++ b/src/BiliLite.UWP/Models/Requests/Api/SeasonApi.cs @@ -13,24 +13,13 @@ public ApiModel Detail(string season_id, bool proxy = false) var api = new ApiModel() { method = RestSharp.Method.Get, - baseUrl = $"{baseUrl}/pgc/view/app/season", + baseUrl = $"{baseUrl}/pgc/view/v2/app/season", parameter = ApiHelper.MustParameter(AppKey, true) + $"&season_id={season_id}" }; api.parameter += ApiHelper.GetSign(api.parameter, AppKey); return api; } - public ApiModel DetailWeb(string season_id) - { - var api = new ApiModel() - { - method = RestSharp.Method.Get, - baseUrl = $"https://bangumi.bilibili.com/view/web_api/season", - parameter = $"season_id={season_id}" - }; - - return api; - } /// /// 短评 /// diff --git a/src/BiliLite.UWP/Pages/SeasonDetailPage.xaml b/src/BiliLite.UWP/Pages/SeasonDetailPage.xaml index 4e13c04d..20315935 100644 --- a/src/BiliLite.UWP/Pages/SeasonDetailPage.xaml +++ b/src/BiliLite.UWP/Pages/SeasonDetailPage.xaml @@ -18,7 +18,7 @@ - + @@ -192,7 +192,7 @@ - + diff --git a/src/BiliLite.UWP/Services/GrpcService.cs b/src/BiliLite.UWP/Services/GrpcService.cs index 97d11b57..4c0d6fcb 100644 --- a/src/BiliLite.UWP/Services/GrpcService.cs +++ b/src/BiliLite.UWP/Services/GrpcService.cs @@ -3,6 +3,7 @@ using Bilibili.App.Dynamic.V2; using Bilibili.App.Interface.V1; using BiliLite.gRPC.Api; +using BiliLite.Models.Exceptions; namespace BiliLite.Services { @@ -24,6 +25,11 @@ public async Task SearchSpaceArchive(string mid, int page = { var reply = SearchArchiveReply.Parser.ParseFrom(result.results); return reply; + } + // 用户搜索一个不存在的关键字导致的 + else if (result.code == -102 && result.message == "请求失败,没有数据返回") + { + throw new NotFoundException(result.message); } else { diff --git a/src/BiliLite.UWP/ViewModels/Season/SeasonDetailPageViewModel.cs b/src/BiliLite.UWP/ViewModels/Season/SeasonDetailPageViewModel.cs index e1ede4fd..4bd0df62 100644 --- a/src/BiliLite.UWP/ViewModels/Season/SeasonDetailPageViewModel.cs +++ b/src/BiliLite.UWP/ViewModels/Season/SeasonDetailPageViewModel.cs @@ -29,6 +29,7 @@ public class SeasonDetailPageViewModel : BaseViewModel private readonly PlayerAPI m_playerApi; private readonly FollowAPI m_followApi; private readonly IMapper m_mapper; + private static readonly ILogger _logger = GlobalLogger.FromCurrentType(); #endregion @@ -156,69 +157,56 @@ public async Task LoadSeasonDetail(string seasonId) throw new CustomizedErrorException(results.message); } - //通过代理访问番剧详情 - var data = await results.GetJson>(); - //代理访问失败,使用Web的Api访问 - if (!data.success) - { - data = await GetWebSeasonDetail(seasonId); - } + //访问番剧详情 + var data = await results.GetJson>(); if (!data.success) { throw new CustomizedErrorException(data.message); } - if (data.result.Limit != null) + try { - var reulstsWeb = await m_seasonApi.DetailWeb(seasonId).Request(); - if (reulstsWeb.status) + //build 75900200 + data.data.Episodes = JsonConvert.DeserializeObject>( + data.data.Modules.FirstOrDefault(x => x["style"].ToString() == "positive")?["data"]?["episodes"] + ?.ToString() ?? "[]"); + data.data.Seasons = JsonConvert.DeserializeObject>( + data.data.Modules.FirstOrDefault(x => x["style"].ToString() == "season")?["data"]?["seasons"] + ?.ToString() ?? "[]"); + var pv = JsonConvert.DeserializeObject>( + data.data.Modules.FirstOrDefault(x => x["style"].ToString() == "section")?["data"]?["episodes"] + ?.ToString() ?? "[]"); + foreach (var item in pv) { - var data_2 = reulstsWeb.GetJObject(); - if (data_2["code"].ToInt32() == 0) - { - data.result.Episodes = await data_2["result"]["episodes"].ToString().DeserializeJson>(); - } + item.SectionType = 1; + data.data.Episodes.Add(item); } } - else + catch (Exception ex) { - try - { - //build 6235200 - data.result.Episodes = JsonConvert.DeserializeObject>(data.result.Modules.FirstOrDefault(x => x["style"].ToString() == "positive")?["data"]?["episodes"]?.ToString() ?? "[]"); - data.result.Seasons = JsonConvert.DeserializeObject>(data.result.Modules.FirstOrDefault(x => x["style"].ToString() == "season")?["data"]?["seasons"]?.ToString() ?? "[]"); - var pv = JsonConvert.DeserializeObject>(data.result.Modules.FirstOrDefault(x => x["style"].ToString() == "section")?["data"]?["episodes"]?.ToString() ?? "[]"); - foreach (var item in pv) - { - item.SectionType = 1; - data.result.Episodes.Add(item); - } - } - catch (Exception) - { - } + _logger.Warn("解析番剧相关数据失败", ex); } - if (data.result.Section != null) + if (data.data.Section != null) { - foreach (var item in data.result.Section) + foreach (var item in data.data.Section) { foreach (var item2 in item.Episodes) { item2.SectionType = 1; } - data.result.Episodes.InsertRange(0, item.Episodes); - //data.result.episodes= data.result.episodes.Concat(item.episodes).ToList(); + data.data.Episodes.InsertRange(0, item.Episodes); + //data.data.episodes= data.data.episodes.Concat(item.episodes).ToList(); } } - var seasonDetail = m_mapper.Map(data.result); + var seasonDetail = m_mapper.Map(data.data); Detail = seasonDetail; - Episodes = data.result.Episodes.Where(x => !x.IsPreview).ToList(); + Episodes = data.data.Episodes.Where(x => !x.IsPreview).ToList(); ShowEpisodes = Episodes.Count > 0; - Previews = data.result.Episodes.Where(x => x.IsPreview).ToList(); + Previews = data.data.Episodes.Where(x => x.IsPreview).ToList(); ShowPreview = Previews.Count > 0; NothingPlay = !ShowEpisodes && !ShowPreview; Loaded = true; @@ -236,35 +224,6 @@ public async Task LoadSeasonDetail(string seasonId) } } - public async Task> GetWebSeasonDetail(string seasonId) - { - var reulsts_web = await m_seasonApi.DetailWeb(seasonId).Request(); - if (!reulsts_web.status) - return new ApiResultModel() - { - code = -101, - message = "无法读取内容" - }; - var data = reulsts_web.GetJObject(); - if (data["code"].ToInt32() != 0) - return new ApiResultModel() - { - code = -101, - message = "无法读取内容" - }; - var objText = data["result"].ToString(); - //处理下会出错的字段 - objText = objText.Replace("\"staff\"", "staff1"); - var model = JsonConvert.DeserializeObject(objText); - model.Episodes = await data["result"]["episodes"].ToString().DeserializeJson>(); - model.UserStatus = new SeasonDetailUserStatusModel() - { - FollowStatus = 0, - Follow = 0 - }; - return new ApiResultModel() { code = 0, message = "", result = model, }; - } - public async void DoFollow() { if (!SettingService.Account.Logined && !await Notify.ShowLoginDialog()) diff --git a/src/BiliLite.UWP/ViewModels/Season/SeasonDetailViewModel.cs b/src/BiliLite.UWP/ViewModels/Season/SeasonDetailViewModel.cs index fbd67d2e..d12b54bc 100644 --- a/src/BiliLite.UWP/ViewModels/Season/SeasonDetailViewModel.cs +++ b/src/BiliLite.UWP/ViewModels/Season/SeasonDetailViewModel.cs @@ -118,6 +118,6 @@ public SeasonDetailSeasonItemModel CurrentSeason public SeasonDetailPaymentModel Payment { get; set; } [JsonProperty("show_payment")] - public bool ShowPayment => Payment is { Dialog: { } }; + public bool ShowPayment => Payment?.Dialog?.Title != null; } } \ No newline at end of file diff --git a/src/BiliLite.UWP/ViewModels/User/UserSubmitVideoViewModel.cs b/src/BiliLite.UWP/ViewModels/User/UserSubmitVideoViewModel.cs index 80777dc0..beb90779 100644 --- a/src/BiliLite.UWP/ViewModels/User/UserSubmitVideoViewModel.cs +++ b/src/BiliLite.UWP/ViewModels/User/UserSubmitVideoViewModel.cs @@ -141,13 +141,15 @@ public async Task GetSubmitVideo() LoadingSubmitVideo = true; if (string.IsNullOrEmpty(Keyword)) { - var api = m_userDetailApi.SubmitVideosCursor(Mid, order: (SubmitVideoOrder)SelectOrder, cursor: m_lastAid); + var api = m_userDetailApi.SubmitVideosCursor(Mid, order: (SubmitVideoOrder)SelectOrder, + cursor: m_lastAid); CurrentTid = SelectTid.Tid; var results = await api.Request(); if (!results.status) { throw new CustomizedErrorException(results.message); } + var data = results.GetJObject(); if (data["code"].ToInt32() != 0) { @@ -164,18 +166,19 @@ public async Task GetSubmitVideo() AttachSubmitVideoItems(submitVideoItems, (int)searchArchive.Total); } } + catch (CustomizedErrorException ex) + { + Notify.ShowMessageToast(ex.Message); + _logger.Error("获取用户投稿失败", ex); + } + catch (NotFoundException ex) + { + Notify.ShowMessageToast("(っ °Д °;)っ 没有找到相应的视频~"); + } catch (Exception ex) { - if (ex is CustomizedErrorException) - { - Notify.ShowMessageToast(ex.Message); - } - else - { - var handel = HandelError(ex); - Notify.ShowMessageToast(handel.message); - } - + var handel = HandelError(ex); + Notify.ShowMessageToast(handel.message); _logger.Error("获取用户投稿失败", ex); } finally