public static async Task <List <FeedlyResult> > GetFeedlyResultFromText(string text) { string language = AppTools.GetLocalSetting(Enums.AppSettings.Language, "en_US").ToLower(); if (language.Contains("_")) { language = language.Split("_")[0]; } text = WebUtility.UrlEncode(text); double time = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime()); string url = $"https://feedly.com/v3/search/feeds?q={text}&n=50&fullTerm=false&organic=true&promoted=true&locale={language}&useV2=true&ck={time}&ct=feedly.desktop&cv=31.0.336"; var data = await AppTools.GetEntityFromUrl <WebFeedlyResult>(url); var results = new List <FeedlyResult>(); if (data != null && data.results != null && data.results.Length > 0) { foreach (var item in data.results) { // 过滤掉废弃的源 if (item.state != "dormant") { results.Add(new FeedlyResult(item)); } } } return(results); }
/// <summary> /// 升级缓存 /// </summary> /// <param name="channels">需要缓存的页面列表</param> /// <returns></returns> private async Task AddCachePage(params CustomPage[] pages) { var list = pages.Distinct().ToArray(); var localFolder = ApplicationData.Current.LocalFolder; var file = await localFolder.CreateFileAsync("CachePageList.json", CreationCollisionOption.OpenIfExists); string content = await FileIO.ReadTextAsync(file); if (string.IsNullOrEmpty(content)) { content = "[]"; } var results = JsonConvert.DeserializeObject <List <CacheModel> >(content); var tasks = new List <Task>(); if (list.Length > 0) { foreach (var page in list) { tasks.Add(Task.Run(async() => { var articles = await AppTools.GetSchemaFromPage(page, true); int now = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime()); if (results.Any(p => p.Page.Id == page.Id)) { var target = results.Where(p => p.Page.Id == page.Id).First(); target.Feeds = articles; target.CacheTime = now; } else { results.Add(new CacheModel() { Page = page, Feeds = articles, CacheTime = now }); } })); } try { await Task.WhenAll(tasks.ToArray()); } catch (Exception ex) { Debug.WriteLine(ex.Message); } finally { content = JsonConvert.SerializeObject(results); await FileIO.WriteTextAsync(file, content); } } }
/// <summary> /// 在应用程序由最终用户正常启动时进行调用。 /// 将在启动应用程序以打开特定文件等情况下使用。 /// </summary> /// <param name="e">有关启动请求和过程的详细信息。</param> protected override void OnLaunched(LaunchActivatedEventArgs e) { Frame rootFrame = Window.Current.Content as Frame; // 不要在窗口已包含内容时重复应用程序初始化, // 只需确保窗口处于活动状态 if (rootFrame == null) { // 创建要充当导航上下文的框架,并导航到第一页 rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: 从之前挂起的应用程序加载状态 } // 将框架放在当前窗口中 Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // 当导航堆栈尚未还原时,导航到第一页, // 并通过将所需信息作为导航参数传入来配置 // 参数 bool isBinding = Convert.ToBoolean(AppTools.GetLocalSetting(AppSettings.IsBindingOneDrive, "False")); bool isLocal = Convert.ToBoolean(AppTools.GetLocalSetting(AppSettings.IsLocalAccount, "False")); bool isSyncOneDrive = Convert.ToBoolean(AppTools.GetLocalSetting(AppSettings.SyncWithStart, "False")); if (isBinding) { if (isSyncOneDrive) { double lastTime = Convert.ToDouble(AppTools.GetLocalSetting(AppSettings.LastSyncTime, "0")); double now = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime()); if (now - 10800 > lastTime) { rootFrame.Navigate(typeof(SplashPage)); } else { rootFrame.Navigate(typeof(MainPage), e.Arguments); } } else { rootFrame.Navigate(typeof(MainPage), e.Arguments); } } else if (isLocal) { rootFrame.Navigate(typeof(MainPage), e.Arguments); } else { rootFrame.Navigate(typeof(OneDrivePage)); } } // 确保当前窗口处于活动状态 Window.Current.Activate(); } }
private async void Sync() { bool result = await App.OneDrive.OneDriveAuthorize(); if (result) { int now = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime()); var tasks = new List <Task>(); var cate = Task.Run(async() => { var categoryList = await App.OneDrive.GetCategoryList(); await IOTools.ReplaceCategory(categoryList); }); var todo = Task.Run(async() => { var TodoList = await App.OneDrive.GetTodoList(); await IOTools.ReplaceTodo(TodoList); }); var star = Task.Run(async() => { var StarList = await App.OneDrive.GetStarList(); await IOTools.ReplaceStar(StarList); }); var toast = Task.Run(async() => { var ToastList = await App.OneDrive.GetToastList(); await IOTools.ReplaceToast(ToastList); }); var page = Task.Run(async() => { var PageList = await App.OneDrive.GetPageList(); await IOTools.ReplacePage(PageList); }); var read = Task.Run(async() => { var ReadList = await App.OneDrive.GetReadList(); await IOTools.ReplaceReadIds(ReadList); }); var readable = Task.Run(async() => { var ReadList = await App.OneDrive.GetReadableList(); await IOTools.ReplaceReadable(ReadList); }); tasks.Add(cate); tasks.Add(todo); tasks.Add(star); tasks.Add(toast); tasks.Add(page); tasks.Add(read); tasks.Add(readable); try { await Task.WhenAll(tasks.ToArray()); string basicUpdateTime = AppTools.GetRoamingSetting(AppSettings.BasicUpdateTime, "1"); string todoUpdateTime = AppTools.GetRoamingSetting(AppSettings.TodoUpdateTime, "1"); string starUpdateTime = AppTools.GetRoamingSetting(AppSettings.StarUpdateTime, "1"); string toastUpdateTime = AppTools.GetRoamingSetting(AppSettings.ToastUpdateTime, "1"); string pageUpdateTime = AppTools.GetRoamingSetting(AppSettings.PageUpdateTime, "1"); string readUpdateTime = AppTools.GetRoamingSetting(AppSettings.ReadUpdateTime, "1"); string readableUpdateTime = AppTools.GetRoamingSetting(AppSettings.ReadableUpdateTime, "1"); AppTools.WriteLocalSetting(AppSettings.ToastUpdateTime, toastUpdateTime); AppTools.WriteLocalSetting(AppSettings.StarUpdateTime, starUpdateTime); AppTools.WriteLocalSetting(AppSettings.TodoUpdateTime, todoUpdateTime); AppTools.WriteLocalSetting(AppSettings.BasicUpdateTime, basicUpdateTime); AppTools.WriteLocalSetting(AppSettings.PageUpdateTime, pageUpdateTime); AppTools.WriteLocalSetting(AppSettings.ReadUpdateTime, readUpdateTime); AppTools.WriteLocalSetting(AppSettings.ReadableUpdateTime, readableUpdateTime); AppTools.WriteLocalSetting(AppSettings.LastSyncTime, now.ToString()); } catch (Exception) { } finally { var frame = Window.Current.Content as Frame; frame.Navigate(typeof(MainPage)); } } else { var frame = Window.Current.Content as Frame; frame.Navigate(typeof(MainPage)); } }
/// <summary> /// 更新布局,获取最新资讯 /// </summary> /// <param name="channel">频道数据</param> /// <returns></returns> public async Task UpdateLayout(Channel channel, bool isForceRefresh = false) { AllFeeds.Clear(); LastCacheTimeContainer.Visibility = Visibility.Collapsed; LoadingRing.IsActive = true; AllReadButton.Visibility = Visibility.Collapsed; JustNoReadSwitch.IsEnabled = false; NoDataTipContainer.Visibility = Visibility.Collapsed; AllReadTipContainer.Visibility = Visibility.Collapsed; _sourceData = channel; ChannelDescriptionTextBlock.Text = _sourceData.Description; ChannelNameTextBlock.Text = _sourceData.Name; FeedCollection.Clear(); var feed = new List <RssSchema>(); if (NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable) { gg : if (!isForceRefresh) { if (MainPage.Current.TempCache.Count > 0 && MainPage.Current.TempCache.Any(c => c.Channel.Id == channel.Id)) { feed = MainPage.Current.TempCache.Where(c => c.Channel.Id == channel.Id).FirstOrDefault()?.Feeds; if (feed.Count == 0) { isForceRefresh = true; goto gg; } } else { var data = await IOTools.GetLocalCache(channel); feed = data.Item1; int cacheTime = data.Item2; int now = AppTools.DateToTimeStamp(DateTime.Now.ToLocalTime()); if (feed.Count == 0 || now > cacheTime + 1200) { isForceRefresh = true; goto gg; } else { if (cacheTime > 0) { LastCacheTimeContainer.Visibility = Visibility.Visible; LastCacheTimeBlock.Text = AppTools.TimeStampToDate(cacheTime).ToString("HH:mm"); } } } } else { feed = await AppTools.GetFeedsFromUrl(_sourceData.Link); bool isAutoCache = Convert.ToBoolean(AppTools.GetLocalSetting(AppSettings.AutoCacheWhenOpenChannel, "False")); if (isAutoCache && feed.Count > 0) { await IOTools.AddCacheChannel(null, channel); } } } else { if (MainPage.Current._isCacheAlert) { new PopupToast(AppTools.GetReswLanguage("Tip_WatchingCache")).ShowPopup(); MainPage.Current._isCacheAlert = false; } var data = await IOTools.GetLocalCache(channel); feed = data.Item1; int cacheTime = data.Item2; if (cacheTime > 0) { LastCacheTimeContainer.Visibility = Visibility.Visible; LastCacheTimeBlock.Text = AppTools.TimeStampToDate(cacheTime).ToString("HH:mm"); } } if (feed != null && feed.Count > 0) { AllFeeds = feed; await FeedInit(); } else { NoDataTipContainer.Visibility = Visibility.Visible; } JustNoReadSwitch.IsEnabled = true; LoadingRing.IsActive = false; }