A Bloom Pack is just a zipped collection folder (a folder full of book folders).
Inheritance: System.Windows.Forms.Form
 public void RunIt()
 {
     using (var dlg = new BloomPackInstallDialog(@"C:\Users\John\Desktop\Szi's shells Books.BloomPack"))
     {
         dlg.ShowDialog();
     }
 }
示例#2
0
        static void Main(string[] args)
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                //bring in settings from any previous version
                if (Settings.Default.NeedUpgrade)
                {
                    //see http://stackoverflow.com/questions/3498561/net-applicationsettingsbase-should-i-call-upgrade-every-time-i-load
                    Settings.Default.Upgrade();
                    Settings.Default.Reload();
                    Settings.Default.NeedUpgrade = false;
                    Settings.Default.Save();
                    StartUpWithFirstOrNewVersionBehavior = true;
                }

            #if DEBUG
                using (new Analytics("sje2fq26wnnk8c2kzflf", RegistrationDialog.GetAnalyticsUserInfo(), true))

            #else
                string feedbackSetting = System.Environment.GetEnvironmentVariable("FEEDBACK");

                //default is to allow tracking
                var allowTracking = string.IsNullOrEmpty(feedbackSetting) || feedbackSetting.ToLower() == "yes" || feedbackSetting.ToLower() == "true";

                using (new Analytics("c8ndqrrl7f0twbf2s6cv", RegistrationDialog.GetAnalyticsUserInfo(), allowTracking))

            #endif
                {
                    if (args.Length == 1 && args[0].ToLower().EndsWith(".bloompack"))
                    {
                        using (var dlg = new BloomPackInstallDialog(args[0]))
                        {
                            dlg.ShowDialog();
                        }
                        return;
                    }

            #if DEBUG //the exception you get when there is no other BLOOM is a pain when running debugger with break-on-exceptions
                    if (args.Length > 1)
                        Thread.Sleep(3000);//this is here for testing the --rename scenario where the previous run needs a chance to die before we continue, but we're not using the mutex becuase it's a pain when using the debugger

            #else
                    if (!GrabMutexForBloom())
                        return;
            #endif

                    OldVersionCheck();

                    SetUpErrorHandling();

                    _applicationContainer = new ApplicationContainer();

                    SetUpLocalization();
                    Logger.Init();

                    if ( args.Length == 1 && args[0].ToLower().EndsWith(".bloomcollection"))
                    {
                        Settings.Default.MruProjects.AddNewPath(args[0]);
                    }

                    if (args.Length > 0 && args[0] == "--rename")
                    {
                        try
                        {
                            var pathToNewCollection = CollectionSettings.RenameCollection(args[1], args[2]);
                            //MessageBox.Show("Your collection has been renamed.");
                            Settings.Default.MruProjects.AddNewPath(pathToNewCollection);
                        }
                        catch (ApplicationException error)
                        {
                            Palaso.Reporting.ErrorReport.NotifyUserOfProblem(error, error.Message);
                            Environment.Exit(-1);
                        }
                        catch (Exception error)
                        {
                            Palaso.Reporting.ErrorReport.NotifyUserOfProblem(error,"Bloom could not finish renaming your collection folder. Restart your computer and try again.");
                            Environment.Exit(-1);
                        }

                    }

                    _earliestWeShouldCloseTheSplashScreen = DateTime.Now.AddSeconds(3);

                    Settings.Default.Save();

                    Browser.SetUpXulRunner();

                    Application.Idle += Startup;

                    L10NSharp.LocalizationManager.SetUILanguage(Settings.Default.UserInterfaceLanguage, false);

                    try
                    {
                        Application.Run();
                    }
                    catch (System.AccessViolationException nasty)
                    {
                        Logger.ShowUserATextFileRelatedToCatastrophicError(nasty);
                        System.Environment.FailFast("AccessViolationException");
                    }

                    Settings.Default.Save();

                    Logger.ShutDown();

                    if (_projectContext != null)
                        _projectContext.Dispose();
                }
            }
            finally
            {
                ReleaseMutexForBloom();
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                //bring in settings from any previous version
                if (Settings.Default.NeedUpgrade)
                {
                    //see http://stackoverflow.com/questions/3498561/net-applicationsettingsbase-should-i-call-upgrade-every-time-i-load
                    Settings.Default.Upgrade();
                    Settings.Default.Reload();
                    Settings.Default.NeedUpgrade = false;
                    Settings.Default.Save();
                    StartUpWithFirstOrNewVersionBehavior = true;
                }

            #if DEBUG
                using (new Analytics("sje2fq26wnnk8c2kzflf", RegistrationDialog.GetAnalyticsUserInfo(), true))

            #else
                string feedbackSetting = System.Environment.GetEnvironmentVariable("FEEDBACK");

                //default is to allow tracking
                var allowTracking = string.IsNullOrEmpty(feedbackSetting) || feedbackSetting.ToLower() == "yes" || feedbackSetting.ToLower() == "true";

                using (new Analytics("c8ndqrrl7f0twbf2s6cv", RegistrationDialog.GetAnalyticsUserInfo(), allowTracking))

            #endif
                {
                    if (args.Length == 1 && args[0].ToLower().EndsWith(".bloompack"))
                    {
                        using (var dlg = new BloomPackInstallDialog(args[0]))
                        {
                            dlg.ShowDialog();
                        }
                        return;
                    }

            #if !DEBUG //the exception you get when there is no other BLOOM is a pain when running debugger with break-on-exceptions
                if (!GrabMutexForBloom())
                    return;
            #endif

                    OldVersionCheck();

                    SetUpErrorHandling();

                    _applicationContainer = new ApplicationContainer();

                    SetUpLocalization();
                    Logger.Init();

                    if (args.Length == 1 && args[0].ToLower().EndsWith(".bloomcollection"))
                    {
                        Settings.Default.MruProjects.AddNewPath(args[0]);
                    }
                    _earliestWeShouldCloseTheSplashScreen = DateTime.Now.AddSeconds(3);

                    Settings.Default.Save();

                    Browser.SetUpXulRunner();

                    Application.Idle += Startup;

                    L10NSharp.LocalizationManager.SetUILanguage(Settings.Default.UserInterfaceLanguage, false);

                    try
                    {
                        Application.Run();
                    }
                    catch (System.AccessViolationException nasty)
                    {
                        Logger.ShowUserATextFileRelatedToCatastrophicError(nasty);
                        System.Environment.FailFast("AccessViolationException");
                    }

                    Settings.Default.Save();

                    Logger.ShutDown();

                    if (_projectContext != null)
                        _projectContext.Dispose();
                }
            }
            finally
            {
                ReleaseMutexForBloom();
            }
        }
示例#4
0
        static int Main(string[] args1)
        {
            Logger.Init();
            CheckForCorruptUserConfig();

            // Bloom has several command line scenarios, without a coherent system for them.
            // The following is how we will do things from now on, and things can be moved
            // into this as time allows. See CommandLineOptions.cs.
            if (args1.Length > 0 && new[] {"--help", "hydrate", "download", "getfonts"}.Contains(args1[0])) //restrict using the commandline parser to cases were it should work
            {
            #if !__MonoCS__
                AttachConsole(-1);
            #endif
                var exitCode = CommandLine.Parser.Default.ParseArguments(args1,
                    new[] {typeof (HydrateParameters), typeof (DownloadBookOptions), typeof (GetUsedFontsParameters)})
                    .MapResult(
                        (HydrateParameters opts) => HandlePrepareCommandLine(opts),
                        (DownloadBookOptions opts) => DownloadBookCommand.HandleSilentDownload(opts),
                        (GetUsedFontsParameters opts) => GetUsedFontsCommand.Handle(opts),
                        errors =>
                        {
                            var code = 0;
                            foreach(var error in errors)
                            {
                                if(!(error is HelpVerbRequestedError))
                                {
                                    Debug.WriteLine(error.ToString());
                                    Console.WriteLine(error.ToString());
                                    code = 1;
                                }
                            }
                            return code;
                        });
                return exitCode; // we're done
            }

            //Debug.Fail("Attach Now");
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                XWebBrowser.DefaultBrowserType = XWebBrowser.BrowserType.GeckoFx;

                var args = args1;

                if (SIL.PlatformUtilities.Platform.IsWindows)
                {
                    OldVersionCheck();
                }

                //bring in settings from any previous version
                if (Settings.Default.NeedUpgrade)
                {
                    //see http://stackoverflow.com/questions/3498561/net-applicationsettingsbase-should-i-call-upgrade-every-time-i-load
                    Settings.Default.Upgrade();
                    Settings.Default.Reload();
                    Settings.Default.NeedUpgrade = false;
                    Settings.Default.MaximizeWindow = true; // this is needed to force this to be written to the file, where a user can find it to modify it by hand (our video maker)
                    Settings.Default.Save();

                    StartUpWithFirstOrNewVersionBehavior = true;
                }

                if (IsInstallerLaunch(args))
                {
                    InstallerSupport.HandleSquirrelInstallEvent(args); // may exit program
                }

                // Needs to be AFTER HandleSquirrelInstallEvent, because that can happen when the program is launched by Update rather than
                // by the user.
                if (!Settings.Default.LicenseAccepted)
                {
                    Browser.SetUpXulRunner();
                    using (var dlg = new LicenseDialog())
                        if (dlg.ShowDialog() != DialogResult.OK)
                            return 1;
                    Settings.Default.LicenseAccepted = true;
                    Settings.Default.Save();
                }

            #if !USING_CHORUS
                Settings.Default.ShowSendReceive = false; // in case someone turned it on before we disabled
            #endif
            #if DEBUG
                if (args.Length > 0)
                {
                    // This allows us to debug things like  interpreting a URL.
                    MessageBox.Show("Attach debugger now");
                }
            #endif

                // Ensures that registration settings for all channels of Bloom are stored in a common place,
                // so the user is not asked to register each independently.
                RegistrationSettingsProvider.SetProductName("Bloom");

                Dictionary<string, string> propertiesThatGoWithEveryEvent = ErrorReport.GetStandardProperties();
                propertiesThatGoWithEveryEvent.Remove("MachineName");
                propertiesThatGoWithEveryEvent.Remove("UserName");
                propertiesThatGoWithEveryEvent.Remove("UserDomainName");
                propertiesThatGoWithEveryEvent.Add("channel", ApplicationUpdateSupport.ChannelName);

            #if DEBUG
                using(
                    new DesktopAnalytics.Analytics("sje2fq26wnnk8c2kzflf", RegistrationDialog.GetAnalyticsUserInfo(),
                        propertiesThatGoWithEveryEvent, false))
                    _supressRegistrationDialog = true;
            #else
                string feedbackSetting = System.Environment.GetEnvironmentVariable("FEEDBACK");

                //default is to allow tracking
                var allowTracking = string.IsNullOrEmpty(feedbackSetting) || feedbackSetting.ToLowerInvariant() == "yes"
                    || feedbackSetting.ToLowerInvariant() == "true";
                _supressRegistrationDialog = _supressRegistrationDialog || !allowTracking;

                using (new DesktopAnalytics.Analytics("c8ndqrrl7f0twbf2s6cv", RegistrationDialog.GetAnalyticsUserInfo(), propertiesThatGoWithEveryEvent, allowTracking))

            #endif

                {
                    // do not show the registration dialog if bloom was started for a special purpose
                    if (args.Length > 0)
                        _supressRegistrationDialog = true;

                    if (args.Length == 1 && args[0].ToLowerInvariant().EndsWith(".bloompack"))
                    {
                        SetUpErrorHandling();
                        using (_applicationContainer = new ApplicationContainer())
                        {
                            SetUpLocalization();

                            var path = args[0];
                            // This allows local links to bloom packs.
                            if (path.ToLowerInvariant().StartsWith("bloom://"))
                            {
                                path = path.Substring("bloom://".Length);
                                if (!RobustFile.Exists(path))
                                {
                                    path = FileLocator.GetFileDistributedWithApplication(true, path);
                                    if (!RobustFile.Exists(path))
                                        return 1;
                                }
                            }
                            using (var dlg = new BloomPackInstallDialog(path))
                            {
                                dlg.ShowDialog();
                                if (dlg.ExitWithoutRunningBloom)
                                    return 1;
                            }
                        }
                    }
                    if (IsBloomBookOrder(args))
                    {
                        HandleDownload(args[0]);
                        // If another instance is running, this one has served its purpose and can exit right away. Otherwise,
                        // carry on with starting up normally.  See https://silbloom.myjetbrains.com/youtrack/issue/BL-3822.
                        if (!UniqueToken.AcquireTokenQuietly(_mutexId))
                            return 0;
                    }
                    else
                    {
                        // Check whether another instance of Bloom is running.  That should happen only when downloading a book because
                        // BloomLibrary starts a new Bloom process even when one is already running.  But that is taken care of in the
                        // other branch of this if/else.  So quit if we find another instance of Bloom running at this point.
                        // (A message will pop up to tell the user about this situation if it happens.)
                        if (!UniqueToken.AcquireToken(_mutexId, "Bloom"))
                            return 1;
                    }
                    OldVersionCheck();

                    SetUpErrorHandling();

                    using (_applicationContainer = new ApplicationContainer())
                    {
                        if (args.Length == 2 && args[0].ToLowerInvariant() == "--upload")
                        {
                            // A special path to upload chunks of stuff. This is not currently documented and is not very robust.
                            // - User must log in before running this
                            // - For best results each bloom book needs to be part of a collection in its parent folder
                            // - little error checking (e.g., we don't apply the usual constraints that a book must have title and licence info)
                            SetUpLocalization();
                            Browser.SetUpXulRunner();
                            Browser.XulRunnerShutdown += OnXulRunnerShutdown;
                            var transfer = new BookTransfer(new BloomParseClient(), ProjectContext.CreateBloomS3Client(),
                                _applicationContainer.BookThumbNailer, new BookDownloadStartingEvent()) /*not hooked to anything*/;
                            transfer.UploadFolder(args[1], _applicationContainer);
                            return 1;
                        }

                        InstallerSupport.MakeBloomRegistryEntries(args);
                        BookDownloadSupport.EnsureDownloadFolderExists();

                        SetUpLocalization();

                        if (args.Length == 1 && !IsInstallerLaunch(args))
                        {
                            Debug.Assert(args[0].ToLowerInvariant().EndsWith(".bloomcollection")); // Anything else handled above.
                            if (CollectionChoosing.OpenCreateCloneControl.ReportIfInvalidCollectionToEdit(args[0]))
                                return 1;
                            Settings.Default.MruProjects.AddNewPath(args[0]);
                        }

                        if (args.Length > 0 && args[0] == "--rename")
                        {
                            try
                            {
                                var pathToNewCollection = CollectionSettings.RenameCollection(args[1], args[2]);
                                //MessageBox.Show("Your collection has been renamed.");
                                Settings.Default.MruProjects.AddNewPath(pathToNewCollection);
                            }
                            catch (ApplicationException error)
                            {
                                SIL.Reporting.ErrorReport.NotifyUserOfProblem(error, error.Message);
                                Environment.Exit(-1);
                            }
                            catch (Exception error)
                            {
                                SIL.Reporting.ErrorReport.NotifyUserOfProblem(error,
                                    "Bloom could not finish renaming your collection folder. Restart your computer and try again.");
                                Environment.Exit(-1);
                            }

                        }
                        Browser.SetUpXulRunner();
                        Browser.XulRunnerShutdown += OnXulRunnerShutdown;
            #if DEBUG
                        StartDebugServer();
            #endif

                        if (!BloomIntegrityDialog.CheckIntegrity())
                        {
                            Environment.Exit(-1);
                        }

                        LocalizationManager.SetUILanguage(Settings.Default.UserInterfaceLanguage, false);

                        // BL-1258: sometimes the newly installed fonts are not available until after Bloom restarts
                        // We don't even want to try to install fonts if we are installed by an admin for all users;
                        // it will have been installed already as part of the allUsers install.
                        if ((!InstallerSupport.SharedByAllUsers()) && FontInstaller.InstallFont("AndikaNewBasic"))
                            return 1;

                        Run();
                    }
                }
            }
            finally
            {
                // Check memory one final time for the benefit of developers.  The user won't see anything.
                SIL.Windows.Forms.Reporting.MemoryManagement.CheckMemory(true, "Bloom finished and exiting", false);
                UniqueToken.ReleaseToken();
            }
            return 0;
        }