コード例 #1
0
ファイル: ExportingDialog.cs プロジェクト: revenz/iMeta
        public ExportingDialog(iMetaLibrary.Scanners.MovieScanner MovieScanner, iMetaLibrary.Scanners.TvScanner TvScanner)
        {
            this.Build ();

            notebook1.ShowTabs = false;
            notebook1.ShowBorder = false;
            bkgWorker = new System.ComponentModel.BackgroundWorker();
            bkgWorker.WorkerSupportsCancellation = true;
            bkgWorker.DoWork += HandleBkgWorkerDoWork;
            System.Timers.Timer pulsar = new System.Timers.Timer(50) { AutoReset = true};
            pulsar.Elapsed += delegate {
                pbarExporting.Pulse();
            };

            this.buttonCancel.Clicked += delegate(object sender, EventArgs e)
            {
                bkgWorker.CancelAsync();
                this.Destroy();
            };

            this.buttonOk.Clicked += delegate(object sender, EventArgs e) {
                if(notebook1.Page == 0)
                {
                    string folder = filechooserbutton1.Filename;
                    if(String.IsNullOrEmpty(folder) || !System.IO.Directory.Exists(folder)){
                        MessageBox.Show("Invalid export location specfied.");
                        return;
                    }
                    this.buttonOk.Visible = false;
                    bkgWorker.RunWorkerAsync(new object[] { folder, MovieScanner, TvScanner}  );
                    pulsar.Start();
                    notebook1.Page = 1;
                }
                else
                {
                    // final page.
                    this.Destroy();
                }
            };

            bkgWorker.RunWorkerCompleted += delegate(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) {
                pulsar.Stop();
                if(e.Result as bool? == true)
                {
                    notebook1.Page = 2;
                    this.buttonOk.Visible = true;
                    this.buttonCancel.Visible = false;
                }
                else
                {
                    notebook1.Page = 3;
                    this.buttonOk.Visible = true;
                    this.buttonCancel.Visible = false;
                }
            };
        }
コード例 #2
0
ファイル: TvShowGui.cs プロジェクト: revenz/iMeta
        public void InitializeShow(iMetaLibrary.Metadata.TvShowMeta TvShowMeta, iMetaLibrary.Metadata.TvFileMeta[] Episodes)
        {
            /*
            var enumerator = store.GetEnumerator();
            while(enumerator.MoveNext())
            {
                ((GuiComponents.TvEpisodeNodeItem)enumerator.Current).Meta.MetaUpdated -= MetaUpdated;
            }
            */
            /*
            store.Foreach(delegate(TreeModel modelOuter, TreePath pathOuter, TreeIter iterOuter)
                         {
                            TreeIter childIter;
                            modelOuter.IterChildren(out childIter);
                            modelOuter.Foreach(delegate(TreeModel model, TreePath path, TreeIter iter)
                            {
                                GuiComponents.TvEpisodeNodeItem node = model.GetValue(iter, 0) as GuiComponents.TvEpisodeNodeItem;
                                if(node != null)
                                    node.Meta.MetaUpdated -= MetaUpdated;
                                return true;
                            });
                            return true;
                         });
                         */
            store.Clear();
            string showtitle = TvShowMeta == null ? Episodes[0].ShowTitle : TvShowMeta.Title;
            this.TvShowMeta = TvShowMeta;
            this.Episodes = Episodes;
            //lblShowName.Markup = "<span font=\"18\" weight=\"bold\">{0}</span> <span size=\"small\"> [{1} Episode{2}]</span>".FormatStr(showtitle.HtmlEncode(), Episodes.Length, Episodes.Length == 1 ? "" : "s");

            if(Poster != null)
            {
                Poster.Dispose();
                Poster = null;
            }

            System.Drawing.Image poster = Episodes[0].GetPoster();
            if(poster != null)
            {
                Poster = GuiHelper.ImageToPixbufIcon(poster, 230, 320);
                poster.Dispose();
                poster = null;
            }
            SortedList<int, List<iMetaLibrary.Metadata.TvFileMeta>> seasons = new SortedList<int, List<iMetaLibrary.Metadata.TvFileMeta>>();
            foreach(iMetaLibrary.Metadata.TvFileMeta file in Episodes)
            {
                if(!seasons.ContainsKey(file.Season))
                    seasons.Add(file.Season, new List<iMetaLibrary.Metadata.TvFileMeta>());
                seasons[file.Season].Add(file);
            }
            foreach(int season in seasons.Keys)
            {
                var iter = store.AppendValues(new KeyNode(season == 0 ? "Specials" : "Season {0}".FormatStr(season)));
                foreach(iMetaLibrary.Metadata.TvFileMeta meta in seasons[season])
                {
                    store.AppendValues(iter, new GuiComponents.TvEpisodeNodeItem(meta));
                    meta.MetaUpdated += MetaUpdated;
                }
            }
            treeview.ExpandAll();
            //txtShowInfoTvdbId.Buffer.Text = TvShowMeta == null ? "" : TvShowMeta.Id.ToString();
            //txtShowInfoRuntime.Buffer.Text = TvShowMeta == null ? "" : TvShowMeta.Runtime.ToString();
            txtTitle.Text = showtitle;
            txtMpaa.Text = TvShowMeta == null ? "" : TvShowMeta.Mpaa;
            txtPremiered.Text = TvShowMeta == null ? "" : TvShowMeta.Premiered;
            txtStudio.Text = TvShowMeta == null ? "" : TvShowMeta.Studio;
            txtGenres.Text = TvShowMeta == null ? "" : String.Join(", ", TvShowMeta.Genres);
            txtPlot.Buffer.Text = TvShowMeta == null ? "" : TvShowMeta.Plot;
            switch(TvShowMeta == null ? "" : TvShowMeta.Status)
            {
                // Continuing - Series currently still in production this is generally the status that should be set during the initial run of a season
                case "Continuing": cboStatus.Active = 0; break;
                // Ended - For a series which has finished it's run and is not producing any new episodes.
                case "Ended ": cboStatus.Active = 1; break;
                // On Hiatus - For series where the current season has ended and it's return status is unknown.
                case "On Hiatus": cboStatus.Active = 2; break;
                // Other - Not commonly used, potentially for series that are in production and have yet to air at all.
                default: cboStatus.Active = 3; break;
            }
            this.QueueDraw();
        }
コード例 #3
0
ファイル: TvEpisodeNodeItem.cs プロジェクト: revenz/iMeta
 public TvEpisodeNodeItem(iMetaLibrary.Metadata.TvFileMeta Meta, bool Spacer = false)
 {
     this.Meta = Meta;
     this.Spacer = Spacer;
 }
コード例 #4
0
ファイル: MovieEditor.cs プロジェクト: revenz/iMeta
        public MovieEditor(iMetaLibrary.Metadata.MovieMeta Meta)
        {
            this.Build ();
            this.Meta = Meta;
            #region setup the actors datagrid
            store = new NodeStore(typeof(ActorNode));

            CellRendererText nameRender = new CellRendererText(){ Editable = true, };
            nameRender.Edited += delegate(object o, EditedArgs args) {
                // update the text
                ActorNode node = (ActorNode)store.GetNode(new Gtk.TreePath(args.Path));
                node.Name = args.NewText;
            };
            nvActors.AppendColumn("Name", nameRender, "text", 0);
            CellRendererText roleRender = new CellRendererText(){ Editable = true, };
            roleRender.Edited += delegate(object o, EditedArgs args) {
                // update the text
                ActorNode node = (ActorNode)store.GetNode(new Gtk.TreePath(args.Path));
                node.Role = args.NewText;
            };
            nvActors.AppendColumn("Role", roleRender, "text", 1);

            nvActors.NodeStore = store;

            btnActorsRemove.Clicked += delegate
            {
                ActorNode node = nvActors.NodeSelection.SelectedNode as ActorNode;
                if(node != null)
                    store.RemoveNode(node);
            };
            btnActorsAdd.Clicked += delegate {
                var node = new ActorNode();
                store.AddNode(node);
                nvActors.NodeSelection.SelectNode(node);
                int _n = 0;
                var enumerator = store.GetEnumerator();
                while(enumerator.MoveNext()) _n++;
                nvActors.ScrollToCell(new TreePath(new int[] {_n-1}), null, false, 0, 0);
            };
            #endregion

            if(Meta.Actors != null){
                foreach(var actor in Meta.Actors)
                    store.AddNode(new ActorNode() { Name = actor.Key, Role = actor.Value});
            }

            txtTitle.Text = Meta.Title ?? "";
            txtSortTitle.Text = Meta.SortTitle ?? "";
            txtSet.Text = Meta.Set ?? "";
            txtTagline.Text = Meta.TagLine ?? "";
            txtGenres.Text = String.Join(", ", Meta.Genres ?? new string[] {});
            txtDirectors.Text = String.Join(", ", Meta.Directors ?? new string[] {});
            txtWriters.Text = String.Join(", ", Meta.Writers ?? new string[] {});
            txtTrailer.Text = Meta.Trailer ?? "";
            txtImdbId.Text = Meta.Id ?? "";
            txtMpaa.Text = Meta.Mpaa ?? "";
            txtReleaseDate.Text = Meta.ReleaseDate > new DateTime(1850, 1,1) ? Meta.ReleaseDate.ToString("yyyy-MM-dd") : "";
            txtPlot.Buffer.Text = Meta.Plot ?? "";
            numRuntime.Value = Meta.Runtime / 60; // convert seconds to minutes
            ratingwidget.Value = (int)Meta.Rating;

            Poster = GuiHelper.ImageToPixbuf(Meta.LoadThumbnail(290, 1000));

            //ratingwidget.Visible  = false;

            buttonOk.Clicked += delegate {
                Save ();
            };

            eventPoster.ButtonPressEvent +=	delegate{
                BrowseForNewPoster();
            };
        }
コード例 #5
0
ファイル: EpisodesEditorGui.cs プロジェクト: revenz/iMeta
        public EpisodesEditorGui(iMetaLibrary.Metadata.TvFileMeta Meta)
        {
            this.Build ();

            this.Meta = Meta;

            this.buttonOk.Clicked += HandleButtonOkhandleClicked;

            string tbnFile = Meta.Filename.Substring(0, Meta.Filename.LastIndexOf(".")+1) + "tbn";
            if (System.IO.File.Exists(tbnFile))
            {
                using(System.Drawing.Image image = System.Drawing.Image.FromFile(tbnFile))
                {
                    imgThumbnail.Pixbuf = GuiHelper.ImageToPixbufIcon(image, 320, 240);
                }
                //UsingTbnFile = true;
            }
            else
            {
                //picThumbnail.Image = Resources.noposter;
            }

            store = new NodeStore(typeof(TvEpisodeNode));

            //List<iMetaLibrary.Metadata.TvEpisodeMeta> episodes = new List<iMetaLibrary.Metadata.TvEpisodeMeta>();
            bool first = true;
            foreach (iMetaLibrary.Metadata.TvEpisodeMeta episode in Meta.Episodes)
            {
                //episodes.Add(episode.Clone());
                iMetaLibrary.Metadata.TvEpisodeMeta epmeta = episode.Clone();
                if(first)
                {
                    episodeEditor.Initialize(epmeta);
                    first = false;
                }
                store.AddNode(new TvEpisodeNode(epmeta));
            }
			nvEpisodeList.NodeStore = store;

            nvEpisodeList.AppendColumn("Episode", new Gtk.CellRendererText (), "text", 0);

            nvEpisodeList.NodeSelection.Changed += delegate(object o, System.EventArgs args) {

                Gtk.NodeSelection selection = (Gtk.NodeSelection) o;
                TvEpisodeNode node = (TvEpisodeNode) selection.SelectedNode;
                // check selection hasnt changed
                if (node == SelectedEpisodeNode)
                    return;
                // check if current data in episode editor is valid
                if (!episodeEditor.IsValid())
                {
                    nvEpisodeList.NodeSelection.SelectNode(SelectedEpisodeNode);
                    return;
                }
                else // if valid saved the data to the meta object
                {
                    episodeEditor.Save();
                    // this reassignment to itself forces the listbox to revalidate it and updates the text in the listbox if change, otherwise it doesnt update
                    //lstEpisodes.Items[SelectedEpisodeIndex] = lstEpisodes.Items[SelectedEpisodeIndex];
                }
                // update selected epsiode index
                SelectedEpisodeNode = node;
                // initialize the newly selected episode data
                episodeEditor.Initialize(node.Meta);
            };
コード例 #6
0
ファイル: EpisodesEditorGui.cs プロジェクト: revenz/iMeta
            public TvEpisodeNode(iMetaLibrary.Metadata.TvEpisodeMeta Meta)
            {
                this.Meta = Meta;