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; } }; }
void HandleBkgWorkerDoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { try { object[] parameters = e.Argument as object[]; string exportdir = parameters[0] as string; iMetaLibrary.Scanners.MovieScanner MovieScanner = (iMetaLibrary.Scanners.MovieScanner)parameters[1]; iMetaLibrary.Scanners.TvScanner TvScanner = (iMetaLibrary.Scanners.TvScanner)parameters[2]; string html = iMetaGui.ResourceReader.ReadResource("ExportTemplate.html"); foreach (System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(html, "<!--@Resource\\(\"([^\"]*)\"\\)-->", System.Text.RegularExpressions.RegexOptions.Singleline)) { string resource = iMetaGui.ResourceReader.ReadResource(match.Groups[1].Value); Logger.Log("Resouce match: " + match.Groups[1].Value); html = html.Replace(match.Value, resource); } if (bkgWorker.CancellationPending) { return; } html = html.Replace("<!--@Movies-->", MovieScanner.CreateHtmlElement(exportdir)); if (bkgWorker.CancellationPending) { return; } html = html.Replace("<!--@TvShows-->", TvScanner.CreateHtmlElement(exportdir)); if (bkgWorker.CancellationPending) { return; } System.IO.File.WriteAllText(System.IO.Path.Combine(exportdir, "imeta_catalog.html"), html); e.Result = true; } catch (Exception ex) { Logger.Log(ex.Message + Environment.NewLine + ex.StackTrace); e.Result = false; } }
private void SetupTvScanner() { #region setup the tv scanner this.TvScanner = new iMetaLibrary.Scanners.TvScanner(); this.TvScanner.Started += delegate { }; this.TvScanner.Completed += delegate { if (notebook1.Page == 1) { topbar.IsStatusPulsing = false; } UpdateStatusText("TV Shows: {0}, Episodes: {1}".FormatStr(TvScanner.NumberOfShows, TvScanner.Items.Count), false); }; this.TvScanner.ItemAdded += delegate(Meta Item) { UpdateStatusText("Found Episode: {0}".FormatStr(Item.Filename), false); }; this.TvScanner.ScanningItem += delegate(Meta Item) { UpdateStatusText("Scanning File: {0}".FormatStr(Item.Filename), false); }; this.TvScanner.AllItemsFound += delegate(iMetaLibrary.Metadata.Meta[] NewItems) { List <TvShowNode> storeItems = new List <TvShowNode>(); foreach (string key in TvScanner.Shows.Keys) // need to check if already in the store... { List <TvFileMeta> episodes = TvScanner.Shows[key]; // construct these off the main thread var enumerator = storeItems.GetEnumerator(); bool showfound = false; while (enumerator.MoveNext()) { TvShowNode node = (TvShowNode)enumerator.Current; if (node.Title.ToLower() == episodes[0].ShowTitle.ToLower()) { showfound = true; node.NumberOfEpisodes = episodes.Count; break; } } if (!showfound) { System.Drawing.Image poster = episodes[0].GetPoster(); storeItems.Add(new TvShowNode() { Title = episodes[0].ShowTitle, NumberOfEpisodes = episodes.Count, Poster = poster == null ? Images.NoPosterSmallPixbuf : GuiHelper.ImageToPixbufIcon(poster, 120, 180) }); if (poster != null) { poster.Dispose(); } } } guiTvShowList.AddToStore(storeItems); }; guiTvShowList.ItemActivated += delegate(string Label) { if (String.IsNullOrEmpty(Label) || TvScanner.Shows == null || !TvScanner.Shows.ContainsKey(Label)) { return; } TvShowMeta showmeta = TvScanner.Shows[Label][0].LoadShowMeta(); Gtk.Application.Invoke(delegate { // show the tv show gui guiTvShow.InitializeShow(showmeta, TvScanner.Shows[Label].ToArray()); topbar.TvShowsButtonIsActive = false; nbkTvShows.Page = 1; }); }; /* * btnTvBack.Activated += delegate { * nbkTvShows.Page = 0; * }; * btnTvFolders.Activated += delegate { * using(iMetaGui.FolderListGui flg = new iMetaGui.FolderListGui("TV Folders", "Here you can configure the folders to scan for TV episodes.", iMetaLibrary.Settings.TvFolders)){ * flg.Run(); * if(flg.DialogResult == ResponseType.Ok) * { * iMetaLibrary.Settings.TvFolders = flg.Folders; * iMetaLibrary.Settings.SaveSettings(); * } * } * };*/ #endregion }