public async Task<ObservableCollection<TvShow>> load()
        {
            if (! await api.hasInternet())
                return tracker;

            Response resp = await (new Response("http://followshows.com/viewStyleTracker?viewStyle=expanded")).call();
            if (resp.somethingWentWrong)
            {
                return tracker;
            }

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(resp.page);

            HtmlNode tbody = doc.GetElementbyId("tracker");
            HtmlNode head = HTML.getChild(tbody);

            if (head == null)
            {
                return tracker;
            }

            foreach (HtmlNode tvshow in head.ChildNodes)
            {
                try
                {
                    TvShow show = new TvShow(true);
                    HtmlNode title = HTML.getChild(tvshow);
                    show.Name = System.Net.WebUtility.HtmlDecode(title.InnerText);

                    try
                    {
                        BitmapImage bimp = new BitmapImage() { UriSource = new Uri(HTML.getAttribute(title.ChildNodes, "src")) };
                        bimp.CreateOptions = BitmapCreateOptions.None;
                        show.Image = bimp;
                    }
                    catch { }
                    show.showUrl = HTML.getAttribute(title.ChildNodes, "href").Replace("/show/", "");
                    show.stillToWatch = HTML.getChild(tvshow.ChildNodes, "class", "towatch").InnerHtml;
                    string perc = HTML.getChild(tvshow.ChildNodes, "role", "progressbar").InnerText.Replace("%", "");
                    show.percentageWatched = float.Parse(perc) / 100 * 150;
                    tracker.Add(show);
                }
                catch (Exception e)
                {
                    Memory.addToErrorQueue(this, e);
                }

                await Memory.writeAllErrorsToFile();
            }
            return tracker;
        }
Beispiel #2
0
        public async Task <List <Episode> > getSeason(TvShow show, int seasonNr)
        {
            List <Episode> season = new List <Episode>();

            Response resp = await(new Response("http://followshows.com/api/show/" + show.showUrl + "/season/" + seasonNr, false)).call();

            if (resp.somethingWentWrong)
            {
                return(season);
            }

            foreach (HtmlNode episode in HTML.getChild(resp.firstNode.ChildNodes, "class", "clearfix").ChildNodes)
            {
                Episode ep = new Episode(false, false);
                ep.ShowName = show.Name;

                HtmlNode name = HTML.getChild(episode.ChildNodes, "class", "episode-link");
                if (name != null)
                {
                    ep.Aired       = true;
                    ep.EpisodeName = name.InnerText;
                    ep.Image       = new BitmapImage(new Uri(HTML.getAttribute(HTML.getChild(episode.ChildNodes, "class", "poster").ChildNodes, "src").Replace("130x75", "360x207")));

                    string[] build = HTML.getChild(episode.ChildNodes, "class", "episode-label").InnerText.Split(new char[] { ' ' });
                    ep.ISeason    = int.Parse(build[1]);
                    ep.IEpisode   = int.Parse(build[3].Split(new char[] { ',' })[0]);
                    ep.EpisodePos = "S" + ep.ISeason + "E" + ep.IEpisode;
                    ep.id         = HTML.getAttribute(episode.ChildNodes, "episodeid");
                    if (!episode.InnerText.Contains("Mark as watched"))
                    {
                        ep.Seen = true;
                    }
                }
                else
                {
                    ep.Aired = false;
                    ep.Image = new BitmapImage(new Uri("ms-appx:Assets/basicQueueItem.png"));
                    string[] build = episode.InnerText.Split(new char[] { ',' });
                    ep.EpisodeName = build[0];
                    string[] seasonThing = build[1].Split(new char[] { ' ' });
                    ep.ISeason    = int.Parse(seasonThing[1]);
                    ep.IEpisode   = int.Parse(seasonThing[3]);
                    ep.EpisodePos = "S" + ep.ISeason + "E" + ep.IEpisode;
                }


                season.Add(ep);
            }

            return(season);
        }
Beispiel #3
0
        public async Task <List <TvShow> > getTracker()
        {
            if (!hasInternet() && tracker != null)
            {
                return(tracker);
            }
            tracker = new List <TvShow>();

            Response resp = await(new Response("http://followshows.com/viewStyleTracker?viewStyle=expanded")).call();

            if (resp.somethingWentWrong)
            {
                return(tracker);
            }

            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml(resp.page);

            HtmlNode tbody = doc.GetElementbyId("tracker");
            HtmlNode head  = HTML.getChild(tbody);

            if (head == null)
            {
                return(tracker);
            }

            foreach (HtmlNode tvshow in head.ChildNodes)
            {
                try
                {
                    TvShow   show  = new TvShow(true);
                    HtmlNode title = HTML.getChild(tvshow);
                    show.Name  = System.Net.WebUtility.HtmlDecode(title.InnerText);
                    show.Image = new BitmapImage()
                    {
                        UriSource = new Uri(HTML.getAttribute(title.ChildNodes, "src"))
                    };
                    show.showUrl      = HTML.getAttribute(title.ChildNodes, "href").Replace("/show/", "");
                    show.stillToWatch = HTML.getChild(tvshow.ChildNodes, "class", "towatch").InnerHtml;
                    string perc = HTML.getChild(tvshow.ChildNodes, "role", "progressbar").InnerText.Replace("%", "");
                    show.percentageWatched = float.Parse(perc) / 100 * 150;
                    tracker.Add(show);
                }
                catch (Exception)
                {
                }
            }
            return(tracker);
        }
Beispiel #4
0
        public async Task <List <TvShow> > searchTvShow(string searchTerm)
        {
            List <TvShow> showList = new List <TvShow>();
            List <TvShow> userList = new List <TvShow>();

            if (searchTerm == null || searchTerm == "")
            {
                passed = userList;
                return(showList);
            }

            Response resp = await(new Response("http://followshows.com/ajax/header/search?term=" + searchTerm, null, false)).call();

            if (resp.page == null)
            {
                return(showList);
            }
            List <SearchResult> response = JsonConvert.DeserializeObject <List <SearchResult> >(resp.page);

            foreach (SearchResult result in response)
            {
                if (result.type == "show")
                {
                    TvShow show = new TvShow(result.followed);
                    if (result.poster)
                    {
                        show.Image = new BitmapImage(new Uri(result.image.Replace("30x42", "357x500")));
                    }
                    show.Name    = result.value;
                    show.showUrl = result.id;
                    showList.Add(show);
                }
                else
                {
                    TvShow show = new TvShow(false);
                    if (result.poster)
                    {
                        show.Image = new BitmapImage(new Uri(result.image.Replace("30x42", "357x500")));
                    }
                    show.Name    = result.value;
                    show.showUrl = result.id;
                    userList.Add(show);
                }
            }
            passed = userList;
            return(showList);
        }
        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="sender">
        /// The source of the event; typically <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Event data that provides both the navigation parameter passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and
        /// a dictionary of state preserved by this page during an earlier
        /// session.  The state will be null the first time a page is visited.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            StatusBar statusBar = StatusBar.GetForCurrentView();
            // Hide the status bar
            await statusBar.HideAsync();

            ////Loading
            api = API.getAPI();

            //As a precaution set a show as the passed object
            TvShow show = new TvShow(false);
            api.passed = show;

            while (queue == null)
            {
                await Task.Delay(1);
            }
            
            if (queue.ItemsSource != null)
            {
                return;
            }

            if (await api.hasInternet())
            {
                    LoadLists();
            }
            else
            {
                //Get shows from storage
                ObservableCollection<Episode> queueList = await Memory.recoverQueue();
                List<TvShow> trackerList   = await Memory.recoverTracker();
                List<Episode> calendarList = await Memory.recoverCalendar();

                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    if (queueList.Count > 0)
                    {
                        queue.ItemsSource = queueList;
                    }

                    if (trackerList.Count > 0)
                    {
                        tracker.ItemsSource = trackerList;
                    }

                    if (calendarList.Count > 0)
                    {
                        if (calendarList != null)
                        {
                            var result =
                                from ep in calendarList
                                group ep by ep.airdate
                                    into grp
                                    orderby grp.Key
                                    select grp;
                            calendar.Source = result;
                        }
                    }
                });


                //Wait for when we do have internet
                api.getNetwork().PropertyChanged += NetworkStatus_Changed;
            }


            Tile.setTile(0);


        }
        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="sender">
        /// The source of the event; typically <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Event data that provides both the navigation parameter passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and
        /// a dictionary of state preserved by this page during an earlier
        /// session.  The state will be null the first time a page is visited.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
                //Loading
            cover.Height = Window.Current.Bounds.Height;
            //Create a fake show, which isn't visible to decrease uglyness
            //NTW.DataContext = new Episode(false, true) { redo = Windows.UI.Xaml.Visibility.Collapsed };


            api = (API)e.NavigationParameter;
            Show = api.passed as TvShow;
            await Show.expand();

            //if(Show.following)
            //{
            //    followColor.Fill = ((SolidColorBrush)App.Current.Resources["PhoneAccentBrush"]);
            //}

            //Create a new commandbar and add buttons
            bar = new CommandBar();
            AppBarButton follow = new AppBarButton() { Icon = new SymbolIcon(Symbol.Favorite), Label = "Follow" };
            follow.Click += Tapped_Favorite;
            

            AppBarButton unfollow = new AppBarButton() { Icon = new SymbolIcon(Symbol.UnFavorite), Label = "Unfollow" };
            unfollow.Click += Tapped_Favorite;
            unfollow.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
            

            AppBarButton seen = new AppBarButton() { Icon = new SymbolIcon(Symbol.Accept), Label = "Mark all as seen" };
            seen.Click += markAsSeen_Click;
            seen.Visibility = Windows.UI.Xaml.Visibility.Collapsed;            

            bar.PrimaryCommands.Add(seen);
            bar.PrimaryCommands.Add(follow);
            bar.PrimaryCommands.Add(unfollow);

            setFollowingAppButton();

            bar.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

            BottomAppBar = bar;

            Image.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(Show.Image.UriSource.ToString().Replace("80", "357").Replace("112", "500")));
            this.DataContext = Show;

        //    NTWtitle.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

        //    List<Episode> wl = await api.getWatchList();
        //    if(wl != null)
        //    {
        //        foreach(Episode ep in wl)
        //        {
        //            if(ep.SeriesName == Show.Name)
        //            {
        //                NTW.DataContext = ep;
        //                NTWtitle.Visibility = Windows.UI.Xaml.Visibility.Visible;
        //                break;
        //            }
        //        }
            
        //    }
            if (Show.numberOfSeasons > 0)
            {
                season = new List<Episode>[Show.numberOfSeasons + 1];
                //For every show create a new pivot with a gridview with the episode-itemtemplate;
                for (int i = Show.numberOfSeasons; i > 0; i--)
                {
                    PivotItem item = new PivotItem();
                    item.Header = "Season " + i;
                    List<Episode> episodelist = await api.getSeason(Show, i);
                    season[i] = episodelist;
                    GridView view = new GridView();

                    view.ItemTemplate = Resources["seasy"] as DataTemplate;
                    view.ItemsSource = episodelist;
                    item.Content = view;
                    item.ApplyTemplate();
                    pivo.Items.Add(item);
                }
            }
            
        }
Beispiel #7
0
        public async Task<List<TvShow>> searchTvShow(string searchTerm)
        {
            List<TvShow> showList = new List<TvShow>();
            List<TvShow> userList = new List<TvShow>();

            if (searchTerm == null || searchTerm == "")
            {
                passed = userList;
                return showList;
            }

            Response resp = await (new Response("http://followshows.com/ajax/header/search?term=" + searchTerm, null, false)).call();
            if (resp.page == null)
                return showList;
            List<SearchResult> response = JsonConvert.DeserializeObject<List<SearchResult>>(resp.page);
            foreach (SearchResult result in response)
            {
                if (result.type == "show")
                {
                    TvShow show = new TvShow(result.followed);
                    if (result.poster)
                    {
                        show.Image = new BitmapImage(new Uri(result.image.Replace("30x42", "357x500")));
                    }
                    show.Name = result.value;
                    show.showUrl = result.id;
                    showList.Add(show);
                }
                else
                {
                    TvShow show = new TvShow(false);
                    if (result.poster)
                    {
                        show.Image = new BitmapImage(new Uri(result.image.Replace("30x42", "357x500")));
                    }
                    show.Name = result.value;
                    show.showUrl = result.id;
                    userList.Add(show);
                }
            }
            passed = userList;
            return showList;
        }
Beispiel #8
0
        public async Task<List<Episode>> getSeason(TvShow show, int seasonNr)
        {
            List<Episode> season = new List<Episode>();

            Response resp = await (new Response("http://followshows.com/api/show/" + show.showUrl + "/season/" + seasonNr, false)).call();

            if (resp.somethingWentWrong)
                return season;

            foreach (HtmlNode episode in HTML.getChild(resp.firstNode.ChildNodes, "class", "clearfix").ChildNodes)
            {
                Episode ep = new Episode(false, false);
                ep.ShowName = show.Name;

                HtmlNode name = HTML.getChild(episode.ChildNodes, "class", "episode-link");
                if (name != null)
                {
                    ep.Aired = true;
                    ep.EpisodeName = name.InnerText;
                    ep.Image = new BitmapImage(new Uri(HTML.getAttribute(HTML.getChild(episode.ChildNodes, "class", "poster").ChildNodes, "src").Replace("130x75", "360x207")));

                    string[] build = HTML.getChild(episode.ChildNodes, "class", "episode-label").InnerText.Split(new char[] { ' ' });
                    ep.ISeason = int.Parse(build[1]);
                    ep.IEpisode = int.Parse(build[3].Split(new char[] { ',' })[0]);
                    ep.EpisodePos = "S" + ep.ISeason + "E" + ep.IEpisode;
                    ep.id = HTML.getAttribute(episode.ChildNodes, "episodeid");
                    if (!episode.InnerText.Contains("Mark as watched"))
                    {
                        ep.Seen = true;
                    }

                }
                else
                {
                    ep.Aired = false;
                    ep.Image = new BitmapImage(new Uri("ms-appx:Assets/basicQueueItem.png"));
                    string[] build = episode.InnerText.Split(new char[] { ',' });
                    ep.EpisodeName = build[0];
                    string[] seasonThing = build[1].Split(new char[] { ' ' });
                    ep.ISeason = int.Parse(seasonThing[1]);
                    ep.IEpisode = int.Parse(seasonThing[3]);
                    ep.EpisodePos = "S" + ep.ISeason + "E" + ep.IEpisode;
                }


                season.Add(ep);
            }

            return season;
        }