/// <summary> /// Configures the splash screen and initializes the main application form /// This runs once the splash screen is visible. /// </summary> protected override void OnCreateMainForm() { // Update splash screen this.SplashScreen.Invoke(new MethodInvoker(() => ((TVRenameSplash)this.SplashScreen).UpdateStatus("Initializing"))); // Update RegVersion to bring the WebBrowser up to speed RegistryHelper.UpdateBrowserEmulationVersion(); CommandLineArgs clargs = new CommandLineArgs(this.CommandLineArgs); bool recover = false; string recoverText = string.Empty; // Check arguments for forced recover if (clargs.ForceRecover) { recover = true; recoverText = "Recover manually requested."; } // Check arguments for custom settings path if (!string.IsNullOrEmpty(clargs.UserFilePath)) { try { PathManager.SetUserDefinedBasePath(clargs.UserFilePath); } catch (Exception ex) { if (!clargs.Unattended && !clargs.Hide) { MessageBox.Show($"Error while setting the User-Defined File Path:{Environment.NewLine}{ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } Logger.Error(ex, $"Error while setting the User-Defined File Path - EXITING: {clargs.UserFilePath}"); Environment.Exit(1); } } FileInfo tvdbFile = PathManager.TVDBFile; FileInfo settingsFile = PathManager.TVDocSettingsFile; TVDoc doc; do // Loop until files correctly load { if (recover) // Recovery required, prompt user { RecoverXML recoveryForm = new RecoverXML(recoverText); if (recoveryForm.ShowDialog() == DialogResult.OK) { tvdbFile = recoveryForm.DBFile; settingsFile = recoveryForm.SettingsFile; } else { // TODO: Throw an error return; } } // Try loading TheTVDB cache file TheTVDB.Instance.setup(tvdbFile, PathManager.TVDBFile, clargs); // Try loading settings file doc = new TVDoc(settingsFile, clargs); if (recover) { doc.SetDirty(); } recover = !doc.LoadOK; // Continue if correctly loaded if (!recover) { continue; } // Set recover message recoverText = string.Empty; if (!doc.LoadOK && !string.IsNullOrEmpty(doc.LoadErr)) { recoverText = doc.LoadErr; } if (!TheTVDB.Instance.LoadOK && !string.IsNullOrEmpty(TheTVDB.Instance.LoadErr)) { recoverText += $"{Environment.NewLine}{TheTVDB.Instance.LoadErr}"; } } while (recover); // Show user interface UI ui = new UI(doc, (TVRenameSplash)this.SplashScreen); // Bind IPC actions to the form, this allows another instance to trigger form actions RemoteClient.Bind(ui, doc); this.MainForm = ui; }
private static int Main(string[] args) { // Enabling Windows XP visual effects before any controls are created Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Sort out the command line arguments CommandLineArgs clargs = new CommandLineArgs(args); // see if we're already running bool createdNew = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "TVRenameMutex", out createdNew); if (!createdNew) { // we're already running // tell the already running copy to come to the foreground IpcClientChannel clientChannel = new IpcClientChannel(); ChannelServices.RegisterChannel(clientChannel, true); RemotingConfiguration.RegisterWellKnownClientType(typeof(IPCMethods), "ipc://TVRenameChannel/IPCMethods"); IPCMethods ipc = new IPCMethods(); // if we were already running, and no command line arguments, then bring application to the foreground // and we're done. if (args.Length == 0) { ipc.BringToForeground(); return(0); } // Send command-line arguments to already running TVRename via IPC CommandLineArgs.MissingFolderBehaviour before = ipc.MissingBehaviour; bool renameBefore = ipc.RenameBehaviour; if (clargs.RenameCheck == false) { // Temporarily override behaviour for missing folders ipc.RenameBehaviour = false; } if (clargs.MissingFolder != CommandLineArgs.MissingFolderBehaviour.Ask) { // Temporarily override behaviour for missing folders ipc.MissingBehaviour = clargs.MissingFolder; } // TODO: Unify command line handling between here and in UI.cs (ProcessArgs). Just send in clargs via IPC? if (clargs.Scan || clargs.DoAll) // doall implies scan { ipc.Scan(); } if (clargs.DoAll) { ipc.DoAll(); } if (clargs.Quit) { ipc.Quit(); return(0); } ipc.RenameBehaviour = renameBefore; ipc.MissingBehaviour = before; return(0); } #if !DEBUG try { #endif // Starting TVRename... // Check arguments for forced recover bool ok = true; string recoverText = ""; if (clargs.ForceRecover) { ok = false; // force recover dialog recoverText = "Recover manually requested."; } // Load settings files TVDoc doc = null; try { if (!string.IsNullOrEmpty(clargs.UserFilePath)) { PathManager.SetUserDefinedBasePath(clargs.UserFilePath); } } catch (System.Exception ex) { MessageBox.Show("Error while setting the User-Defined File Path:" + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(1); } FileInfo tvdbFile = PathManager.TVDBFile; FileInfo settingsFile = PathManager.TVDocSettingsFile; do // loop until no problems loading settings & tvdb cache files { if (!ok) // something went wrong last time around, ask the user what to do { RecoverXML rec = new RecoverXML(recoverText); if (rec.ShowDialog() == DialogResult.OK) { tvdbFile = rec.DBFile; settingsFile = rec.SettingsFile; } else { return(1); } } // try loading using current settings files, and set up the main // classes TheTVDB.Instance.setup(tvdbFile, PathManager.TVDBFile, clargs); doc = new TVDoc(settingsFile, clargs); if (!ok) { doc.SetDirty(); } ok = doc.LoadOK; if (!ok) { recoverText = ""; if (!doc.LoadOK && !String.IsNullOrEmpty(doc.LoadErr)) { recoverText += doc.LoadErr; } if (!TheTVDB.Instance.LoadOK && !String.IsNullOrEmpty(TheTVDB.Instance.LoadErr)) { recoverText += "\r\n" + TheTVDB.Instance.LoadErr; } } } while (!ok); // Show user interface UI theUI = new UI(doc); Application.Run(theUI); GC.KeepAlive(mutex); #if !DEBUG } catch (Exception e) { ShowException se = new ShowException(e); se.ShowDialog(); } #endif return(0); }
/// <summary> /// Configures the splash screen and initializes the main application form /// This runs once the splash screen is visible. /// </summary> protected override void OnCreateMainForm() { CommandLineArgs clargs = new CommandLineArgs(CommandLineArgs); if (clargs.Hide) { SplashScreen.SafeInvoke( () => ((TVRenameSplash)SplashScreen).Visible = false, true); } // Update splash screen SplashScreen.SafeInvoke( () => ((TVRenameSplash)SplashScreen).UpdateStatus("Initializing"), true); // Update RegVersion to bring the WebBrowser up to speed RegistryHelper.UpdateBrowserEmulationVersion(); bool recover = false; string recoverText = string.Empty; // Check arguments for forced recover if (clargs.ForceRecover) { recover = true; recoverText = "Recover manually requested."; } SetupCustomSettings(clargs); FileInfo tvdbFile = PathManager.TVDBFile; FileInfo settingsFile = PathManager.TVDocSettingsFile; TVDoc doc; do // Loop until files correctly load { if (recover) // Recovery required, prompt user { RecoverXML recoveryForm = new RecoverXML(recoverText); if (recoveryForm.ShowDialog() == DialogResult.OK) { tvdbFile = recoveryForm.DbFile; settingsFile = recoveryForm.SettingsFile; } else { // TODO: Throw an error return; } } // Try loading TheTVDB cache file TheTVDB.Instance.Setup(tvdbFile, PathManager.TVDBFile, clargs); // Try loading settings file doc = new TVDoc(settingsFile, clargs); if (recover) { doc.SetDirty(); } recover = !doc.LoadOk; // Continue if correctly loaded if (!recover) { continue; } // Set recover message recoverText = string.Empty; if (!doc.LoadOk && !string.IsNullOrEmpty(doc.LoadErr)) { recoverText = doc.LoadErr; } if (!TheTVDB.Instance.LoadOk && !string.IsNullOrEmpty(TheTVDB.Instance.LoadErr)) { recoverText += $"{Environment.NewLine}{TheTVDB.Instance.LoadErr}"; } } while (recover); ConvertSeriesTimeZones(doc, TheTVDB.Instance); // Show user interface UI ui = new UI(doc, (TVRenameSplash)SplashScreen, !clargs.Unattended && !clargs.Hide); ui.Text = ui.Text + " " + Helpers.DisplayVersion; // Bind IPC actions to the form, this allows another instance to trigger form actions RemoteClient.Bind(ui, doc); MainForm = ui; }