Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
                }
            }
        }
Пример #3
0
        /// <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();
            }
        }
Пример #4
0
        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));
            }
        }
Пример #5
0
        /// <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;
        }