Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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 = "";
        }