private bool FindTitlesToConvert() { ClbEpisodes.Items.Clear(); var titles = TitlePersistence.ListTitles(TbxSeasonPattern.Text, TitleKind.Title); try { var regex = new Regex(TbxEpisodesRegexp.Text); foreach (var t in titles) { var matches = regex.Match(t.TitleName); if (matches.Success && matches.Groups.Count > 2) { int season = matches.Groups["s"].Value.To <int>(0); int disk = matches.Groups["d"].Value.To <int>(0); int episode = matches.Groups["e"].Value.To <int>(0); if (disk > 0 || episode > 0) { t.Season = season; t.Disk = disk; t.EpisodeOrTrack = episode; t.Kind = (episode > 0) ? TitleKind.Episode : TitleKind.Disk; ClbEpisodes.Items.Add(t, true); } } } } catch (Exception e) { MessageBox.Show(e.Message, "Error searching fro episodes/disks"); } return(ClbEpisodes.Items.Count > 0); }
private void BtnDeleteTitle_Click(object sender, EventArgs e) { if (m_currentTitle == null) { return; } if (MessageBox.Show("Do you want to delete " + m_currentTitle.TitleName + "?", "Confirm Title Removal", MessageBoxButtons.OKCancel) == DialogResult.OK) { try { if (m_images != null) { foreach (var img in m_images) { MediaSamplePersistence.RemoveSample(img); } } TitlePersistence.DeleteTitle(m_currentTitle.Id); TVTitles.RemoveObject(m_currentTitle); DisplayTitleInfo(null); } catch (Exception err) { MessageBox.Show(err.Message, "Error Deleting Title"); } } }
private void Reload() { var kind = GetResourceKind(); TVTitles.ClearObjects(); CbxKind.Items.Clear(); BtnSave.Enabled = false; switch (kind) { case ResourceKind.Audio: TVTitles.Roots = new SortableTitles(TitlePersistence.ListRootAudio()); CbxKind.SetupComboBox <TitleKind>("Audio_"); break; case ResourceKind.Video: TVTitles.Roots = new SortableTitles(TitlePersistence.ListRootVideo()); CbxKind.SetupComboBox <TitleKind>("Video_"); break; } m_currentTitle = null; m_images = null; m_imageIndex = 0; SetImageNavigationControls(); PbxImage.Image = null; }
private void CheckSeries(string seriesName) { m_title = null; var ss = TitlePersistence.ListTitles(seriesName, TitleKind.Series); if (ss != null && ss.Count == 1) { m_title = ss[0]; BtnCreateSeasons.Enabled = false; } }
private void BtnAutoMove_Click(object sender, EventArgs e) { if (m_title == null) { MessageBox.Show("Need to create series first"); return; } var seasons = new Dictionary <int, long>(); long seriesTitleId = m_title.Id; int numSeasonItems = ClbSeasons.Items.Count; for (int i = 0; i < numSeasonItems; i++) { StatusUpdate("seasons", i + 1, numSeasonItems); Title s = (Title)ClbSeasons.Items[i]; if (s != null) { if (ClbSeasons.GetItemChecked(i) && !s.ParentTitleId.HasValue) { s.ParentTitleId = seriesTitleId; TitlePersistence.ReparentTitle(s.Id, seriesTitleId); } if (!seasons.ContainsKey(s.Season)) { seasons.Add(s.Season, s.Id); } } } int numDiskItems = ClbEpisodes.Items.Count; for (int i = 0; i < numDiskItems; i++) { StatusUpdate("episodes and disks", i + 1, numDiskItems); Title ep = (Title)ClbEpisodes.Items[i]; if (ClbEpisodes.GetItemChecked(i) && ep != null) { if (!ep.ParentTitleId.HasValue) { long seasonTitleId; if (seasons.TryGetValue(ep.Season, out seasonTitleId)) { ep.ParentTitleId = seasonTitleId; TitlePersistence.ReparentTitle(ep.Id, seasonTitleId); } } } } BtnSearchForSeasons_Click(sender, e); EndUpdate(); }
private void updateAllFromTMDBToolStripMenuItem_Click(object sender, EventArgs e) { var titles = TitlePersistence.GetTitlesForAutoupdate(); var provider = new UpdateFromProvider(titles); provider.ShowDialog(); DisplayTitleInfo(m_currentTitle); m_titleFilter.Clear(); m_titleFilter.AddRange(provider.TitlesForInspection); TbxSearch.Text = ""; Refilter(); }
private void BtnSearchForSeasons_Click(object sender, EventArgs e) { var seasonNumbersFound = new HashSet <int>(); var seasonNumbersNotFound = new HashSet <int>(); string sqlPattern = TbxSeasonPattern.Text; CheckSeries(TbxSeries.Text); //Search for pattern foundSeasons = TitlePersistence.ListTitles(sqlPattern, TitleKind.Season); ClbSeasons.Items.Clear(); foreach (var title in foundSeasons) { ClbSeasons.Items.Add(title, !title.ParentTitleId.HasValue); seasonNumbersFound.Add(title.Season); } //Search for pattern var titlesDisks = TitlePersistence.ListTitles(sqlPattern, TitleKind.Disk); var titlesEpisodes = TitlePersistence.ListTitles(sqlPattern, TitleKind.Episode); ClbEpisodes.Items.Clear(); foreach (var d in titlesDisks) { ClbEpisodes.Items.Add(d, !d.ParentTitleId.HasValue); int s = d.Season; if (s > 0 && !seasonNumbersFound.Contains(s)) { seasonNumbersNotFound.Add(s); } } foreach (var ep in titlesEpisodes) { ClbEpisodes.Items.Add(ep, !ep.ParentTitleId.HasValue); int s = ep.Season; if (s > 0 && !seasonNumbersFound.Contains(s)) { seasonNumbersNotFound.Add(s); } } var sb = new StringBuilder(seasonNumbersNotFound.Count * 2); TbxSeasonsToCreate.Text = string.Join(", ", seasonNumbersNotFound.OrderBy(i => i)); BtnCreateSeasons.Enabled = seasonNumbersNotFound.Count > 0; }
private void DisplayTitleInfo(Title title) { m_currentTitle = title; LVLocations.ClearObjects(); LVRatings.ClearObjects(); m_imageIndex = 0; if (title != null) { TbxReleaseYear.Text = title.Year.ToString("##"); TbxDescription.Text = title.Description; TbxImdbId.Text = title.ImdbId; TbxSeason.Text = title.Season.ToString("##"); TbxDisk.Text = title.Disk.ToString("##"); TbxEpisode.Text = title.EpisodeOrTrack.ToString("##"); TbxTitleName.Text = title.TitleName; CbxKind.SetSelectedKey(title.Kind); LVLocations.AddObjects(LocationPersistence.ListTitleLocations(title.Id)); LVRatings.AddObjects(TitlePersistence.GetRatings(title.Id)); SetEpisodeControlsState(m_currentTitle.Kind); m_images = MediaSamplePersistence.GetSamples(title.Id, MediaSampleKind.Image); DisplayImage(); } else { TbxReleaseYear.Text = ""; TbxDescription.Text = ""; TbxImdbId.Text = ""; TbxSeason.Text = ""; TbxDisk.Text = ""; TbxEpisode.Text = ""; TbxTitleName.Text = ""; CbxKind.SelectedIndex = -1; SetEpisodeControlsState(TitleKind.Title); m_images = null; SetImageNavigationControls(); PbxImage.Clear(); } }
private void SetSeriesHierarchy(Title item, Title parent) { long parentId = parent.Id; switch (parent.Kind) { case TitleKind.Season: if (item.Kind == TitleKind.Title) { item.Kind = TitleKind.Disk; } if (parent.Season > 0) { item.Season = parent.Season; } break; case TitleKind.Series: if (item.Kind != TitleKind.Season && item.Season > 0) { long saeasonId = -1; foreach (var title in TitlePersistence.ListTitlesByParent(parentId)) { if (title.Kind == TitleKind.Season && title.Season == item.Season) { saeasonId = title.Id; break; } } if (saeasonId < 0) { saeasonId = TitlePersistence.AddTitle(parent.TitleName + " Season " + item.Season.ToString(), TitleKind.Season, item.Season, 0, 0, parentId).Id; } parentId = saeasonId; } break; } item.ParentTitleId = parentId; }
// // GET: /Home/ public ActionResult Index() { var titles = TitlePersistence.ListTitles(null, TitleKind.Title); return(View()); }
private void BtnCreateSeries_Click(object sender, EventArgs e) { TitlePersistence.AddTitle(TbxSeries.Text, TitleKind.Series, 0, 0, 0, null); BtnCreateSeries.Enabled = false; }
private void BtnCreateSeasons_Click(object sender, EventArgs e) { if (m_title == null) { MessageBox.Show("Need to create series first"); return; } string command = TbxSeasonsToCreate.Text; string pattern = TbxSeasonPattern.Text.Replace("%", "Season {0}"); if (string.IsNullOrWhiteSpace(command)) { return; } var tokens1 = command.Trim().Split(',', ';'); var seasons = new List <int>(); foreach (string t in tokens1) { var tokens2 = t.Trim().Split('-'); switch (tokens2.Length) { case 1: seasons.Add(tokens2[0].To <int>(0)); break; case 2: for (int i = tokens2[0].To <int>(0); i <= tokens2[1].To <int>(0); i++) { seasons.Add(i); } break; default: MessageBox.Show("Invalid session string: " + tokens2); return; } } foreach (int i in seasons) { bool found = false; foreach (var title in foundSeasons) { if (title.Season == i) { found = true; break; } } if (found) { continue; } var season = TitlePersistence.AddTitle(string.Format(pattern, i), TitleKind.Season, i, 0, 0, m_title.Id); ClbSeasons.Items.Add(season, true); TbxSeasonsToCreate.Text = ""; } BtnCreateSeasons.Enabled = false; }
public MainForm() { InitializeComponent(); LVLocations.VirtualMode = false; LVRatings.VirtualMode = false; AppDomain.CurrentDomain.UnhandledException += (o, e) => { var ex = e.ExceptionObject as Exception; string msg = ex == null ? "Unhandled error" : ex.Message; MessageBox.Show(msg, "Application Error"); }; Application.ThreadException += (o, e) => { string msg = e.Exception == null ? "Unhandled error (thread)" : e.Exception.Message; MessageBox.Show(msg, "Application Error"); }; TVTitles.CanExpandGetter = (o) => { var t = o as Title; if (t == null) { return(false); } return(t.Kind != TitleKind.Episode && t.Kind != TitleKind.Track && t.Kind != TitleKind.Title); }; TVTitles.ChildrenGetter = (o) => { var t = o as Title; if (t == null) { return(null); } return(new SortableTitles(TitlePersistence.ListTitlesByParent(t.Id))); }; OlvColumnName.ImageGetter = (o) => { var t = o as Title; if (t == null) { return(-1); } return((int)t.Kind); }; OlvBtnPlay.AspectGetter = (o) => { var l = o as LocationForDisplay; if (l != null && l.LocationKind != LocationBaseKind.Shelf) { return("Play"); } return(null); }; var sink = (BrightIdeasSoftware.SimpleDropSink)TVTitles.DropSink; sink.AcceptExternal = false; sink.CanDropBetween = false; sink.CanDropOnBackground = false; sink.CanDropOnItem = true; sink.CanDropOnSubItem = true; sink.CanDrop += (sender, e) => { e.Handled = true; e.Effect = DragDropEffects.None; var models = GetModelsFromDropEvent(e); if (CanDrop(models.Item1, models.Item2)) { e.Effect = DragDropEffects.Move; } }; sink.Dropped += (sender, e) => { var models = GetModelsFromDropEvent(e); if (models.Item1 == null || models.Item2 == null) { return; } SetSeriesHierarchy(models.Item1, models.Item2); GeneralPersistense.Upsert(models.Item1); e.Effect = DragDropEffects.Move; TVTitles.RemoveObject(models.Item1); TVTitles.RefreshObject(models.Item2); }; TVTitles.ModelFilter = new ModelFilter((m) => { var t = m as Title; if (t == null) { return(false); } string filter = TbxSearch.Text.Trim().ToLower(); if (m_titleFilter.Count > 0) { if (m_titleFilter.Contains(t.Id)) { if (filter.Length == 0) { return(true); } return(t.TitleName.ToLower().Contains(filter)); } else { return(false); } } else { if (filter.Length == 0) { return(true); } return(t.TitleName.ToLower().Contains(filter)); } }); olvColumnRatingValue.AspectPutter = (object o, object val) => { var r = o as TitleRatingWithName; if (r != null) { r.RatingValue = Convert.ToSingle(val); } }; CbxDevices.Items.AddRange(DevicePersistense.ListForPalyback().ToArray()); if (CbxDevices.Items.Count > 0) { CbxDevices.SelectedIndex = 0; } m_imageIndex = 0; }