private void OnItemTapped(object sender, ItemTappedEventArgs e) { var x = (App.Feed_Data)e.Item; var ng = Path.GetInvalidFileNameChars(); var directory_path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "/" + "feed"; var filename = this.feed.url; foreach (var item1 in ng) { filename = filename.Replace(item1, ' '); } try { this.feed = App.getfeedxml(directory_path + "/" + filename + ".txt"); } catch (Exception) { return; } this.feed.lastaclink = x.link; for (int i = 0; i < this.feed.content.Count; i++) { if (this.feed.lastaclink == this.feed.content[i].link) { if (i == 0) { this.feed.newfeedco = ""; break; } this.feed.newfeedco = i.ToString(); break; } } App.setfeedxml(this.feed, directory_path + "/" + filename + ".txt"); var webpage = new WebPage(x); //Navigation.PushModalAsync(webpage); Browser.OpenAsync(x.link, new BrowserLaunchOptions { LaunchMode = BrowserLaunchMode.SystemPreferred, TitleMode = BrowserTitleMode.Default }); //Application.Current.MainPage = webpage; }
public FeedPage(App.Feed feed) { InitializeComponent(); this.feed = feed; label_title.Text = feed.title; label_updated_time.Text = feed.updatedate; feed.content.Reverse(); int i = 1; List <App.Feed_Data> n = new List <App.Feed_Data>(); foreach (var item in feed.content) { App.Feed_Data tm = item; tm.title = i.ToString() + "." + item.title; //上から1000まで表示 20201208 if (tm.content.Length > 1000) { tm.content = tm.content.Substring(0, 1000) + "... hide " + 1000.ToString() + "/" + tm.content.Length.ToString(); } n.Add(tm); i++; } feed.content = n; listView.ItemsSource = feed.content; if (feed.lastaclink != "") { foreach (var item in feed.content) { if (item.link == feed.lastaclink) { listView.SelectedItem = item; listView.ScrollTo(listView.SelectedItem, ScrollToPosition.Start, false); break; } } } }
public FeedPage_Search(App.Feed feed) { InitializeComponent(); this.feed = feed; feed.content.Reverse(); int i = 1; List <App.Feed_Data> n = new List <App.Feed_Data>(); foreach (var item in feed.content) { App.Feed_Data tm = item; tm.title = i.ToString() + "." + item.title; n.Add(tm); i++; } feed.content = n; listView.ItemsSource = feed.content; }
private async void btn_Clicked(object sender, EventArgs e) { if (label.Text != "") { return; } label.Text = "更新中"; HttpClient httpClient = new HttpClient(); var directory_path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "/" + "feed"; List <App.Feed> feeds = new List <App.Feed>(); List <Task <string> > taskres = new List <Task <string> >(); foreach (var item in File.ReadAllLines(directory_path + "/feed_list.txt")) { if (!item.Contains("http")) { continue; } try { var tsr = Task.Run(() => { var html = ""; try { html = httpClient.GetStringAsync(item).Result; } catch (Exception) { return("error" + " " + item); } var filename = Regex.Replace(item, @"http.*//|/|\?", ""); html = html.Replace("\v", "%0B"); File.WriteAllText(directory_path + "/" + filename + ".txt", html); // XDocument xDocument; try { xDocument = XDocument.Load(directory_path + "/" + filename + ".txt"); } catch (Exception) { return("XDocument.Load err " + filename); } XNamespace ns = xDocument.Root.GetNamespaceOfPrefix("rdf"); App.Feed feed = new App.Feed(); if (ns != null && ns.NamespaceName == "http://www.w3.org/1999/02/22-rdf-syntax-ns#")//rss1.0 { var element = xDocument.Element("rss"); if (element == null) { feed = App.rss1(xDocument, ns, item); } else { feed = App.rss2(element, item); } } else { var element = xDocument.Element("rss"); if (element != null)//rss2.0 { if (element.Attribute("version").Value == "2.0") { feed = App.rss2(element, item); } } else { ns = xDocument.Root.GetDefaultNamespace(); element = xDocument.Element(ns + "feed"); if (element != null)//atom { feed = App.atom(element, ns, item); } } } if (feed.content != null) { feed.url = item; feeds.Add(feed); } return(item); }); taskres.Add(tsr); } catch (Exception) { } } foreach (var item in taskres) { label.Text = await item; } var lfeed = new List <App.Feed>(); foreach (var item in feeds) { var ng = Path.GetInvalidFileNameChars(); var filename = item.url + ".txt"; foreach (var item1 in ng) { filename = filename.Replace(item1, ' '); } if (!File.Exists(directory_path + "/" + filename)) { var tttf = item; if (item.content.Count != 0) { tttf.lastaclink = item.content[item.content.Count - 1].link; tttf.newfeedco = item.content.Count.ToString(); } App.setfeedxml(tttf, directory_path + "/" + filename); var c = new page.FeedPage(tttf); lfeed.Add(tttf); } else { App.Feed oldfeed; try { oldfeed = App.getfeedxml(directory_path + "/" + filename); } catch (Exception) { var result = await DisplayAlert("Error", item.title + " のFeed data が壊れています。Feed dataを初期化しますか", "OK", "キャンセル"); if (result) { var tttf = item; if (item.content.Count != 0) { tttf.lastaclink = item.content[item.content.Count - 1].link; tttf.newfeedco = item.content.Count.ToString(); } App.setfeedxml(tttf, directory_path + "/" + filename); oldfeed = App.getfeedxml(directory_path + "/" + filename); } else { continue; } } DateTime oldTime = DateTime.Parse(oldfeed.updatedate); DateTime newTime = DateTime.Parse(item.updatedate); var x = newTime - oldTime; if (x.TotalSeconds > 0) { item.content.Reverse(); foreach (var content in item.content) { var xz = oldfeed.content.Find((a) => { return(a.link == content.link); }); if (xz.link == null) { oldfeed.content.Insert(0, content); } } item.content.Reverse(); for (int i = 0; i < oldfeed.content.Count; i++) { if (oldfeed.lastaclink == oldfeed.content[i].link) { oldfeed.newfeedco = i.ToString(); break; } } oldfeed.updateda = item.updateda; App.setfeedxml(oldfeed, directory_path + "/" + filename); var c = new page.FeedPage(oldfeed); lfeed.Add(oldfeed); //lfeed.Add(item); } else { var c = new page.FeedPage(oldfeed); lfeed.Add(oldfeed); } } } listsort(lfeed); label.Text = ""; }