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; } }
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)); }
/// <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); } }
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); }
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); } }
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(); } } }
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); }
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); } }
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; }
/// <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); } }
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"); }
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); }
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"; } } }
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()); }
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); } } }
private bool seriesHasAllEpsMatched(DBSeries series) { int unMatchedCount = matches.Single(s => s.Key == series).Value.Count(p => p.Value == null); return(unMatchedCount == 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"); }
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(); }