Пример #1
0
        private string CreateTitle(OutputSizeInfo size)
        {
            if (size.Par.Num == size.Par.Den)
            {
                return(string.Format(PreviewRes.PreviewWindowTitleSimple, size.OutputWidth, size.OutputHeight));
            }
            else
            {
                int width     = size.OutputWidth;
                int height    = size.OutputHeight;
                int parWidth  = size.Par.Num;
                int parHeight = size.Par.Den;

                if (parWidth <= 0 || parHeight <= 0)
                {
                    StaticResolver.Resolve <IAppLogger>().LogError("HandBrake returned a negative pixel aspect ratio. Cannot show preview.");
                    return(PreviewRes.NoVideoSourceTitle);
                }

                return(string.Format(
                           PreviewRes.PreviewWindowTitleComplex,
                           Math.Round(width * ((double)parWidth / parHeight)),
                           height,
                           width,
                           height));
            }
        }
Пример #2
0
        public IList <string> GetFileNames(string initialDirectory)
        {
            var dialog = new Microsoft.Win32.OpenFileDialog();

            dialog.Multiselect = true;

            if (!string.IsNullOrEmpty(initialDirectory))
            {
                try
                {
                    string fullDirectory = Path.GetFullPath(initialDirectory);

                    if (Directory.Exists(fullDirectory))
                    {
                        dialog.InitialDirectory = fullDirectory;
                    }
                }
                catch (NotSupportedException)
                {
                    StaticResolver.Resolve <IAppLogger>().Log("Could not recognize initial directory " + initialDirectory);
                }
            }

            bool?result = dialog.ShowDialog();

            if (result == false)
            {
                return(null);
            }

            return(new List <string>(dialog.FileNames));
        }
Пример #3
0
        public static FolderType GetFolderType(string directory)
        {
            try
            {
                var directoryInfo = new DirectoryInfo(directory);
                if (!directoryInfo.Exists)
                {
                    return(FolderType.NonExistent);
                }

                if (File.Exists(Path.Combine(directory, @"VIDEO_TS.IFO")) || File.Exists(Path.Combine(directory, @"VIDEO_TS\VIDEO_TS.IFO")))
                {
                    return(FolderType.Dvd);
                }

                if (Directory.Exists(Path.Combine(directory, "BDMV")))
                {
                    return(FolderType.BluRay);
                }
            }
            catch (UnauthorizedAccessException ex)
            {
                StaticResolver.Resolve <IAppLogger>().Log("Could not determine folder type: " + ex);
            }

            return(FolderType.VideoFiles);
        }
Пример #4
0
        public static void RegisterGlobalHotkeys(this Window window)
        {
            var converter = new KeyConverter();

            foreach (var definition in WindowManager.Definitions.Where(d => d.InputGestureText != null))
            {
                if (definition.InputGestureText.Contains("+"))
                {
                    string[] parts = definition.InputGestureText.Split('+');
                    if (parts.Length == 2)
                    {
                        Type windowViewModelType = definition.ViewModelType;

                        var key = (Key)converter.ConvertFrom(parts[1]);

                        ReactiveCommand <Unit, Unit> openCommand = ReactiveCommand.Create(() =>
                        {
                            windowManager.OpenOrFocusWindow(windowViewModelType);
                        });

                        window.InputBindings.Add(new InputBinding(
                                                     openCommand,
                                                     new KeyGesture(key, ModifierKeys.Control)));
                    }
                    else
                    {
                        throw new ArgumentException("InputGestureText not recognized: " + definition.InputGestureText);
                    }
                }
            }

            window.InputBindings.Add(new InputBinding(windowManager.CreateOpenCommand(typeof(OptionsDialogViewModel), openAsDialog: true), new KeyGesture(Key.G, ModifierKeys.Control)));
            window.InputBindings.Add(new InputBinding(StaticResolver.Resolve <ProcessingService>().Encode, new KeyGesture(Key.F5)));
        }
Пример #5
0
        private void BuildSeed(IDbContext _context)
        {
            //_context.BeginTrans();
            var admin = new User
            {
                UserName    = "******",
                Password    = "******",
                DisplayName = "管理员"
            };
            var administrators = new UserRole
            {
                RoleName = "管理员组"
            };

            _userRepo            = StaticResolver.Resolve <IRepository <User> >();
            _userRoleRepo        = StaticResolver.Resolve <IRepository <UserRole> >();
            _userUserRoleMapRepo = StaticResolver.Resolve <IRepository <User_UserRole_Map> >();
            _context.BeginTrans();
            _userRepo.Insert(admin);
            _userRoleRepo.Insert(administrators);
            _context.SaveChanges();
            var relation = new User_UserRole_Map
            {
                UserId     = admin.Id,
                UserRoleId = administrators.Id
            };

            _userUserRoleMapRepo.Insert(relation);
            //_context.SaveChanges();
        }
Пример #6
0
        public void PlayTitle(string discPath, int title)
        {
            string executablePath = this.PlayerExecutable;

            if (!File.Exists(executablePath))
            {
                string message = string.Format(
                    MiscRes.CouldNotFindVideoPlayerError,
                    this.Display);
                StaticResolver.Resolve <IMessageBoxService>().Show(message);
                return;
            }

            if (!discPath.EndsWith(@"\", StringComparison.Ordinal))
            {
                discPath += @"\";
            }

            try
            {
                this.PlayTitleInternal(executablePath, discPath, title);
            }
            catch (Exception exception)
            {
                string message =
                    MiscRes.ErrorPlayingSource + Environment.NewLine + Environment.NewLine + exception.Message;
                StaticResolver.Resolve <IMessageBoxService>().Show(message);
            }
        }
Пример #7
0
        private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            object selectedItem = e.NewValue;

            if (selectedItem == null || selectedItem is PresetFolderViewModel)
            {
                // If it's a folder that got "selected" we ignore it and leave the previous preset selected for real
                return;
            }

            if (PresetComboBox.PresetComboOpen)
            {
                // If inside a combo box the combo box binding on close will handle it.
                return;
            }

            DispatchUtilities.BeginInvoke(() =>
            {
                // This might be in the layout phase. Invoke on dispatcher to process cleanly.
                var newSelectedPreset = (PresetViewModel)selectedItem;
                if (this.presetsService.TryUpdateSelectedPreset(newSelectedPreset))
                {
                    StaticResolver.Resolve <Main>().ReadTextToScreenReader(newSelectedPreset.DisplayName);
                }
            });
        }
Пример #8
0
        private void ExecuteAction()
        {
            var processingService = StaticResolver.Resolve <ProcessingService>();

            processingService.EncodeCompleteAction = processingService.EncodeCompleteActions.Single(a => a.ActionType == EncodeCompleteActionType.DoNothing);

            switch (actionType)
            {
            case EncodeCompleteActionType.Sleep:
                this.systemOperations.Sleep();
                break;

            case EncodeCompleteActionType.LogOff:
                this.systemOperations.LogOff();
                break;

            case EncodeCompleteActionType.Shutdown:
                this.systemOperations.ShutDown();
                break;

            case EncodeCompleteActionType.Hibernate:
                this.systemOperations.Hibernate();
                break;
            }
        }
Пример #9
0
        private static void HandleCriticalFileError()
        {
            var messageService = StaticResolver.Resolve <IMessageBoxService>();

            messageService.Show(CommonRes.FileFailureErrorMessage, CommonRes.FileFailureErrorTitle, MessageBoxButton.OK);
            Environment.Exit(1);
        }
Пример #10
0
        /// <summary>
        /// Opens all tracked windows that are open according to config.
        /// </summary>
        /// <remarks>Call at app startup.</remarks>
        public void OpenTrackedWindows()
        {
            bool windowOpened = false;

            foreach (var definition in Definitions.Where(d => d.IsOpenConfigKey != null))
            {
                bool canOpen = true;
                if (definition.CanOpen != null)
                {
                    IDisposable disposable = definition.CanOpen().Subscribe(value =>
                    {
                        canOpen = value;
                    });

                    disposable.Dispose();
                }

                if (canOpen && Config.Get <bool>(definition.IsOpenConfigKey))
                {
                    this.OpenWindow(StaticResolver.Resolve(definition.ViewModelType), userInitiated: false);
                    windowOpened = true;
                }
            }

            if (windowOpened)
            {
                this.Focus(this.mainViewModel);
            }
        }
Пример #11
0
 public static ConnectionMultiplexer GetMuxer()
 {
     if (_muxer == null || !_muxer.IsConnected)
     {
         var config = StaticResolver.Resolve <AppConfig>();
         _muxer = ConnectionMultiplexer.Connect(config.RedisCachingConnectionString);
     }
     return(_muxer);
 }
Пример #12
0
        public void Scan(string source)
        {
            var mainVM = StaticResolver.Resolve <MainViewModel>();

            DispatchUtilities.Invoke(() =>
            {
                mainVM.ScanFromAutoplay(source);
            });
        }
Пример #13
0
        public void Activate(string appUserModelId, string invokedArgs, NOTIFICATION_USER_INPUT_DATA[] data, uint dataCount)
        {
            StaticResolver.Resolve <Main>().RestoreWindow();

            DispatchUtilities.BeginInvoke(() =>
            {
                StaticResolver.Resolve <Main>().Activate();
            });
        }
Пример #14
0
        public void Encode(string source, string destination, string preset, string picker)
        {
            var processingService = StaticResolver.Resolve <ProcessingService>();

            DispatchUtilities.Invoke(() =>
            {
                processingService.Process(source, destination, preset, picker);
            });
        }
        private static void TestTryResolveFail(Func <AnyContainerBase> factory)
        {
            AnyContainerBase container = factory();

            StaticResolver.SetResolver(container);

            ILogger logger = StaticResolver.TryResolve <ILogger>();

            Assert.IsNull(logger);
        }
Пример #16
0
        public void OnVideoFailed()
        {
            this.PlayingPreview = false;
            MessageBoxResult result = StaticResolver.Resolve <IMessageBoxService>().Show(this, PreviewRes.VideoErrorMessage, PreviewRes.VideoErrorTitle, MessageBoxButton.YesNo);

            if (result == MessageBoxResult.Yes)
            {
                FileService.Instance.PlayVideo(this.previewFilePath);
            }
        }
Пример #17
0
        private void ScanNextJob()
        {
            SourcePath path = this.pathsToScan[this.currentJobIndex];

            IScanProxy scanProxy = Utilities.CreateScanProxy();

            scanProxy.ScanProgress += (sender, args) =>
            {
                lock (this.currentJobIndexLock)
                {
                    this.currentJobProgress = args.Value;
                    this.RaisePropertyChanged(nameof(this.Progress));
                }
            };

            scanProxy.ScanCompleted += (sender, args) =>
            {
                if (args.Value != null)
                {
                    JsonScanObject scanObject = JsonConvert.DeserializeObject <JsonScanObject>(args.Value);
                    this.ScanResults.Add(new ScanResult {
                        SourcePath = path, VideoSource = scanObject.ToVideoSource()
                    });
                }
                else
                {
                    this.ScanResults.Add(new ScanResult {
                        SourcePath = path
                    });
                }

                lock (this.currentJobIndexLock)
                {
                    this.currentJobIndex++;
                    this.currentJobProgress = 0;
                    this.RaisePropertyChanged(nameof(this.Progress));

                    if (this.ScanFinished)
                    {
                        DispatchUtilities.BeginInvoke(() =>
                        {
                            this.Cancel.Execute(null);
                        });
                    }
                    else
                    {
                        this.ScanNextJob();
                    }
                }
            };

            var scanLogger = StaticResolver.Resolve <AppLoggerFactory>().ResolveRemoteScanLogger(path.Path);

            scanProxy.StartScan(path.Path, scanLogger);
        }
Пример #18
0
        public override bool OnClosing()
        {
            Config.OptionsDialogLastTab = this.SelectedTabIndex;

            if (this.DialogResult)
            {
                StaticResolver.Resolve <OutputPathService>().NotifyDefaultOutputFolderChanged();
            }

            return(base.OnClosing());
        }
        private static void TestTryResolveSucceed(Func <AnyContainerBase> factory)
        {
            AnyContainerBase container = factory();

            container.RegisterSingleton <ILogger, Logger>();

            StaticResolver.SetResolver(container);

            ILogger logger = StaticResolver.TryResolve <ILogger>();

            Assert.IsNotNull(logger);
        }
Пример #20
0
        public void SetDatabaseInitializer()
        {
            var dbcontext = StaticResolver.Resolve <IDbContext>();

            if (dbcontext.db().EnsureCreated())
            {
                BuildSeed(dbcontext);
            }
            else
            {
                dbcontext.db().Migrate();
            }
        }
Пример #21
0
        private static void OnPreviewDrop(object sender, DragEventArgs dragEventArgs)
        {
            var data = dragEventArgs.Data as DataObject;

            if (data != null && data.ContainsFileDropList())
            {
                StringCollection itemList = data.GetFileDropList();
                var  listView             = dragEventArgs.Source as ListView;
                bool alwaysQueue          = listView?.Name == "queueView";

                StaticResolver.Resolve <MainViewModel>().HandlePaths(itemList.Cast <string>().ToList(), alwaysQueue);
            }
        }
Пример #22
0
 public static IDatabase GetDb()
 {
     if (_db == null || !_muxer.IsConnected)
     {
         var config = StaticResolver.Resolve <AppConfig>();
         if (_muxer == null || !_muxer.IsConnected)
         {
             _muxer = ConnectionMultiplexer.Connect(config.RedisCachingConnectionString);
         }
         _db = _muxer.GetDatabase(config.RedisCachingDataBaseId);
     }
     return(_db);
 }
Пример #23
0
        public static void SetUp()
        {
            var container = new DryIocAnyContainer();

            container.RegisterSingleton <IDriveService, DriveService>();
            container.RegisterSingleton <IAppThemeService, AppThemeService>();

            if (Utilities.IsRunningAsAppx)
            {
                container.RegisterSingleton <IToastNotificationService, ToastNotificationService>();
            }
            else
            {
                container.RegisterSingleton <IToastNotificationService, StubToastNotificationService>();
            }

            container.RegisterSingleton <IUpdater, Updater>();
            container.RegisterSingleton <IMessageBoxService, MessageBoxService>();
            container.RegisterSingleton <IAppLogger, MainAppLogger>();
            container.RegisterSingleton <IFileService, FileService>();
            container.RegisterSingleton <IPresetImportExport, PresetImportExport>();
            container.RegisterSingleton <IQueueImportExport, QueueImportExport>();
            container.RegisterSingleton <IProcesses, Processes>();
            container.RegisterSingleton <IProcessAutoPause, ProcessAutoPause>();
            container.RegisterSingleton <ISystemOperations, SystemOperations>();
            container.RegisterSingleton <IWindowManager, WindowManager>();

            container.RegisterSingleton <OutputPathService>();
            container.RegisterSingleton <OutputSizeService>();
            container.RegisterSingleton <PresetsService>();
            container.RegisterSingleton <PickersService>();
            container.RegisterSingleton <ProcessingService>();
            container.RegisterSingleton <SubtitlesService>();
            container.RegisterSingleton <StatusService>();
            container.RegisterSingleton <PreviewUpdateService>();
            container.RegisterSingleton <PreviewImageService>();
            container.RegisterSingleton <ClipboardService>();
            container.RegisterSingleton <TrayService>();

            container.RegisterSingleton <EncodingWindowViewModel>();

            container.RegisterTransient <PreviewWindowViewModel>();
            container.RegisterTransient <PickerWindowViewModel>();
            container.RegisterTransient <OptionsDialogViewModel>();
            container.RegisterTransient <LogWindowViewModel>();
            container.RegisterTransient <QueueTitlesWindowViewModel>();
            container.RegisterTransient <EncodeDetailsWindowViewModel>();

            StaticResolver.SetResolver(container);
            Container = container;
        }
Пример #24
0
        public static void Initialize()
        {
            mainThreadId = Thread.CurrentThread.ManagedThreadId;

            int databaseVersion = DatabaseConfig.Version;

            if (databaseVersion > Utilities.CurrentDatabaseVersion)
            {
                databaseVersion = HandleTooHighDatabaseVersion(databaseVersion);
            }

            if (databaseVersion == Utilities.CurrentDatabaseVersion)
            {
                return;
            }

            BackupDatabaseFile(databaseVersion);

            using (SQLiteTransaction transaction = Connection.BeginTransaction())
            {
                // Update DB schema
                if (databaseVersion < 35)
                {
                    string message = string.Format(CultureInfo.CurrentCulture, MainRes.DataTooOldRunVidCoderVersion, "3.15");
                    StaticResolver.Resolve <IMessageBoxService>().Show(message);
                    StaticResolver.Resolve <IMessageBoxService>().Show(message);
                    throw new InvalidOperationException("Database too old");
                }

                if (databaseVersion < 36)
                {
                    UpgradeDatabaseTo36();
                }

                // Update encoding profiles if we need to. Everything is at least 28 now from the JSON upgrade.
                int oldDatabaseVersion = Math.Max(databaseVersion, 28);
                if (oldDatabaseVersion < Utilities.LastUpdatedEncodingProfileDatabaseVersion)
                {
                    UpgradeEncodingProfiles(oldDatabaseVersion);
                }

                if (oldDatabaseVersion < Utilities.LastUpdatedPickerDatabaseVersion)
                {
                    UpgradePickers(oldDatabaseVersion);
                }

                SetDatabaseVersionToLatest();
                transaction.Commit();
            }
        }
Пример #25
0
        public void Execute()
        {
            var settings = StaticResolver.Resolve <DataSettings>();

            if (settings != null && settings.IsValid())
            {
                var provider = StaticResolver.Resolve <IDataProvider>();
                if (provider == null)
                {
                    throw new SusException("No IDataProvider found");
                }
                provider.SetDatabaseInitializer();
            }
        }
Пример #26
0
        public RedisCacheManager(AppConfig config)
        {
            if (String.IsNullOrEmpty(config.RedisCachingConnectionString))
            {
                throw new Exception("Redis connection string is empty");
            }

            //this._muxer = ConnectionMultiplexer.Connect(config.RedisCachingConnectionString);

            //this._db = _muxer.GetDatabase(config.RedisCachingDataBaseId);
            this._perRequestCacheManager = StaticResolver.Resolve <ICacheManager>();

            //var logger = NLog.LogManager.GetCurrentClassLogger();
            //logger.Debug("初始化Redis--1");
        }
Пример #27
0
        /// <summary>
        /// Creates a command to open a window.
        /// </summary>
        /// <param name="viewModelType">The type of window viewmodel to open.</param>
        /// <param name="openAsDialog">True to open as a dialog, false to open as a window.</param>
        /// <returns>The command.</returns>
        public ICommand CreateOpenCommand(Type viewModelType, bool openAsDialog = false)
        {
            var command = ReactiveCommand.Create(() =>
            {
                if (openAsDialog)
                {
                    this.OpenDialog(StaticResolver.Resolve(viewModelType));
                }
                else
                {
                    this.OpenOrFocusWindow(viewModelType);
                }
            });

            return(command);
        }
Пример #28
0
        private static void OnPreviewDragOver(object sender, DragEventArgs dragEventArgs)
        {
            if (StaticResolver.Resolve <MainViewModel>().VideoSourceState == VideoSourceState.Scanning)
            {
                var data = dragEventArgs.Data as DataObject;
                if (data != null)
                {
                    dragEventArgs.Effects = DragDropEffects.None;
                    dragEventArgs.Handled = true;
                }

                return;
            }

            Utilities.SetDragIcon(dragEventArgs);
        }
Пример #29
0
        public void CreateSubFolder(PresetFolderViewModel folderViewModel)
        {
            var dialogVM = new ChooseNameViewModel(EncodingRes.ChooseNameSubfolder, new List <string>());

            dialogVM.Name = EncodingRes.DefaultPresetFolderName;
            var windowManager = StaticResolver.Resolve <IWindowManager>();

            windowManager.OpenDialog(dialogVM, windowManager.Find <EncodingWindowViewModel>());

            if (dialogVM.DialogResult)
            {
                string subfolderName = dialogVM.Name;

                PresetFolder newFolder = PresetFolderStorage.AddFolder(subfolderName, folderViewModel.Id);
                folderViewModel.AddSubfolder(PresetFolderViewModel.FromPresetFolder(newFolder, this));
            }
        }
Пример #30
0
        private static void BackupDatabaseFile(int databaseVersion)
        {
            Connection.Close();
            connection = null;

            try
            {
                string backupFilePath = GetBackupDatabaseFilePath(databaseVersion);
                Directory.CreateDirectory(BackupDatabaseFolder);

                File.Copy(DatabaseFile, backupFilePath, overwrite: true);
            }
            catch (Exception exception)
            {
                StaticResolver.Resolve <IAppLogger>().Log("Could not backup database file:" + Environment.NewLine + exception);
            }
        }
 private static ComponentRegistration<object> ApplyResolver(ComponentRegistration<object> registration, StaticResolver resolver)
 {
     return registration.ImplementedBy(resolver.Target);
 }
 private static IRegistrationBuilder<object, IConcreteActivatorData, SingleRegistrationStyle> ApplyResolver(ContainerBuilder builder, StaticResolver resolver)
 {
     return builder.RegisterType(resolver.Target);
 }
 private static ConfiguredInstance ApplyResolver(GenericFamilyExpression builder, StaticResolver resolver)
 {
     return builder.Add(resolver.Target);
 }