コード例 #1
0
        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);
        }
コード例 #2
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");
         }
     }
 }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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;
        }
コード例 #8
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();
            }
        }
コード例 #9
0
        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;
        }
コード例 #10
0
        //
        // GET: /Home/

        public ActionResult Index()
        {
            var titles = TitlePersistence.ListTitles(null, TitleKind.Title);

            return(View());
        }
コード例 #11
0
 private void BtnCreateSeries_Click(object sender, EventArgs e)
 {
     TitlePersistence.AddTitle(TbxSeries.Text, TitleKind.Series, 0, 0, 0, null);
     BtnCreateSeries.Enabled = false;
 }
コード例 #12
0
        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;
        }
コード例 #13
0
        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;
        }