コード例 #1
0
        private void buttonSeriesSelect_Click(object sender, EventArgs e)
        {
            SeriesSelect SeriesSelectDlg = new SeriesSelect();

            // Set Current View
            string viewTag = "|" + txtViewName.Text + "|";;

            // Get list of series in view
            SQLCondition conditions = new SQLCondition();

            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cViewTags, viewTag, SQLConditionType.Like);
            SeriesSelectDlg.CheckedItems = DBSeries.Get(conditions);

            // Get list of series not in view
            conditions = new SQLCondition();
            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cViewTags, viewTag, SQLConditionType.NotLike);
            SeriesSelectDlg.UnCheckedItems = DBSeries.Get(conditions);

            // Show series list dialog
            DialogResult result = SeriesSelectDlg.ShowDialog(this);

            if (result == DialogResult.OK)
            {
                SeriesToAdd    = SeriesSelectDlg.CheckedItems;
                SeriesToRemove = SeriesSelectDlg.UnCheckedItems;
            }
        }
コード例 #2
0
ファイル: ImportPanelEpID.cs プロジェクト: framug/mptvseries
        private void DoAutoMatching(DBSeries series, string orderingOption)
        {
            var seriesMatches         = matches.SingleOrDefault(kv => kv.Key == series);
            List <DBEpisode> localEps = localeps[series];

            var newseriesMatches = new List <KeyValuePair <DBEpisode, DBOnlineEpisode> >();

            foreach (var localEp in localEps)
            {
                var bestMatchVal = from oe in onlineeps.Single(s => s.Key == series).Value
                                   select new { Episode = oe, MatchValue = OnlineParsing.matchOnlineToLocalEpisode(series, localEp, oe, orderingOption) };
                var matchedEp = bestMatchVal.OrderBy(me => me.MatchValue).FirstOrDefault(me => me.MatchValue < int.MaxValue);
                if (matchedEp != null)
                {
                    newseriesMatches.Add(new KeyValuePair <DBEpisode, DBOnlineEpisode>(localEp, matchedEp.Episode));
                }
                else
                {
                    newseriesMatches.Add(new KeyValuePair <DBEpisode, DBOnlineEpisode>(localEp, null));
                }
            }
            if (seriesMatches.Key != null)
            {
                matches.Remove(seriesMatches);
            }
            matches.Add(new KeyValuePair <DBSeries, List <KeyValuePair <DBEpisode, DBOnlineEpisode> > >(series, newseriesMatches));
        }
コード例 #3
0
        /// <summary>
        /// Get a series id by show name
        /// </summary>
        /// <param name="seriesName">Name of the series to look for</param>
        /// <returns>A series id or null if none was found</returns>
        public static int?GetSeriesIdByName(string seriesName)
        {
            SQLCondition conditions = new SQLCondition();

            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cPrettyName, seriesName, SQLConditionType.Like);
            List <DBSeries> seriesList = DBSeries.Get(conditions);

            // Return best matching series or null if no result was found
            if (seriesList.Count == 1)
            {
                return(seriesList[0][DBOnlineSeries.cID]);
            }
            else if (seriesList.Count > 1)
            {
                foreach (DBSeries series in seriesList)
                {
                    if (series[DBOnlineSeries.cPrettyName].Equals(seriesName))
                    {
                        return(series[DBOnlineSeries.cID]);
                    }
                }

                return(seriesList[0][DBOnlineSeries.cID]);
            }
            else
            {
                return(null);
            }
        }
コード例 #4
0
        protected override void OnLoad(EventArgs e)
        {
            // Get list of series in view
            SQLCondition conditions = new SQLCondition();

            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cTraktIgnore, 1, SQLConditionType.Equal);
            CheckedItems = DBSeries.Get(conditions);

            // Get list of series not in view
            conditions = new SQLCondition();
            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cTraktIgnore, 1, SQLConditionType.NotEqual);
            UnCheckedItems = DBSeries.Get(conditions);

            // Populate series list,
            // mark as checked at top of list
            foreach (DBSeries series in CheckedItems)
            {
                checkedListBoxSeries.Items.Add(series, true);
            }

            foreach (DBSeries series in UnCheckedItems)
            {
                checkedListBoxSeries.Items.Add(series, false);
            }

            CheckedCount             = CheckedItems.Count;
            labelSeriesSelected.Text = CheckedCount.ToString() + " Series Selected";

            this.checkedListBoxSeries.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBoxSeries_ItemCheck);
            base.OnLoad(e);
        }
コード例 #5
0
ファイル: MainWindow.xaml.cs プロジェクト: carakanz/ComReader
        private void NameOkButton_Click(object sender, RoutedEventArgs e)
        {
            AddLog($"Find name {SeriesName}");
            try
            {
                _series = _applicationContext.Series.Where(s => s.Name == SeriesName).FirstOrDefault();
                if (_series is null)
                {
                    AddLog($"Add series {SeriesName}");
                    _series = new DBSeries()
                    {
                        Name        = SeriesName,
                        CreatedDate = DateTime.Now
                    };
                    _applicationContext.Series.Add(_series);
                    _applicationContext.SaveChanges();
                    AddLog($"Added series {SeriesName}");
                }
                else
                {
                    AddLog($"Found series {SeriesName}");
                }

                Task.Run(SaveFrame);

                NameOkButton.IsEnabled = false;
                StartButton.IsEnabled  = true;
            }
            catch (Exception exp)
            {
                ShowError(exp.Message);
            }
        }
コード例 #6
0
        private void buttonSeriesIgnore_Click(object sender, EventArgs e)
        {
            SeriesSelect SeriesSelectDlg = new SeriesSelect();

            // Get list of series in view
            SQLCondition conditions = new SQLCondition();

            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cTraktIgnore, 1, SQLConditionType.Equal);
            SeriesSelectDlg.CheckedItems = DBSeries.Get(conditions);

            // Get list of series not in view
            conditions = new SQLCondition();
            conditions.Add(new DBOnlineSeries(), DBOnlineSeries.cTraktIgnore, 1, SQLConditionType.NotEqual);
            SeriesSelectDlg.UnCheckedItems = DBSeries.Get(conditions);

            // Show series list dialog
            DialogResult result = SeriesSelectDlg.ShowDialog(this);

            if (result == DialogResult.OK)
            {
                foreach (DBSeries series in SeriesSelectDlg.CheckedItems)
                {
                    // ignore these series
                    series[DBOnlineSeries.cTraktIgnore] = 1;
                    series.Commit();
                }

                foreach (DBSeries series in SeriesSelectDlg.UnCheckedItems)
                {
                    // unignore these series
                    series[DBOnlineSeries.cTraktIgnore] = 0;
                    series.Commit();
                }
            }
        }
コード例 #7
0
ファイル: ImportPanelEpID.cs プロジェクト: framug/mptvseries
        public void MatchEpisodesForSeries(DBSeries series, List <DBEpisode> localEpisodes, List <DBOnlineEpisode> onlineCandidates)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new MatchEpisodesForSeriesDelegate(MatchEpisodesForSeries), series, localEpisodes, onlineCandidates);
            }

            // only those not id'ed before
            tryAddToList(series, localEpisodes, localeps);
            tryAddToList(series, onlineCandidates, onlineeps);
        }
コード例 #8
0
ファイル: ImportPanelEpID.cs プロジェクト: framug/mptvseries
 private void tryAddToList <T>(DBSeries series, List <T> episodes, Dictionary <DBSeries, List <T> > dic)
 {
     if (dic.ContainsKey(series))
     {
         dic[series] = episodes;
     }
     else
     {
         dic.Add(series, episodes);
     }
 }
コード例 #9
0
ファイル: ImportPanelEpID.cs プロジェクト: framug/mptvseries
        private void buttonMatchAgain_Click(object sender, EventArgs e)
        {
            string   selected = comboMatchOptions.SelectedItem.ToString();
            DBSeries series   = listBoxSeries.SelectedItem as DBSeries;

            series[DBOnlineSeries.cChosenEpisodeOrder] = selected;
            // default sort order should correspond to the chosen episode order
            series[DBOnlineSeries.cEpisodeSortOrder] = selected == "DVD" ? "DVD" : "Aired";
            series.Commit();
            DoAutoMatching(series, selected);
            listBoxSeries_SelectedIndexChanged(listBoxSeries, null);
            comboMatchOptions.SelectedItem = selected;
        }
コード例 #10
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="filename">Filename of the currently played episode</param>
        public NowPlayingSeries(string filename)
        {
            try
            {
                SQLCondition     query    = new SQLCondition(new DBEpisode(), DBEpisode.cFilename, filename, SQLConditionType.Equal);
                List <DBEpisode> episodes = DBEpisode.Get(query);

                if (episodes.Count > 0)
                {
                    episodeFound = true;

                    SeriesId    = episodes[0].onlineEpisode[DBOnlineEpisode.cSeriesID];
                    SeasonId    = episodes[0].onlineEpisode[DBOnlineEpisode.cSeasonID];
                    EpisodeId   = episodes[0].onlineEpisode[DBOnlineEpisode.cID];
                    CompositeId = episodes[0].fullItem[DBEpisode.cCompositeID];

                    Episode     = episodes[0].onlineEpisode[DBOnlineEpisode.cEpisodeIndex];
                    Season      = episodes[0].onlineEpisode[DBOnlineEpisode.cSeasonIndex];
                    Plot        = episodes[0].onlineEpisode[DBOnlineEpisode.cEpisodeSummary];
                    Title       = episodes[0].onlineEpisode[DBOnlineEpisode.cEpisodeName];
                    Director    = episodes[0].onlineEpisode[DBOnlineEpisode.cDirector];
                    Writer      = episodes[0].onlineEpisode[DBOnlineEpisode.cWriter];
                    Rating      = episodes[0].onlineEpisode[DBOnlineEpisode.cRating];
                    MyRating    = episodes[0].onlineEpisode[DBOnlineEpisode.cMyRating];
                    RatingCount = episodes[0].onlineEpisode[DBOnlineEpisode.cRatingCount];
                    AirDate     = episodes[0].onlineEpisode[DBOnlineEpisode.cFirstAired];

                    DBSeries s = Helper.getCorrespondingSeries(episodes[0].onlineEpisode[DBOnlineEpisode.cSeriesID]);
                    Series = s[DBOnlineSeries.cPrettyName];
                    Status = s[DBOnlineSeries.cStatus];
                    Genre  = s[DBOnlineSeries.cGenre];

                    // Get season poster path
                    DBSeason season = DBSeason.getRaw(SeriesId, episodes[0].onlineEpisode[DBOnlineEpisode.cSeasonIndex]);
                    ImageName = ImageAllocator.GetSeasonBannerAsFilename(season);

                    // Fall back to series poster if no season poster is available
                    if (String.IsNullOrEmpty(ImageName))
                    {
                        ImageName = ImageAllocator.GetSeriesPosterAsFilename(s);
                    }
                }
            }
            catch (Exception e)
            {
                WifiRemote.LogMessage("Error getting now playing tvseries: " + e.Message, WifiRemote.LogType.Error);
            }
        }
コード例 #11
0
        private void bgTraktSync_DoWork(object sender, DoWorkEventArgs e)
        {
            MPTVSeriesLog.Write("Trakt: Synchronize Start");

            buttonManualSync.Text = cButtonCancelSync;
            ConfigurationForm.GetInstance().EnableImportButtonState(false);

            List <DBSeries> seriesList = DBSeries.Get(new SQLCondition());

            int progress = 0;

            foreach (DBSeries series in seriesList)
            {
                if (bgTraktSync.CancellationPending)
                {
                    return;
                }

                if (series[DBSeries.cID] <= 0)
                {
                    continue;
                }

                List <DBEpisode> episodesUnSeen  = TraktHandler.GetEpisodesToSync(series, TraktSyncModes.unseen);
                List <DBEpisode> episodesLibrary = TraktHandler.GetEpisodesToSync(series, TraktSyncModes.library);
                List <DBEpisode> episodesSeen    = TraktHandler.GetEpisodesToSync(series, TraktSyncModes.seen);

                // remove any seen episodes from library episode list as 'seen' counts as being part of the library
                // dont want to hit the server unnecessarily
                episodesLibrary.RemoveAll(eps => episodesSeen.Contains(eps));

                // sync UnSeen
                TraktHandler.SynchronizeLibrary(episodesUnSeen, TraktSyncModes.unseen);

                // sync library
                TraktHandler.SynchronizeLibrary(episodesLibrary, TraktSyncModes.library);

                // sync Seen
                TraktHandler.SynchronizeLibrary(episodesSeen, TraktSyncModes.seen);

                int percentage = Convert.ToInt32((double)(100 * progress++) / seriesList.Count());
                bgTraktSync.ReportProgress(percentage);
            }

            MPTVSeriesLog.Write("Trakt: Synchronize Complete");
        }
コード例 #12
0
        public static LatestMediaHandler.MQTTItem CheckDB(string SearchFile)
        {
            LatestMediaHandler.MQTTItem item = new LatestMediaHandler.MQTTItem();
            if (MQTTPlugin.DebugMode)
            {
                Logger.Debug("Check to see if video is in MP-TVSeries database.");
            }

            if (Utils.IsAssemblyAvailable("MP-TVSeries", new Version(2, 6, 3, 1242)))
            {
                if (MQTTPlugin.DebugMode)
                {
                    Logger.Debug("MP-TVSeries found, searching Database for: " + SearchFile);
                }
                try
                {
                    SQLCondition     query    = new SQLCondition(new DBEpisode(), DBEpisode.cFilename, SearchFile, SQLConditionType.Equal);
                    List <DBEpisode> episodes = DBEpisode.Get(query);
                    if (MQTTPlugin.DebugMode)
                    {
                        Logger.Debug("Found: " + episodes.Count.ToString() + " episodes.");
                    }
                    if (episodes.Count > 0)
                    {
                        DBSeries s = Helper.getCorrespondingSeries(episodes[0].onlineEpisode[DBOnlineEpisode.cSeriesID]);
                        if (MQTTPlugin.DebugMode)
                        {
                            Logger.Debug("Video is in MP-TVSeries database.");
                        }

                        item.Id       = episodes[0][DBEpisode.cSeriesID];
                        item.Title    = s.ToString() + " - " + episodes[0][DBEpisode.cEpisodeName];
                        item.Filename = SearchFile;
                        item.Genres   = s[DBOnlineSeries.cGenre];
                        item.GetArtwork("tv");
                    }
                }
                catch (Exception e)
                {
                    Logger.Error("Error getting info from TVSeries Database: " + e.Message);
                }
            }
            return(item);
        }
コード例 #13
0
        private void checkedListBoxSeries_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            int      index = e.Index;
            DBSeries item  = (DBSeries)checkedListBoxSeries.Items[index];

            // Add/Remove items from list
            if (item != null)
            {
                // Item state before item was clicked
                if (checkedListBoxSeries.GetItemChecked(index))
                {
                    // Store items changes
                    if (!UnCheckedItems.Contains(item))
                    {
                        UnCheckedItems.Add(item);
                    }
                    if (CheckedItems.Contains(item))
                    {
                        CheckedItems.Remove(item);
                    }

                    CheckedCount            -= 1;
                    labelSeriesSelected.Text = (CheckedCount).ToString() + " Series Selected";
                }
                else
                {
                    // Store items changes
                    if (!CheckedItems.Contains(item))
                    {
                        CheckedItems.Add(item);
                    }
                    if (UnCheckedItems.Contains(item))
                    {
                        UnCheckedItems.Remove(item);
                    }

                    CheckedCount            += 1;
                    labelSeriesSelected.Text = (CheckedCount).ToString() + " Series Selected";
                }
            }
        }
コード例 #14
0
        private void SetResults(IList <parseResult> results)
        {
            givenResults = results;


            // get the parsed series as grouped by nicely Title Cased strings
            var uniqueSeries = from result in results
                               where !string.IsNullOrEmpty(result.parser.Matches[DBSeries.cParsedName])
                               group result by(string) result.parser.Matches[DBSeries.cParsedName];

            // now filter by those we don't already have identified in the db
            // get them from the db
            var alreadyID = DBSeries.GetSingleField(DBSeries.cParsedName, new SQLCondition(new DBSeries(), DBSeries.cID, 0, SQLConditionType.GreaterThan), new DBSeries());

            // and filter
            uniqueSeries = from uniqueS in uniqueSeries
                           where !alreadyID.Contains(alreadyID.Contains(uniqueS.Key))
                           select uniqueS;

            // now we have all new series that need identifying
            // fill the grid
            FillGrid(uniqueSeries.ToList());
        }
コード例 #15
0
ファイル: GetUpdates.cs プロジェクト: framug/mptvseries
        public GetUpdates(OnlineAPI.UpdateType type)
        {
            if (type != OnlineAPI.UpdateType.all)
            {
                MPTVSeriesLog.Write(string.Format("Downloading updates from the last {0}", type.ToString()));
            }
            else
            {
                MPTVSeriesLog.Write("Downloading all updates");
            }

            XmlNode updates = OnlineAPI.Updates(type);

            series   = new Dictionary <DBValue, long>();
            episodes = new Dictionary <DBValue, long>();
            banners  = new Dictionary <DBValue, long>();
            fanart   = new Dictionary <DBValue, long>();

            // if updates via zip fails, try xml
            if (updates == null)
            {
                MPTVSeriesLog.Write("Failed to get updates from 'zip' file, trying 'xml'...");
                updates = OnlineAPI.Updates(type, OnlineAPI.Format.Xml);

                // if we're still failing to get updates...
                if (updates == null)
                {
                    // manually define what series need updating basis whether the series is continuing and has local episodes
                    SQLCondition condition = new SQLCondition();
                    condition.Add(new DBOnlineSeries(), DBOnlineSeries.cID, 0, SQLConditionType.GreaterThan);
                    condition.Add(new DBOnlineSeries(), DBOnlineSeries.cHasLocalFiles, 1, SQLConditionType.Equal);
                    condition.Add(new DBOnlineSeries(), DBOnlineSeries.cStatus, "Ended", SQLConditionType.NotEqual);
                    condition.Add(new DBSeries(), DBSeries.cScanIgnore, 0, SQLConditionType.Equal);
                    condition.Add(new DBSeries(), DBSeries.cDuplicateLocalName, 0, SQLConditionType.Equal);

                    var lContinuingSeries = DBSeries.Get(condition, false, false);
                    MPTVSeriesLog.Write($"Failed to get updates from online, manually defining series and images for updates. Database contains '{lContinuingSeries.Count}' continuing series with local files");

                    // force our local download cache to expire after a 12hrs
                    timestamp = DateTime.UtcNow.Subtract(new TimeSpan(0, 12, 0, 0)).ToEpoch();
                    foreach (var lSeries in lContinuingSeries)
                    {
                        string lSeriesId = lSeries[DBOnlineSeries.cID];

                        series.Add(lSeriesId, timestamp);
                        banners.Add(lSeriesId, timestamp);
                        fanart.Add(lSeriesId, timestamp);

                        // get the most recent season as that is the one that is most likely recently updated
                        // NB: specials could also be recently updated
                        var lSeasons = DBSeason.Get(int.Parse(lSeriesId));
                        if (lSeasons != null && lSeasons.Count > 0)
                        {
                            int lSeasonIndex = lSeasons.Max(s => ( int )s[DBSeason.cIndex]);

                            var lEpisodes = DBEpisode.Get(int.Parse(lSeriesId), lSeasonIndex);
                            lEpisodes.AddRange(DBEpisode.Get(int.Parse(lSeriesId), 0));

                            foreach (var episode in lEpisodes)
                            {
                                episodes.Add(episode[DBOnlineEpisode.cID], timestamp);
                            }
                        }
                    }
                }
                else
                {
                    long.TryParse(updates.Attributes["time"].Value, out timestamp);

                    // get all available series in database, there is not point processing updates from online if not needed
                    var lAvailableSeriesInDb = DBSeries.Get(new SQLCondition()).Select(field => (string)field[DBOnlineSeries.cID]).ToList();

                    // NB: updates from xml only includes series (no episodes or artwork!)
                    foreach (XmlNode node in updates.SelectNodes("/Data/Series"))
                    {
                        long.TryParse(node.SelectSingleNode("time").InnerText, out long lTime);
                        string lSeriesId = node.SelectSingleNode("id").InnerText;

                        // check if we're interested in this series
                        if (!lAvailableSeriesInDb.Contains(lSeriesId))
                        {
                            continue;
                        }

                        series.Add(lSeriesId, lTime);
                        banners.Add(lSeriesId, lTime);
                        fanart.Add(lSeriesId, lTime);

                        // get the most recent season as that is the one that is most likely recently updated
                        // NB: specials could also be recently updated
                        if (Helper.getCorrespondingSeries(int.Parse(lSeriesId)) != null)
                        {
                            var lSeasons = DBSeason.Get(int.Parse(lSeriesId));
                            if (lSeasons != null && lSeasons.Count > 0)
                            {
                                int lSeasonIndex = lSeasons.Max(s => ( int )s[DBSeason.cIndex]);

                                var lEpisodes = DBEpisode.Get(int.Parse(lSeriesId), lSeasonIndex);
                                lEpisodes.AddRange(DBEpisode.Get(int.Parse(lSeriesId), 0));

                                foreach (var episode in lEpisodes)
                                {
                                    episodes.Add(episode[DBOnlineEpisode.cID], lTime);
                                }
                            }
                        }
                    }
                }
                return;
            }

            // process zip file update...
            long.TryParse(updates.Attributes["time"].Value, out this.timestamp);

            // get all the series ids
            foreach (XmlNode node in updates.SelectNodes("/Data/Series"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                this.series.Add(node.SelectSingleNode("id").InnerText, time);
            }

            // get all the episode ids
            foreach (XmlNode node in updates.SelectNodes("/Data/Episode"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                this.episodes.Add(node.SelectSingleNode("id").InnerText, time);
            }

            // get all the season banners
            string id = string.Empty;
            long   value;

            foreach (XmlNode node in updates.SelectNodes("/Data/Banner[type='season']"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                id = node.SelectSingleNode("Series").InnerText;
                if (!this.banners.TryGetValue(id, out value))
                {
                    this.banners.Add(id, time);
                }
            }

            //get all the series banners
            foreach (XmlNode node in updates.SelectNodes("/Data/Banner[type='series']"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                id = node.SelectSingleNode("Series").InnerText;
                if (!this.banners.TryGetValue(id, out value))
                {
                    this.banners.Add(id, time);
                }
            }

            //get all the poster banners
            foreach (XmlNode node in updates.SelectNodes("/Data/Banner[type='poster']"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                id = node.SelectSingleNode("Series").InnerText;
                if (!this.banners.TryGetValue(id, out value))
                {
                    this.banners.Add(id, time);
                }
            }

            //get all the fanart banners
            id = string.Empty;
            foreach (XmlNode node in updates.SelectNodes("/Data/Banner[type='fanart']"))
            {
                long time;
                long.TryParse(node.SelectSingleNode("time").InnerText, out time);
                id = node.SelectSingleNode("Series").InnerText;
                if (!this.fanart.TryGetValue(id, out value))
                {
                    this.fanart.Add(id, time);
                }
            }
        }
コード例 #16
0
ファイル: ImportPanelEpID.cs プロジェクト: framug/mptvseries
        private bool seriesHasAllEpsMatched(DBSeries series)
        {
            int unMatchedCount = matches.Single(s => s.Key == series).Value.Count(p => p.Value == null);

            return(unMatchedCount == 0);
        }
コード例 #17
0
        public void GetSeries()
        {
            Log.Instance().Print("Pulling series list from MP-TVSeries started");
            List <DBOnlineSeries> myseries = DBOnlineSeries.getAllSeries();

            foreach (DBOnlineSeries tvshow in myseries)
            {
                DBSeries mytv = Helper.getCorrespondingSeries(tvshow[DBOnlineSeries.cID]);
                if (mytv != null)
                {
                    string ishidden = mytv[DBSeries.cHidden];
                    if (ishidden != "1")
                    {
                        Series s = new Series();
                        s.ID           = (tvshow[DBOnlineSeries.cID]);
                        s.Name         = tvshow[DBOnlineSeries.cPrettyName];
                        s.OriginalName = tvshow[DBOnlineSeries.cOriginalName];
                        s.Description  = tvshow[DBOnlineSeries.cSummary];
                        s.Rating       = tvshow[DBOnlineSeries.cRating];
                        s.Genres       = tvshow[DBOnlineSeries.cGenre];
                        s.Poster       = Config.GetFolder(Config.Dir.Thumbs) + @"\" + "MPTVSeriesBanners" + @"\" + tvshow[DBOnlineSeries.cCurrentBannerFileName].ToString().Replace("/", @"\");

                        DBEpisode lastlocal    = null;
                        DBEpisode firstunlocal = null;
                        DBSeries  series       = Helper.getCorrespondingSeries(tvshow[DBOnlineSeries.cID]);
                        //DownList.Add(todownload);
                        // get all episodes for the series
                        var conditions = new SQLCondition();
                        conditions.Add(new DBOnlineEpisode(), DBOnlineEpisode.cSeriesID, tvshow[DBOnlineSeries.cID], SQLConditionType.Equal);
                        var episodes = DBEpisode.Get(conditions, false);
                        episodes.Sort();
                        //first option - get all unlocal episodes
                        var           unLocalEpisodes = episodes.Where(e => !e.IsAvailableLocally).ToList();
                        StringBuilder sb = new StringBuilder();

                        foreach (DBEpisode e in unLocalEpisodes)
                        {
                            s.AllUnlocal += "S" + ((int)e[DBEpisode.cSeasonIndex]).ToString("00") + "E" + ((int)e[DBEpisode.cEpisodeIndex]).ToString("00") + "|";
                        }
                        //
                        //second option - get first unlocal episode
                        var localepisodes = episodes.Where(e => e.IsAvailableLocally);
                        try
                        {
                            lastlocal = localepisodes.Last();
                        }
                        catch
                        {
                            lastlocal = null;
                        }
                        int firstunlocalid = episodes.IndexOf(lastlocal) + 1;
                        try
                        {
                            firstunlocal   = episodes[firstunlocalid];
                            s.FirstUnlocal = "S" + ((int)firstunlocal[DBEpisode.cSeasonIndex]).ToString("00") + "E" + ((int)firstunlocal[DBEpisode.cEpisodeIndex]).ToString("00");
                        }
                        catch (Exception e)
                        {
                            firstunlocal   = null;
                            s.FirstUnlocal = "";
                        }
                        allseries.Add(s);
                    }
                }
            }

            Log.Instance().Print("Pulling series list from MP-TVSeries finished");
        }
コード例 #18
0
        public static void Rate(DBSeries series, int rating)
        {
            if (!Enabled || series == null) return;

            Thread thread = new Thread(new ThreadStart(delegate {
                try {
                    // start timer and send request
                    DateTime start = DateTime.Now;
                    int fivePointRating = (int)Math.Round(rating / 2.0, MidpointRounding.AwayFromZero);
                    FollwitApi.RateTVSeries("tvdb", series[DBOnlineSeries.cID], fivePointRating);

                    // log our success
                    MPTVSeriesLog.Write("[follw.it] Rated '{0}' a {1}/5. ({2})",
                                        series[DBOnlineSeries.cPrettyName],
                                        fivePointRating,
                                        DateTime.Now - start);
                }
                catch (Exception e) {
                    // ah crap.
                    MPTVSeriesLog.Write("[follw.it] Failed rating '{0}': {1}",
                                        series[DBOnlineSeries.cPrettyName],
                                        e.Message);
                }
            }));

            thread.IsBackground = true;
            thread.Name = "follw.it series rating updater";
            thread.Start();
        }