public MainWindow() { Instance = this; InitializeComponent(); var mainModel = ServiceProvider.Get <MainModel>(); mainModel.Init(!App.CmdOptions.NoPersist, !App.CmdOptions.Reset); var hotkeySetup = ServiceProvider.Get <HotkeySetup>(); hotkeySetup.Setup(); ServiceProvider.Get <TimerModel>().Init(); Loaded += (Sender, Args) => { RepositionWindowIfOutside(); WebCamWindow.Instance.SetupWebcamPreview(); hotkeySetup.ShowUnregistered(); mainModel.ViewLoaded(); }; if (App.CmdOptions.Tray || ServiceProvider.Get <Settings>().Tray.MinToTrayOnStartup) { Hide(); } Closing += (Sender, Args) => { if (!TryExit()) { Args.Cancel = true; } }; }
IVideoWriterItem HandleVideoEncoder(StartCmdOptions StartOptions, out IVideoWriterProvider VideoWriterKind) { var selected = _videoWriterProviders .Select(M => new { kind = M, writer = M.ParseCli(StartOptions.Encoder) }) .FirstOrDefault(M => M.writer != null); if (selected != null) { VideoWriterKind = selected.kind; return(selected.writer); } var sharpAviWriterProvider = ServiceProvider.Get <SharpAviWriterProvider>(); // Steps in video if (StartOptions.Encoder == "steps:video") { _settings.Video.RecorderMode = RecorderMode.Steps; VideoWriterKind = null; return(new StepsVideoWriterItem(sharpAviWriterProvider.First())); } // Steps in set of images if (StartOptions.Encoder == "steps:images") { _settings.Video.RecorderMode = RecorderMode.Steps; VideoWriterKind = null; return(new ImageFolderWriterItem()); } VideoWriterKind = sharpAviWriterProvider; return(sharpAviWriterProvider.First()); }
IVideoWriterItem HandleVideoEncoder(StartCmdOptions StartOptions, out IVideoWriterProvider VideoWriterKind) { var selected = _videoWriterProviders .Select(M => new { kind = M, writer = M.ParseCli(StartOptions.Encoder) }) .FirstOrDefault(M => M.writer != null); if (selected != null) { VideoWriterKind = selected.kind; return(selected.writer); } var sharpAviWriterProvider = ServiceProvider.Get <SharpAviWriterProvider>(); VideoWriterKind = sharpAviWriterProvider; return(sharpAviWriterProvider.First()); }
public void Run() { if (!File.Exists(FileName)) { Console.WriteLine("File not found"); return; } switch (Service) { case UploadService.imgur: var imgSystem = ServiceProvider.Get <IImagingSystem>(); var img = imgSystem.LoadBitmap(FileName); var uploader = ServiceProvider.Get <IImageUploader>(); // TODO: Show progress (on a single line) var result = uploader.Upload(img, ImageFormats.Png, P => { }).Result; Console.WriteLine(result.Url); break; } }
static void Main(string[] Args) { User32.SetProcessDPIAware(); ServiceProvider.LoadModule(new CoreModule()); ServiceProvider.LoadModule(new FakesModule()); ServiceProvider.LoadModule(new VerbsModule()); var verbTypes = ServiceProvider .Get <IEnumerable <ICmdlineVerb> >() .Select(M => M.GetType()) .ToArray(); Parser.Default.ParseArguments(Args, verbTypes) .WithParsed((ICmdlineVerb Verb) => { // Always display Banner Banner(); Verb.Run(); }); }
static void HandleVideoEncoder(VideoWritersViewModel VideoWritersViewModel, StartCmdOptions StartOptions) { if (StartOptions.Encoder == null) { return; } // FFmpeg if (FFmpegService.FFmpegExists && Regex.IsMatch(StartOptions.Encoder, @"^ffmpeg:\d+$")) { var index = int.Parse(StartOptions.Encoder.Substring(7)); VideoWritersViewModel.SelectedVideoWriterKind = ServiceProvider.Get <FFmpegWriterProvider>(); if (index < VideoWritersViewModel.AvailableVideoWriters.Count) { VideoWritersViewModel.SelectedVideoWriter = VideoWritersViewModel.AvailableVideoWriters[index]; } } // SharpAvi else if (ServiceProvider.FileExists("SharpAvi.dll") && Regex.IsMatch(StartOptions.Encoder, @"^sharpavi:\d+$")) { var index = int.Parse(StartOptions.Encoder.Substring(9)); VideoWritersViewModel.SelectedVideoWriterKind = ServiceProvider.Get <SharpAviWriterProvider>(); if (index < VideoWritersViewModel.AvailableVideoWriters.Count) { VideoWritersViewModel.SelectedVideoWriter = VideoWritersViewModel.AvailableVideoWriters[index]; } } // Gif else if (StartOptions.Encoder == "gif") { VideoWritersViewModel.SelectedVideoWriterKind = ServiceProvider.Get <GifWriterProvider>(); } }
public MainWindow() { Instance = this; InitializeComponent(); _helper = ServiceProvider.Get <MainWindowHelper>(); _helper.MainViewModel.Init(!App.CmdOptions.NoPersist, !App.CmdOptions.Reset); _helper.HotkeySetup.Setup(); _helper.TimerModel.Init(); Loaded += (Sender, Args) => { RepositionWindowIfOutside(); ServiceProvider.Get <WebcamPage>().SetupPreview(); _helper.HotkeySetup.ShowUnregistered(); }; if (App.CmdOptions.Tray || _helper.Settings.Tray.MinToTrayOnStartup) { Hide(); } Closing += (Sender, Args) => { if (!TryExit()) { Args.Cancel = true; } }; // Register to bring this instance to foreground when other instances are launched. SingleInstanceManager.StartListening(WakeApp); }
void Application_Startup(object Sender, StartupEventArgs Args) { AppDomain.CurrentDomain.UnhandledException += OnCurrentDomainOnUnhandledException; ServiceProvider.LoadModule(new CoreModule()); ServiceProvider.LoadModule(new ViewCoreModule()); Parser.Default.ParseArguments <CmdOptions>(Args.Args) .WithParsed(M => CmdOptions = M); if (CmdOptions.Settings != null) { ServiceProvider.SettingsDir = CmdOptions.Settings; } var settings = ServiceProvider.Get <Settings>(); InitTheme(settings); BindLanguageSetting(settings); BindKeymapSetting(settings); }
void WindowMouseMove(object Sender, MouseEventArgs E) { var platformServices = ServiceProvider.Get <IPlatformServices>(); var point = platformServices.CursorPosition; switch (_mode) { case VideoPickerMode.Screen: SelectedScreen = _screens.FirstOrDefault(M => M.Rectangle.Contains(point)); UpdateBorderAndCursor(SelectedScreen?.Rectangle); break; case VideoPickerMode.Window: SelectedWindow = _windows .Where(M => Predicate?.Invoke(M) ?? true) .FirstOrDefault(M => M.Rectangle.Contains(point)); UpdateBorderAndCursor(SelectedWindow?.Rectangle); break; } }
void OnLoaded(object Sender, RoutedEventArgs RoutedEventArgs) { UpdateSizeText(); var settings = ServiceProvider.Get <Settings>(); var keystrokes = Keystrokes(settings.Keystrokes); var webcam = Webcam(settings.WebcamOverlay); var textOverlayVm = ServiceProvider.Get <CustomOverlaysViewModel>(); UpdateTextOverlays(textOverlayVm.Collection); (textOverlayVm.Collection as INotifyCollectionChanged).CollectionChanged += (S, E) => UpdateTextOverlays(textOverlayVm.Collection); var imgOverlayVm = ServiceProvider.Get <CustomImageOverlaysViewModel>(); UpdateImageOverlays(imgOverlayVm.Collection); (imgOverlayVm.Collection as INotifyCollectionChanged).CollectionChanged += (S, E) => UpdateImageOverlays(imgOverlayVm.Collection); AddToGrid(keystrokes, false); AddToGrid(webcam, true); }
static string GetPath(object Value) { var icons = ServiceProvider.Get <IIconSet>(); switch (Value) { case InkCanvasEditingMode.Ink: case ExtendedInkTool.Pen: return(icons.Pencil); case InkCanvasEditingMode.EraseByPoint: case ExtendedInkTool.Eraser: return(icons.Eraser); case InkCanvasEditingMode.EraseByStroke: case ExtendedInkTool.StrokeEraser: return(icons.StrokeEraser); case InkCanvasEditingMode.Select: case ExtendedInkTool.Select: return(icons.Select); case ExtendedInkTool.Line: return(icons.Line); case ExtendedInkTool.Rectangle: return(icons.Rectangle); case ExtendedInkTool.Ellipse: return(icons.Ellipse); case ExtendedInkTool.Arrow: return(icons.Arrow); } return(icons.Cursor); }
ScreenPickerWindow() { SelectScreenCommand = new ReactiveCommand <IScreen>() .WithSubscribe(M => { SelectedScreen = M; Close(); }); InitializeComponent(); ScreenContainer.Width = SystemParameters.VirtualScreenWidth * Scale; ScreenContainer.Height = SystemParameters.VirtualScreenHeight * Scale; var platformServices = ServiceProvider.Get <IPlatformServices>(); var screens = platformServices.EnumerateScreens().ToArray(); foreach (var screen in screens) { ScreenPickerViewModels.Add(new ScreenPickerViewModel(screen, Scale)); } }
static void RefreshFFmpegCodecs() { // Refresh only if not Recording and FFmpeg encoder is selected var mainVm = ServiceProvider.Get <MainViewModel>(); var canRefresh = mainVm.RefreshCommand.CanExecute(null); if (!canRefresh) { return; } var writersVm = ServiceProvider.Get <VideoWritersViewModel>(); if (!(writersVm.SelectedVideoWriterKind is FFmpegWriterProvider)) { return; } if (writersVm is IRefreshable refreshable) { refreshable.Refresh(); } }
static void List() { Banner(); var underline = $"\n{new string('-', 30)}"; #region FFmpeg var ffmpegExists = FFmpegService.FFmpegExists; WriteLine($"FFmpeg Available: {(ffmpegExists ? "YES" : "NO")}"); WriteLine(); if (ffmpegExists) { WriteLine("FFmpeg ENCODERS" + underline); var writerProvider = ServiceProvider.Get <FFmpegWriterProvider>(); var i = 0; foreach (var codec in writerProvider) { WriteLine($"{i.ToString().PadRight(2)}: {codec}"); ++i; } WriteLine(); } #endregion #region SharpAvi var sharpAviExists = ServiceProvider.FileExists("SharpAvi.dll"); WriteLine($"SharpAvi Available: {(sharpAviExists ? "YES" : "NO")}"); WriteLine(); if (sharpAviExists) { WriteLine("SharpAvi ENCODERS" + underline); var writerProvider = ServiceProvider.Get <SharpAviWriterProvider>(); var i = 0; foreach (var codec in writerProvider) { WriteLine($"{i.ToString().PadRight(2)}: {codec}"); ++i; } WriteLine(); } #endregion #region Windows WriteLine("AVAILABLE WINDOWS" + underline); // Window Picker is skipped automatically foreach (var source in Window.EnumerateVisible()) { WriteLine($"{source.Handle.ToString().PadRight(10)}: {source.Title}"); } WriteLine(); #endregion #region Screens WriteLine("AVAILABLE SCREENS" + underline); var j = 0; // First is Full Screen, Second is Screen Picker foreach (var screen in ScreenItem.Enumerate()) { WriteLine($"{j.ToString().PadRight(2)}: {screen.Name}"); ++j; } WriteLine(); #endregion var audio = ServiceProvider.Get <AudioSource>(); WriteLine($"ManagedBass Available: {(audio is BassAudioSource ? "YES" : "NO")}"); WriteLine(); #region Microphones if (audio.AvailableRecordingSources.Count > 0) { WriteLine("AVAILABLE MICROPHONES" + underline); for (var i = 0; i < audio.AvailableRecordingSources.Count; ++i) { WriteLine($"{i.ToString().PadRight(2)}: {audio.AvailableRecordingSources[i]}"); } WriteLine(); } #endregion #region Speaker if (audio.AvailableLoopbackSources.Count > 0) { WriteLine("AVAILABLE SPEAKER SOURCES" + underline); for (var i = 0; i < audio.AvailableLoopbackSources.Count; ++i) { WriteLine($"{i.ToString().PadRight(2)}: {audio.AvailableLoopbackSources[i]}"); } WriteLine(); } #endregion #region Webcams var webcam = ServiceProvider.Get <IWebCamProvider>(); if (webcam.AvailableCams.Count > 1) { WriteLine("AVAILABLE WEBCAMS" + underline); for (var i = 1; i < webcam.AvailableCams.Count; ++i) { WriteLine($"{(i - 1).ToString().PadRight(2)}: {webcam.AvailableCams[i]}"); } WriteLine(); } #endregion }
static void HandleVideoSource(MainViewModel ViewModel, CommonCmdOptions CommonOptions) { // Desktop if (CommonOptions.Source == null || CommonOptions.Source == "desktop") { return; } var video = ViewModel.VideoViewModel; // Region if (Regex.IsMatch(CommonOptions.Source, @"^\d+,\d+,\d+,\d+$")) { if (MainViewModel.RectangleConverter.ConvertFromInvariantString(CommonOptions.Source) is Rectangle rect) { FakeRegionProvider.Instance.SelectedRegion = rect.Even(); video.SelectedVideoSourceKind = ServiceProvider.Get <RegionSourceProvider>(); } } // Screen else if (Regex.IsMatch(CommonOptions.Source, @"^screen:\d+$")) { var index = int.Parse(CommonOptions.Source.Substring(7)); if (index < ScreenItem.Count) { video.SelectedVideoSourceKind = ServiceProvider.Get <ScreenSourceProvider>(); // First item is Full Screen, Second is Screen Picker video.SelectedVideoSource = video.AvailableVideoSources[index + 2]; } } // Window else if (Regex.IsMatch(CommonOptions.Source, @"^win:\d+$")) { var handle = new IntPtr(int.Parse(CommonOptions.Source.Substring(4))); var winProvider = ServiceProvider.Get <WindowSourceProvider>(); var matchingWin = winProvider.OfType <WindowItem>().FirstOrDefault(M => M.Window.Handle == handle); if (matchingWin != null) { video.SelectedVideoSourceKind = winProvider; video.SelectedVideoSource = matchingWin; } } // Start command only else if (CommonOptions is StartCmdOptions) { // Desktop Duplication if (Regex.IsMatch(CommonOptions.Source, @"^deskdupl:\d+$")) { var index = int.Parse(CommonOptions.Source.Substring(9)); if (index < ScreenItem.Count) { video.SelectedVideoSourceKind = ServiceProvider.Get <DeskDuplSourceProvider>(); video.SelectedVideoSource = video.AvailableVideoSources[index]; } } // No Video for Start else if (CommonOptions.Source == "none") { video.SelectedVideoSourceKind = ServiceProvider.Get <NoVideoSourceProvider>(); } } }
static void Main(string[] Args) { if (Args.Length == 0) { var uiPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "captura.exe"); if (File.Exists(uiPath)) { Process.Start(uiPath); return; } } User32.SetProcessDPIAware(); ServiceProvider.LoadModule(new CoreModule()); ServiceProvider.LoadModule(new FakesModule()); // Hide on Full Screen Screenshot doesn't work on Console ServiceProvider.Get <Settings>().UI.HideOnFullScreenShot = false; Parser.Default.ParseArguments <StartCmdOptions, ShotCmdOptions, FFmpegCmdOptions, ListCmdOptions>(Args) .WithParsed <ListCmdOptions>(Options => List()) .WithParsed <StartCmdOptions>(Options => { Banner(); using (var vm = ServiceProvider.Get <MainViewModel>()) { vm.Init(false, false, false, false); // Load settings dummy var dummySettings = new Settings(); dummySettings.Load(); vm.Settings.WebcamOverlay = dummySettings.WebcamOverlay; vm.Settings.MousePointerOverlay = dummySettings.MousePointerOverlay; vm.Settings.Clicks = dummySettings.Clicks; vm.Settings.Keystrokes = dummySettings.Keystrokes; vm.Settings.Elapsed = dummySettings.Elapsed; // FFmpeg Path vm.Settings.FFmpeg.FolderPath = dummySettings.FFmpeg.FolderPath; foreach (var overlay in dummySettings.Censored) { vm.Settings.Censored.Add(overlay); } foreach (var overlay in dummySettings.TextOverlays) { vm.Settings.TextOverlays.Add(overlay); } foreach (var overlay in dummySettings.ImageOverlays) { vm.Settings.ImageOverlays.Add(overlay); } Start(vm, Options); } }) .WithParsed <ShotCmdOptions>(Options => { Banner(); using (var vm = ServiceProvider.Get <MainViewModel>()) { vm.Init(false, false, false, false); Shot(vm, Options); } }) .WithParsed <FFmpegCmdOptions>(Options => { Banner(); FFmpeg(Options); }); }
IVideoWriterItem HandleVideoEncoder(StartCmdOptions StartOptions, out IVideoWriterProvider VideoWriterKind) { var ffmpegExists = FFmpegService.FFmpegExists; var sharpAviWriterProvider = ServiceProvider.Get <SharpAviWriterProvider>(); if (StartOptions.Encoder == null) { StartOptions.Encoder = "sharpavi:0"; } // FFmpeg if (ffmpegExists && Regex.IsMatch(StartOptions.Encoder, @"^ffmpeg:\d+$")) { var index = int.Parse(StartOptions.Encoder.Substring(7)); var ffmpegWriterProvider = ServiceProvider.Get <FFmpegWriterProvider>(); var writers = ffmpegWriterProvider.ToArray(); if (index < writers.Length) { VideoWriterKind = ffmpegWriterProvider; return(writers[index]); } } // SharpAvi else if (ServiceProvider.FileExists("SharpAvi.dll") && Regex.IsMatch(StartOptions.Encoder, @"^sharpavi:\d+$")) { var index = int.Parse(StartOptions.Encoder.Substring(9)); var writers = sharpAviWriterProvider.ToArray(); if (index < writers.Length) { VideoWriterKind = sharpAviWriterProvider; return(writers[index]); } } // Stream else if (ffmpegExists && Regex.IsMatch(StartOptions.Encoder, @"^stream:\S+$")) { var url = StartOptions.Encoder.Substring(7); _settings.FFmpeg.CustomStreamingUrl = url; VideoWriterKind = ServiceProvider.Get <StreamingWriterProvider>(); return(StreamingWriterProvider.GetCustomStreamingCodec()); } // Rolling else if (ffmpegExists && Regex.IsMatch(StartOptions.Encoder, @"^roll:\d+$")) { var duration = int.Parse(StartOptions.Encoder.Substring(5)); VideoWriterKind = ServiceProvider.Get <FFmpegWriterProvider>(); return(new FFmpegRollingWriterItem(duration)); } VideoWriterKind = sharpAviWriterProvider; return(sharpAviWriterProvider.First()); }
public void OnLoad(IBinder Binder) { // Singleton View Models Binder.BindSingleton <MainViewModel>(); Binder.BindSingleton <VideoViewModel>(); Binder.BindSingleton <ProxySettingsViewModel>(); Binder.BindSingleton <LicensesViewModel>(); Binder.BindSingleton <CrashLogsViewModel>(); Binder.BindSingleton <FFmpegCodecsViewModel>(); Binder.BindSingleton <ScreenShotViewModel>(); Binder.BindSingleton <RecentViewModel>(); Binder.BindSingleton <RecordingViewModel>(); Binder.BindSingleton <FileNameFormatViewModel>(); Binder.BindSingleton <CustomOverlaysViewModel>(); Binder.BindSingleton <CustomImageOverlaysViewModel>(); Binder.BindSingleton <CensorOverlaysViewModel>(); // Settings Binder.BindSingleton <Settings>(); Binder.Bind(() => ServiceProvider.Get <Settings>().Audio); Binder.Bind(() => ServiceProvider.Get <Settings>().FFmpeg); Binder.Bind(() => ServiceProvider.Get <Settings>().Gif); Binder.Bind(() => ServiceProvider.Get <Settings>().Proxy); // Keymap Binder.BindSingleton <KeymapViewModel>(); // Localization Binder.Bind(() => LanguageManager.Instance); // Hotkeys Binder.BindSingleton <HotKeyManager>(); // Image Writers Binder.BindSingleton <DiskWriter>(); Binder.BindSingleton <ClipboardWriter>(); Binder.BindSingleton <ImgurWriter>(); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <DiskWriter>); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <ClipboardWriter>); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <ImgurWriter>); // Video Writer Providers Binder.BindSingleton <FFmpegWriterProvider>(); Binder.BindSingleton <GifWriterProvider>(); Binder.BindSingleton <StreamingWriterProvider>(); Binder.BindSingleton <DiscardWriterProvider>(); Binder.BindSingleton <SharpAviWriterProvider>(); Binder.BindSingleton <FullScreenItem>(); // Video Source Providers Binder.BindSingleton <ScreenSourceProvider>(); Binder.BindSingleton <FullScreenSourceProvider>(); Binder.BindSingleton <RegionSourceProvider>(); Binder.BindSingleton <WindowSourceProvider>(); Binder.BindSingleton <DeskDuplSourceProvider>(); Binder.BindSingleton <NoVideoSourceProvider>(); // Folder Browser Dialog Binder.Bind <IDialogService, DialogService>(); // Clipboard Binder.Bind <IClipboardService, ClipboardService>(); // FFmpeg Log Binder.BindSingleton <FFmpegLog>(); // Check if Bass is available if (BassAudioSource.Available) { Binder.Bind <AudioSource, BassAudioSource>(); } else { Binder.Bind <AudioSource, NoAudioSource>(); } }
void Application_Startup(object Sender, StartupEventArgs Args) { AppDomain.CurrentDomain.UnhandledException += (S, E) => { var dir = Path.Combine(ServiceProvider.SettingsDir, "Crashes"); Directory.CreateDirectory(dir); File.WriteAllText(Path.Combine(dir, $"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.txt"), E.ExceptionObject.ToString()); if (E.ExceptionObject is Exception e) { Current.Dispatcher.Invoke(() => new ExceptionWindow(e).ShowDialog()); } Shutdown(); }; ServiceProvider.LoadModule(new CoreModule()); Parser.Default.ParseArguments <CmdOptions>(Args.Args) .WithParsed(M => CmdOptions = M); if (CmdOptions.Settings != null) { ServiceProvider.SettingsDir = CmdOptions.Settings; } var settings = ServiceProvider.Get <Settings>(); if (!CmdOptions.Reset) { settings.Load(); } if (settings.UI.DarkTheme) { AppearanceManager.Current.ThemeSource = AppearanceManager.DarkThemeSource; } var accent = settings.UI.AccentColor; if (!string.IsNullOrEmpty(accent)) { AppearanceManager.Current.AccentColor = WpfExtensions.ParseColor(accent); } if (!string.IsNullOrWhiteSpace(settings.UI.Language)) { var matchedCulture = LanguageManager.Instance.AvailableCultures.FirstOrDefault(M => M.Name == settings.UI.Language); if (matchedCulture != null) { LanguageManager.Instance.CurrentCulture = matchedCulture; } } LanguageManager.Instance.LanguageChanged += L => settings.UI.Language = L.Name; var keymap = ServiceProvider.Get <KeymapViewModel>(); if (!string.IsNullOrWhiteSpace(settings.Keystrokes.KeymapName)) { var matched = keymap.AvailableKeymaps.FirstOrDefault(M => M.Name == settings.Keystrokes.KeymapName); if (matched != null) { keymap.SelectedKeymap = matched; } } keymap.PropertyChanged += (S, E) => settings.Keystrokes.KeymapName = keymap.SelectedKeymap.Name; }
public void OnLoad(IBinder Binder) { // Singleton View Models Binder.BindSingleton <MainViewModel>(); Binder.BindSingleton <VideoViewModel>(); Binder.BindSingleton <ProxySettingsViewModel>(); Binder.BindSingleton <LicensesViewModel>(); Binder.BindSingleton <CrashLogsViewModel>(); Binder.BindSingleton <FFmpegCodecsViewModel>(); Binder.BindSingleton <CustomOverlaysViewModel>(); Binder.BindSingleton <CustomImageOverlaysViewModel>(); Binder.BindSingleton <CensorOverlaysViewModel>(); // Settings Binder.BindSingleton <Settings>(); Binder.Bind(() => ServiceProvider.Get <Settings>().Audio); Binder.Bind(() => ServiceProvider.Get <Settings>().FFmpeg); Binder.Bind(() => ServiceProvider.Get <Settings>().Gif); Binder.Bind(() => ServiceProvider.Get <Settings>().Proxy); // Localization Binder.Bind(() => LanguageManager.Instance); // Hotkeys Binder.BindSingleton <HotKeyManager>(); // Image Writers Binder.BindSingleton <DiskWriter>(); Binder.BindSingleton <ClipboardWriter>(); Binder.BindSingleton <ImgurWriter>(); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <DiskWriter>); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <ClipboardWriter>); Binder.Bind <IImageWriterItem>(ServiceProvider.Get <ImgurWriter>); // Video Writer Providers Binder.Bind <IVideoWriterProvider, FFmpegWriterProvider>(); Binder.Bind <IVideoWriterProvider, GifWriterProvider>(); Binder.Bind <IVideoWriterProvider, StreamingWriterProvider>(); #if DEBUG Binder.Bind <IVideoWriterProvider, DiscardWriterProvider>(); #endif // Check if SharpAvi is available if (ServiceProvider.FileExists("SharpAvi.dll")) { Binder.Bind <IVideoWriterProvider, SharpAviWriterProvider>(); } Binder.BindSingleton <WindowPickerItem>(); Binder.BindSingleton <ScreenPickerItem>(); Binder.BindSingleton <FullScreenItem>(); // Video Source Providers Binder.Bind <IVideoSourceProvider, ScreenSourceProvider>(); Binder.Bind <IVideoSourceProvider, RegionSourceProvider>(); Binder.Bind <IVideoSourceProvider, WindowSourceProvider>(); Binder.Bind <IVideoSourceProvider, DeskDuplSourceProvider>(); Binder.Bind <IVideoSourceProvider, NoVideoSourceProvider>(); // Folder Browser Dialog Binder.Bind <IDialogService, DialogService>(); // Clipboard Binder.Bind <IClipboardService, ClipboardService>(); // FFmpeg Log Binder.BindSingleton <FFmpegLog>(); // Check if Bass is available if (BassAudioSource.Available) { Binder.Bind <AudioSource, BassAudioSource>(); } else { Binder.Bind <AudioSource, NoAudioSource>(); } }
public MainWindow() { Instance = this; FFmpegService.FFmpegDownloader += () => { if (_downloader == null) { _downloader = new FFmpegDownloaderWindow(); _downloader.Closed += (Sender, Args) => _downloader = null; } _downloader.ShowAndFocus(); }; InitializeComponent(); if (DataContext is MainViewModel vm) { var mainModel = ServiceProvider.Get <MainModel>(); mainModel.Init(!App.CmdOptions.NoPersist, !App.CmdOptions.Reset, !App.CmdOptions.NoHotkeys); ServiceProvider.Get <HotkeyActionRegisterer>().Register(); ServiceProvider.Get <TimerModel>().Init(); var listener = new HotkeyListener(); var hotkeyManager = ServiceProvider.Get <HotKeyManager>(); listener.HotkeyReceived += Id => hotkeyManager.ProcessHotkey(Id); ServiceProvider.Get <HotKeyManager>().HotkeyPressed += Service => { switch (Service) { case ServiceName.OpenImageEditor: new ImageEditorWindow().ShowAndFocus(); break; case ServiceName.ShowMainWindow: this.ShowAndFocus(); break; } }; Loaded += (Sender, Args) => { RepositionWindowIfOutside(); mainModel.ViewLoaded(); }; } if (App.CmdOptions.Tray || ServiceProvider.Get <Settings>().Tray.MinToTrayOnStartup) { Hide(); } Closing += (Sender, Args) => { if (!TryExit()) { Args.Cancel = true; } }; }
public void Run() { var lister = ServiceProvider.Get <ConsoleLister>(); lister.List(); }
static void HandleVideoSource(MainViewModel ViewModel, CommonCmdOptions CommonOptions) { // Desktop if (CommonOptions.Source == null || CommonOptions.Source == "desktop") { return; } var video = ViewModel.VideoViewModel; // Region if (Regex.IsMatch(CommonOptions.Source, @"^\d+,\d+,\d+,\d+$")) { if (MainViewModel.RectangleConverter.ConvertFromInvariantString(CommonOptions.Source) is Rectangle rect) { FakeRegionProvider.Instance.SelectedRegion = rect.Even(); video.SelectedVideoSourceKind = ServiceProvider.Get <RegionSourceProvider>(); } } // Screen else if (Regex.IsMatch(CommonOptions.Source, @"^screen:\d+$")) { var index = int.Parse(CommonOptions.Source.Substring(7)); if (index < ScreenItem.Count) { var screenSourceProvider = ServiceProvider.Get <ScreenSourceProvider>(); screenSourceProvider.Set(index); video.RestoreSourceKind(screenSourceProvider); } } // Window else if (Regex.IsMatch(CommonOptions.Source, @"^win:\d+$")) { var handle = new IntPtr(int.Parse(CommonOptions.Source.Substring(4))); var winProvider = ServiceProvider.Get <WindowSourceProvider>(); winProvider.Set(handle); video.RestoreSourceKind(winProvider); } // Start command only else if (CommonOptions is StartCmdOptions) { // Desktop Duplication if (Regex.IsMatch(CommonOptions.Source, @"^deskdupl:\d+$")) { var index = int.Parse(CommonOptions.Source.Substring(9)); if (index < ScreenItem.Count) { var deskDuplSourceProvider = ServiceProvider.Get <DeskDuplSourceProvider>(); deskDuplSourceProvider.Set(new ScreenWrapper(Screen.AllScreens[index])); video.RestoreSourceKind(deskDuplSourceProvider); } } // No Video for Start else if (CommonOptions.Source == "none") { video.SelectedVideoSourceKind = ServiceProvider.Get <NoVideoSourceProvider>(); } } }
public ImageUploadNotification() { _loc = ServiceProvider.Get <ILocalizationProvider>(); PrimaryText = _loc.ImageUploading; }
public void OnLoad(IBinder Binder) { Binder.BindSingleton <HotkeyActionRegisterer>(); Binder.Bind <IIconSet, MaterialDesignIcons>(); Binder.Bind <IImagurApiKeys, ApiKeys>(); // Singleton View Models Binder.BindSingleton <MainViewModel>(); Binder.BindSingleton <VideoSourcesViewModel>(); Binder.BindSingleton <VideoWritersViewModel>(); Binder.BindSingleton <FFmpegCodecsViewModel>(); Binder.BindSingleton <ScreenShotViewModel>(); Binder.BindSingleton <RecordingViewModel>(); Binder.Bind <IRecentList, RecentListRepository>(); // Settings Binder.BindSingleton <Settings>(); Binder.Bind(() => ServiceProvider.Get <Settings>().Audio); Binder.Bind(() => ServiceProvider.Get <Settings>().FFmpeg); Binder.Bind(() => ServiceProvider.Get <Settings>().Gif); Binder.Bind(() => ServiceProvider.Get <Settings>().Proxy); Binder.Bind(() => ServiceProvider.Get <Settings>().Sounds); Binder.Bind(() => ServiceProvider.Get <Settings>().Imgur); // Keymap Binder.BindSingleton <KeymapViewModel>(); // Localization Binder.Bind(() => LanguageManager.Instance); // Hotkeys Binder.BindSingleton <HotKeyManager>(); // Image Writers BindAsInterfaceAndClass <IImageWriterItem, DiskWriter>(Binder); BindAsInterfaceAndClass <IImageWriterItem, ClipboardWriter>(Binder); BindAsInterfaceAndClass <IImageWriterItem, ImageUploadWriter>(Binder); Binder.Bind <IImageUploader, ImgurUploader>(); // Video Writer Providers BindAsInterfaceAndClass <IVideoWriterProvider, FFmpegWriterProvider>(Binder); BindAsInterfaceAndClass <IVideoWriterProvider, GifWriterProvider>(Binder); BindAsInterfaceAndClass <IVideoWriterProvider, SharpAviWriterProvider>(Binder); BindAsInterfaceAndClass <IVideoWriterProvider, StreamingWriterProvider>(Binder); BindAsInterfaceAndClass <IVideoWriterProvider, DiscardWriterProvider>(Binder); Binder.BindSingleton <FullScreenItem>(); // Video Source Providers BindAsInterfaceAndClass <IVideoSourceProvider, NoVideoSourceProvider>(Binder); BindAsInterfaceAndClass <IVideoSourceProvider, FullScreenSourceProvider>(Binder); BindAsInterfaceAndClass <IVideoSourceProvider, ScreenSourceProvider>(Binder); BindAsInterfaceAndClass <IVideoSourceProvider, WindowSourceProvider>(Binder); BindAsInterfaceAndClass <IVideoSourceProvider, RegionSourceProvider>(Binder); if (Windows8OrAbove) { BindAsInterfaceAndClass <IVideoSourceProvider, DeskDuplSourceProvider>(Binder); } // Folder Browser Dialog Binder.Bind <IDialogService, DialogService>(); // Clipboard Binder.Bind <IClipboardService, ClipboardService>(); // FFmpeg Log Binder.BindSingleton <FFmpegLog>(); // Recent Serializers Binder.Bind <IRecentItemSerializer, FileRecentSerializer>(); Binder.Bind <IRecentItemSerializer, UploadRecentSerializer>(); // Check if Bass is available if (BassAudioSource.Available) { Binder.Bind <AudioSource, BassAudioSource>(); } else { Binder.Bind <AudioSource, NAudioSource>(); } // Update Checker var version = Assembly.GetEntryAssembly()?.GetName().Version; if (version?.Major == 0) { Binder.Bind <IUpdateChecker, DevUpdateChecker>(); } else { Binder.Bind <IUpdateChecker, UpdateChecker>(); } }
public ImgurNotification() { _loc = ServiceProvider.Get <LanguageManager>(); PrimaryText = _loc.ImgurUploading; }
static Settings GetSettings() => ServiceProvider.Get <Settings>();
static void List() { Banner(); var underline = $"\n{new string('-', 30)}"; #region FFmpeg var ffmpegExists = FFMpegService.FFMpegExists; WriteLine($"FFmpeg Available: {(ffmpegExists ? "YES" : "NO")}"); WriteLine(); if (ffmpegExists) { WriteLine("FFmpeg ENCODERS" + underline); var writerProvider = ServiceProvider.Get <FFMpegWriterProvider>(); var i = 0; foreach (var codec in writerProvider) { WriteLine($"{i.ToString().PadRight(2)}: {codec}"); ++i; } WriteLine(); } #endregion #region SharpAvi var sharpAviExists = ServiceProvider.FileExists("SharpAvi.dll"); WriteLine($"SharpAvi Available: {(sharpAviExists ? "YES" : "NO")}"); WriteLine(); if (sharpAviExists) { WriteLine("SharpAvi ENCODERS" + underline); var writerProvider = ServiceProvider.Get <SharpAviWriterProvider>(); var i = 0; foreach (var codec in writerProvider) { WriteLine($"{i.ToString().PadRight(2)}: {codec}"); ++i; } WriteLine(); } #endregion #region Windows WriteLine("AVAILABLE WINDOWS" + underline); var winProvider = ServiceProvider.Get <WindowSourceProvider>(); foreach (var source in winProvider.OfType <WindowItem>()) { WriteLine($"{source.Window.Handle.ToString().PadRight(10)}: {source}"); } WriteLine(); #endregion #region Screens WriteLine("AVAILABLE SCREENS" + underline); var scrProvider = ServiceProvider.Get <ScreenSourceProvider>(); var j = 0; // First is Full Screen foreach (var screen in scrProvider.Skip(1)) { WriteLine($"{j.ToString().PadRight(2)}: {screen}"); ++j; } WriteLine(); #endregion #region MouseKeyHook WriteLine($"MouseKeyHook Available: {(ServiceProvider.Get<MainViewModel>().MouseKeyHookAvailable ? "YES" : "NO")}"); WriteLine(); #endregion var audio = ServiceProvider.Get <AudioSource>(); WriteLine($"ManagedBass Available: {(audio is BassAudioSource ? "YES" : "NO")}"); WriteLine(); #region Microphones if (audio.AvailableRecordingSources.Count > 1) { WriteLine("AVAILABLE MICROPHONES" + underline); for (var i = 1; i < audio.AvailableRecordingSources.Count; ++i) { WriteLine($"{(i - 1).ToString().PadRight(2)}: {audio.AvailableRecordingSources[i]}"); } WriteLine(); } #endregion #region Speaker if (audio.AvailableLoopbackSources.Count > 1) { WriteLine("AVAILABLE SPEAKER SOURCES" + underline); for (var i = 1; i < audio.AvailableLoopbackSources.Count; ++i) { WriteLine($"{(i - 1).ToString().PadRight(2)}: {audio.AvailableLoopbackSources[i]}"); } WriteLine(); } #endregion #region Webcams var webcam = ServiceProvider.Get <IWebCamProvider>(); if (webcam.AvailableCams.Count > 1) { WriteLine("AVAILABLE WEBCAMS" + underline); for (var i = 1; i < webcam.AvailableCams.Count; ++i) { WriteLine($"{(i - 1).ToString().PadRight(2)}: {webcam.AvailableCams[i]}"); } WriteLine(); } #endregion }
static FFmpegSettings GetSettings() => ServiceProvider.Get <FFmpegSettings>();
public Server() { _recordingViewModel = ServiceProvider.Get <RecordingViewModel>(); }