Beispiel #1
0
        public static void Main(string[] args)
        {
            CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
            Application.Init();
            QSMain.GuiThread = System.Threading.Thread.CurrentThread;
            applicationInfo  = new ApplicationVersionInfo();

            #region Первоначальная настройка обработки ошибок
            SingletonErrorReporter.Initialize(ReportWorker.GetReportService(), applicationInfo, new LogService(), null, false, null);
            var errorMessageModelFactoryWithoutUserService = new DefaultErrorMessageModelFactory(SingletonErrorReporter.Instance, null, null);
            var exceptionHandler = new DefaultUnhandledExceptionHandler(errorMessageModelFactoryWithoutUserService, applicationInfo);

            exceptionHandler.SubscribeToUnhandledExceptions();
            exceptionHandler.GuiThread = System.Threading.Thread.CurrentThread;
            #endregion

            //FIXME Удалить после того как будет удалена зависимость от библиотеки QSProjectLib
            QSMain.ProjectPermission = new System.Collections.Generic.Dictionary <string, UserPermission>();

            CreateProjectParam();
            ConfigureViewModelWidgetResolver();
            ConfigureJournalColumnsConfigs();

            QSMain.SetupFromArgs(args);
            QS.Project.Search.GtkUI.SearchView.QueryDelay = 1500;

            Gtk.Settings.Default.SetLongProperty("gtk-button-images", 1, "");
            // Создаем окно входа
            Login LoginDialog = new Login();
            LoginDialog.Logo = Gdk.Pixbuf.LoadFromResource("Vodovoz.icons.logo.png");
            LoginDialog.SetDefaultNames("Vodovoz");
            LoginDialog.DefaultLogin  = "******";
            LoginDialog.DefaultServer = "sql.vod.qsolution.ru";
            LoginDialog.UpdateFromGConf();

            ResponseType LoginResult;
            LoginResult = (ResponseType)LoginDialog.Run();
            if (LoginResult == ResponseType.DeleteEvent || LoginResult == ResponseType.Cancel)
            {
                return;
            }

            LoginDialog.Destroy();

            PerformanceHelper.StartMeasurement("Замер запуска приложения");
            GetPermissionsSettings();
            //Настройка базы
            CreateBaseConfig();
            PerformanceHelper.AddTimePoint(logger, "Закончена настройка базы");
            VodovozGtkServicesConfig.CreateVodovozDefaultServices();
            ParametersProvider.Instance.RefreshParameters();

            #region Настройка обработки ошибок c параметрами из базы и сервисами
            var baseParameters = new BaseParametersProvider();
            SingletonErrorReporter.Initialize(
                ReportWorker.GetReportService(),
                applicationInfo,
                new LogService(),
                LoginDialog.BaseName,
                LoginDialog.BaseName == baseParameters.GetDefaultBaseForErrorSend(),
                baseParameters.GetRowCountForErrorLog()
                );

            var errorMessageModelFactoryWithUserService = new DefaultErrorMessageModelFactory(SingletonErrorReporter.Instance, ServicesConfig.UserService, UnitOfWorkFactory.GetDefaultFactory);
            exceptionHandler.InteractiveService       = ServicesConfig.InteractiveService;
            exceptionHandler.ErrorMessageModelFactory = errorMessageModelFactoryWithUserService;
            //Настройка обычных обработчиков ошибок.
            exceptionHandler.CustomErrorHandlers.Add(CommonErrorHandlers.MySqlException1055OnlyFullGroupBy);
            exceptionHandler.CustomErrorHandlers.Add(CommonErrorHandlers.MySqlException1366IncorrectStringValue);
            exceptionHandler.CustomErrorHandlers.Add(CommonErrorHandlers.NHibernateFlushAfterException);
            exceptionHandler.CustomErrorHandlers.Add(ErrorHandlers.NHibernateStaleObjectStateExceptionHandler);
            exceptionHandler.CustomErrorHandlers.Add(ErrorHandlers.MySqlExceptionConnectionTimeoutHandler);
            exceptionHandler.CustomErrorHandlers.Add(ErrorHandlers.MySqlExceptionAuthHandler);

            #endregion

            //Настройка карты
            GMapProvider.UserAgent = String.Format("{0}/{1} used GMap.Net/{2} ({3})",
                                                   applicationInfo.ProductName,
                                                   applicationInfo.Version.VersionToShortString(),
                                                   Assembly.GetAssembly(typeof(GMapProvider)).GetName().Version.VersionToShortString(),
                                                   Environment.OSVersion.VersionString
                                                   );
            GMapProvider.Language = GMap.NET.LanguageType.Russian;
            PerformanceHelper.AddTimePoint(logger, "Закончена настройка карты.");

            DatePicker.CalendarFontSize      = 16;
            DateRangePicker.CalendarFontSize = 16;

            OsmWorker.ServiceHost = "osm.vod.qsolution.ru";
            OsmWorker.ServicePort = 7073;

            QS.Osm.Osrm.OsrmMain.ServerUrl = "http://osrm.vod.qsolution.ru:5000";

            PerformanceHelper.StartPointsGroup("Главное окно");

            var baseVersionChecker = new CheckBaseVersion(applicationInfo, new ParametersService(QS.Project.DB.Connection.ConnectionDB));
            if (baseVersionChecker.Check())
            {
                ServicesConfig.CommonServices.InteractiveService.ShowMessage(ImportanceLevel.Warning, baseVersionChecker.TextMessage, "Несовпадение версии");
                return;
            }
            QSMain.CheckServer(null);             // Проверяем настройки сервера

            PerformanceHelper.AddTimePoint("Закончена загрузка параметров базы и проверка версии.");

            AutofacClassConfig();
            PerformanceHelper.AddTimePoint("Закончена настройка AutoFac.");
            if (QSMain.User.Login == "root")
            {
                string        Message = "Вы зашли в программу под администратором базы данных. У вас есть только возможность создавать других пользователей.";
                MessageDialog md      = new MessageDialog(null, DialogFlags.Modal,
                                                          MessageType.Info,
                                                          ButtonsType.Ok,
                                                          Message);
                md.Run();
                md.Destroy();
                UsersDialog usersDlg = new UsersDialog(ServicesConfig.InteractiveService);
                usersDlg.Show();
                usersDlg.Run();
                usersDlg.Destroy();
                return;
            }
            else
            {
                if (ChangePassword(LoginDialog.BaseName) && CanLogin())
                {
                    StartMainWindow(LoginDialog.BaseName);
                }
                else
                {
                    return;
                }
            }

            PerformanceHelper.EndPointsGroup();

            PerformanceHelper.AddTimePoint(logger, "Закончен старт SAAS. Конец загрузки.");

            QSSaaS.Session.StartSessionRefresh();

            PerformanceHelper.AddTimePoint(logger, "Закончен старт SAAS. Конец загрузки.");
            PerformanceHelper.Main.PrintAllPoints(logger);

            Application.Run();
            QSSaaS.Session.StopSessionRefresh();
            ClearTempDir();
        }