コード例 #1
0
        public SettingsViewModel(ApplicationSettings settings)
        {
            if (settings == null)
                throw new ArgumentNullException("settings");

            _settings = settings;
        }
コード例 #2
0
        public DataSourcesViewModel(ApplicationSettings settings, DataSources dataSources)
        {
            if (settings == null) throw new ArgumentNullException("settings");
            if (dataSources == null) throw new ArgumentNullException("dataSources");

            _settings = settings;
            _observable = new ObservableCollection<IDataSourceViewModel>();
            _allDataSourceViewModels = new List<IDataSourceViewModel>();
            _dataSources = dataSources;
            foreach (IDataSource dataSource in dataSources)
            {
                if (dataSource.ParentId == Guid.Empty)
                {
                    Add(dataSource);
                }
            }

            foreach (IDataSource dataSource in dataSources)
            {
                Guid parentId = dataSource.ParentId;
                if (parentId != Guid.Empty)
                {
                    IDataSourceViewModel parent = _observable.First(x => x.DataSource.Id == parentId);
                    var group = (MergedDataSourceViewModel) parent;
                    IDataSourceViewModel viewModel = CreateViewModel(dataSource);
                    group.AddChild(viewModel);
                }
            }
        }
コード例 #3
0
 public void TestRestore2()
 {
     var settings = new ApplicationSettings(@"Settings\settings_no_file_guid.xml");
     bool neededPatching;
     settings.Restore(out neededPatching);
     settings.DataSources.Count.Should().Be(2);
     settings.DataSources[0].Id.Should().NotBe(Guid.Empty);
     settings.DataSources[1].Id.Should().NotBe(Guid.Empty);
     settings.DataSources[0].Id.Should().NotBe(settings.DataSources[1].Id);
     neededPatching.Should().BeTrue("Because we should now be saving the settings again due to the upgrade");
 }
コード例 #4
0
        public QuickFiltersViewModel(ApplicationSettings settings, QuickFilters quickFilters)
        {
            if (settings == null) throw new ArgumentNullException("settings");
            if (quickFilters == null) throw new ArgumentNullException("quickFilters");

            _settings = settings;
            _quickFilters = quickFilters;
            _addCommand = new DelegateCommand(() => AddQuickFilter());
            _viewModels = new ObservableCollection<QuickFilterViewModel>();
            foreach (QuickFilter filter in quickFilters.Filters)
            {
                CreateAndAddViewModel(filter);
            }
        }
コード例 #5
0
 public void SetUp()
 {
     _settings = new ApplicationSettings("adwad");
     _dispatcher = new ManualDispatcher();
     _scheduler = new ManualTaskScheduler();
     _dataSources = new DataSources(_scheduler, _settings.DataSources);
     _quickFilters = new QuickFilters(_settings.QuickFilters);
     _actionCenter = new ActionCenter();
     _updater = new Mock<IAutoUpdater>();
     _mainWindow = new MainWindowViewModel(_settings,
                                           _dataSources,
                                           _quickFilters,
                                           _actionCenter,
                                           _updater.Object,
                                           _dispatcher);
 }
コード例 #6
0
        internal MainWindow(ApplicationSettings settings)
        {
            if (settings == null) throw new ArgumentNullException("settings");

            _settings = settings;
            FocusLogFileSearchCommand = new DelegateCommand(FocusLogFileSearch);
            FocusDataSourceSearchCommand = new DelegateCommand(FocusDataSourceSearch);

            InitializeComponent();
            Closing += OnClosing;
            DragEnter += OnDragEnter;
            DragOver += OnDragOver;
            Drop += OnDrop;
            MouseMove += OnMouseMove;

            DragLayer.AdornerLayer = PART_DragDecorator.AdornerLayer;
        }
コード例 #7
0
        public void TestDataSourceId()
        {
            string fname = Path.GetTempFileName();
            var settings = new ApplicationSettings(fname);
            var dataSource = new DataSource("foo");
            dataSource.Id = Guid.NewGuid();
            settings.DataSources.Add(dataSource);
            settings.Save();

            var settings2 = new ApplicationSettings(fname);
            bool neededPatching;
            settings2.Restore(out neededPatching);
            neededPatching.Should().BeFalse();
            settings2.DataSources.Count.Should().Be(1);
            DataSource dataSource2 = settings2.DataSources[0];
            dataSource2.File.Should().Be("foo");
            dataSource2.Id.Should().Be(dataSource.Id);
        }
コード例 #8
0
        public void TestRestore3()
        {
            string fname = Path.GetTempFileName();
            var settings = new ApplicationSettings(fname);
            DateTime timestamp = DateTime.Now;
            settings.DataSources.Add(new DataSource("dawadaw")
                {
                    LastViewed = timestamp
                });

            settings.Save();
            settings = new ApplicationSettings(fname);
            settings.Restore();

            settings.DataSources.Count.Should().Be(1);
            DataSource source = settings.DataSources[0];
            source.Should().NotBeNull();
            source.LastViewed.Should().Be(timestamp);
        }
コード例 #9
0
        public MainWindowViewModel(ApplicationSettings settings,
		                           DataSources dataSources,
		                           QuickFilters quickFilters,
		                           IActionCenter actionCenter,
		                           IAutoUpdater updater,
		                           IDispatcher dispatcher)
        {
            if (dataSources == null) throw new ArgumentNullException("dataSources");
            if (quickFilters == null) throw new ArgumentNullException("quickFilters");
            if (updater == null) throw new ArgumentNullException("updater");
            if (dispatcher == null) throw new ArgumentNullException("dispatcher");

            _dataSourcesViewModel = new DataSourcesViewModel(settings, dataSources);
            _dataSourcesViewModel.PropertyChanged += DataSourcesViewModelOnPropertyChanged;
            _quickFilters = new QuickFiltersViewModel(settings, quickFilters);
            _quickFilters.OnFiltersChanged += OnQuickFiltersChanged;
            _settings = new SettingsViewModel(settings);
            _actionCenter = new ActionCenterViewModel(dispatcher, actionCenter);

            _timer = new DispatcherTimer
                {
                    Interval = TimeSpan.FromMilliseconds(100)
                };
            _timer.Tick += TimerOnTick;
            _timer.Start();

            _autoUpdater = new AutoUpdateViewModel(updater, settings.AutoUpdate, dispatcher);

            _dispatcher = dispatcher;
            WindowTitle = Constants.MainWindowTitle;

            _selectNextDataSourceCommand = new DelegateCommand(SelectNextDataSource);
            _selectPreviousDataSourceCommand = new DelegateCommand(SelectPreviousDataSource);
            _addDataSourceCommand = new DelegateCommand(AddDataSource);

            ChangeDataSource(CurrentDataSource);
        }
コード例 #10
0
        public void TestCtor1()
        {
            _settings = new ApplicationSettings("foobar");
            var group = new DataSource {Id = Guid.NewGuid()};
            var source1 = new DataSource("foo") {Id = Guid.NewGuid(), ParentId = group.Id};
            var source2 = new DataSource("bar") {Id = Guid.NewGuid(), ParentId = group.Id};
            var source3 = new DataSource("clondyke") {Id = Guid.NewGuid()};
            _settings.DataSources.Add(group);
            _settings.DataSources.Add(source1);
            _settings.DataSources.Add(source2);
            _settings.DataSources.Add(source3);
            _dataSources = new DataSources(_scheduler, _settings.DataSources);
            _model = new DataSourcesViewModel(_settings, _dataSources);
            _model.Observable.Count.Should().Be(2);
            IDataSourceViewModel viewModel = _model.Observable[0];
            viewModel.Should().NotBeNull();
            viewModel.Should().BeOfType<MergedDataSourceViewModel>();
            viewModel.DataSource.Id.Should().Be(group.Id);
            var merged = (MergedDataSourceViewModel) viewModel;
            merged.Observable.Count().Should().Be(2);
            merged.Observable.ElementAt(0).DataSource.Id.Should().Be(source1.Id);
            merged.Observable.ElementAt(1).DataSource.Id.Should().Be(source2.Id);

            viewModel = _model.Observable[1];
            viewModel.Should().NotBeNull();
            viewModel.Should().BeOfType<SingleDataSourceViewModel>();
            viewModel.DataSource.Id.Should().Be(source3.Id);
        }
コード例 #11
0
 public void SetUp()
 {
     _settings = new ApplicationSettings("dawddwa");
     _dataSources = new DataSources(_scheduler, _settings.DataSources);
     _model = new DataSourcesViewModel(_settings, _dataSources);
 }
コード例 #12
0
        public void TestRemove1()
        {
            _settings = new ApplicationSettings("foobar");
            var source = new DataSource("foo") {Id = Guid.NewGuid()};
            _settings.DataSources.Add(source);
            _dataSources = new DataSources(_scheduler, _settings.DataSources);
            _model = new DataSourcesViewModel(_settings, _dataSources);
            IDataSourceViewModel viewModel = _model.Observable[0];
            viewModel.RemoveCommand.Execute(null);

            _model.Observable.Should().BeEmpty();
            _dataSources.Should().BeEmpty();
            _settings.DataSources.Should().BeEmpty();
        }
コード例 #13
0
 public void SetUp()
 {
     _settings = new ApplicationSettings("foo");
     _model = new SettingsViewModel(_settings);
 }
コード例 #14
0
        public void TestRemove2()
        {
            _settings = new ApplicationSettings("foobar");
            var group = new DataSource {Id = Guid.NewGuid()};
            var source1 = new DataSource("foo") {Id = Guid.NewGuid(), ParentId = group.Id};
            var source2 = new DataSource("bar") {Id = Guid.NewGuid(), ParentId = group.Id};
            var source3 = new DataSource("clondyke") {Id = Guid.NewGuid(), ParentId = group.Id};
            _settings.DataSources.Add(source1);
            _settings.DataSources.Add(source2);
            _settings.DataSources.Add(source3);
            _settings.DataSources.Add(group);
            _dataSources = new DataSources(_scheduler, _settings.DataSources);
            _model = new DataSourcesViewModel(_settings, _dataSources);
            var merged = (MergedDataSourceViewModel) _model.Observable[0];
            IDataSourceViewModel viewModel1 = merged.Observable.ElementAt(0);
            IDataSourceViewModel viewModel2 = merged.Observable.ElementAt(1);
            IDataSourceViewModel viewModel3 = merged.Observable.ElementAt(2);
            viewModel1.RemoveCommand.Execute(null);

            merged.ChildCount.Should().Be(2);
            merged.Observable.Should().NotContain(viewModel1);
            _model.Observable.Should().Equal(new object[] {merged});
            _dataSources.Should().Equal(new object[] {viewModel2.DataSource, viewModel3.DataSource, merged.DataSource});
            _settings.DataSources.Should().Equal(new object[] {source2, source3, group});
        }
コード例 #15
0
        private static int StartApplication(SingleApplicationHelper.IMutex mutex, string fileToOpen, Stopwatch stopwatch)
        {
            ApplicationSettings settings = ApplicationSettings.Create();

            settings.Restore(out var neededPatching);
            settings.AllowSave = false;             //< We will allow saving once the app is fully booted

            if (neededPatching)
            {
                // TODO: Save settings right again to complete the upgrade
                //       (maybe we should preserve an old version)
            }

            var bookmarks = Bookmarks.Create();

            bookmarks.Restore();

            var services = new ServiceContainer();

            services.RegisterInstance <ILogFileSettings>(settings.LogFile);

            var actionCenter = new ActionCenter();

            using (var taskScheduler = new DefaultTaskScheduler())
                using (var serialTaskScheduler = new SerialTaskScheduler())
                {
                    services.RegisterInstance <ITaskScheduler>(taskScheduler);
                    services.RegisterInstance <ISerialTaskScheduler>(serialTaskScheduler);
                    var navigationService = new NavigationService();
                    services.RegisterInstance <INavigationService>(navigationService);

                    var filesystem = new Filesystem(taskScheduler);
                    services.RegisterInstance <IFilesystem>(filesystem);

                    using (var pluginArchiveLoader = new PluginArchiveLoader(filesystem, Constants.PluginPath, Constants.DownloadedPluginsPath))
                    {
                        var pluginUpdater = new PluginUpdater(pluginArchiveLoader);
                        services.RegisterInstance <IPluginUpdater>(pluginUpdater);

                        var pluginSystem = CreatePluginSystem(pluginArchiveLoader);
                        services.RegisterInstance <IPluginLoader>(pluginSystem);

                        var logFileFormatRegistry = new LogFileFormatRegistry(pluginSystem, settings.CustomFormats);
                        services.RegisterInstance <ILogFileFormatRepository>(logFileFormatRegistry);
                        services.RegisterInstance <ILogFileFormatRegistry>(logFileFormatRegistry);

                        var logFileFormatMatcher = new LogFileFormatMatcher(services);
                        services.RegisterInstance <ILogFileFormatMatcher>(logFileFormatMatcher);

                        var textLogFileParserPlugin = new LogEntryParserFactory(services);
                        services.RegisterInstance <ILogEntryParserPlugin>(textLogFileParserPlugin);

                        var propertyPresenter = new PropertyPresenterRegistry(pluginSystem);
                        services.RegisterInstance <IPropertyPresenterPlugin>(propertyPresenter);

                        var fileLogSourceFactory = new StreamingTextLogSourceFactory(filesystem, taskScheduler);
                        services.RegisterInstance <IRawFileLogSourceFactory>(fileLogSourceFactory);

                        var parsingLogSourceFactory = new ParsingLogSourceFactory(services);
                        services.RegisterInstance <ILogSourceParserPlugin>(parsingLogSourceFactory);

                        var customDataSourcePlugins = pluginSystem.LoadAllOfTypeWithDescription <ICustomDataSourcePlugin>();
                        var logFileFactory          = new PluginLogSourceFactory(services, customDataSourcePlugins);
                        using (var dataSources = new DataSources(logFileFactory, taskScheduler, filesystem, settings.DataSources, bookmarks))
                            using (var updater = new AutoUpdater(actionCenter, settings.AutoUpdate))
                            {
                                if (fileToOpen != null)
                                {
                                    if (File.Exists(fileToOpen))
                                    {
                                        // Not only do we want to add this file to the list of data sources,
                                        // but we also want to select it so the user can view it immediately, regardless
                                        // of what was selected previously.
                                        var dataSource = dataSources.AddFile(fileToOpen);
                                        settings.DataSources.SelectedItem = dataSource.Id;
                                    }
                                    else
                                    {
                                        Log.ErrorFormat("File '{0}' does not exist, won't open it!", fileToOpen);
                                    }
                                }

                                if (settings.AutoUpdate.CheckForUpdates)
                                {
                                    // Our initial check for updates is not due to a user action
                                    // and therefore we don't need to show a notification when the
                                    // application is up-to-date.
                                    updater.CheckForUpdates(addNotificationWhenUpToDate: false);
                                }

                                var quickFilters = new QuickFilters(settings.QuickFilters);
                                var highlighters = new HighlighterCollection();
                                services.RegisterInstance <IHighlighters>(highlighters);

                                actionCenter.Add(Build.Current);
                                actionCenter.Add(Change.Merge(Changelog.MostRecentPatches));
                                var application  = new App();
                                var dispatcher   = Dispatcher.CurrentDispatcher;
                                var uiDispatcher = new UiDispatcher(dispatcher);
                                services.RegisterInstance <IDispatcher>(uiDispatcher);

                                dispatcher.UnhandledException         += actionCenter.ReportUnhandledException;
                                TaskScheduler.UnobservedTaskException += actionCenter.ReportUnhandledException;

                                var windowViewModel = new MainWindowViewModel(services,
                                                                              settings,
                                                                              dataSources,
                                                                              quickFilters,
                                                                              actionCenter,
                                                                              updater);
                                navigationService.MainWindow = windowViewModel;

                                var window = new MainWindow(settings, windowViewModel);

                                settings.MainWindow.ClipToBounds(Desktop.Current);
                                settings.MainWindow.RestoreTo(window);
                                settings.AllowSave = true;

                                stopwatch.Stop();
                                Log.InfoFormat("Tailviewer started (took {0}ms), showing window...", stopwatch.ElapsedMilliseconds);

                                window.Show();
                                mutex?.SetListener(window);

                                return(application.Run());
                            }
                    }
                }
        }
コード例 #16
0
        public void TestCtor2()
        {
            _settings = new ApplicationSettings("foobar");
            var group = new DataSource {Id = Guid.NewGuid()};
            var source = new DataSource("foo") {Id = Guid.NewGuid(), ParentId = Guid.NewGuid()};
            _settings.DataSources.Add(group);
            _settings.DataSources.Add(source);
            _dataSources = new DataSources(_scheduler, _settings.DataSources);
            new Action(() => _model = new DataSourcesViewModel(_settings, _dataSources)).ShouldNotThrow();
            _model.Observable.Count.Should().Be(2);
            IDataSourceViewModel viewModel = _model.Observable[0];
            viewModel.Should().NotBeNull();
            viewModel.Should().BeOfType<MergedDataSourceViewModel>();
            viewModel.DataSource.Id.Should().Be(group.Id);
            var merged = (MergedDataSourceViewModel) viewModel;
            merged.Observable.Should().BeEmpty();

            viewModel = _model.Observable[1];
            viewModel.Should().NotBeNull();
            viewModel.Should().BeOfType<SingleDataSourceViewModel>();
        }
コード例 #17
0
        public void TestStoreRestore()
        {
            const string fileName = "applicationsettingstest.xml";
            var settings = new ApplicationSettings(fileName);
            settings.MainWindow.Left = 1;
            settings.MainWindow.Top = 2;
            settings.MainWindow.Width = 3;
            settings.MainWindow.Height = 4;
            settings.MainWindow.State = WindowState.Maximized;
            settings.DataSources.Add(new DataSource(@"SharpRemote.Host.1600.log")
                {
                    Id = Guid.NewGuid(),
                    FollowTail = true,
                    SearchTerm = "foobar",
                    LevelFilter = LevelFlags.Debug,
                    VisibleLogLine = new LogLineIndex(1),
                    ShowLineNumbers = false,
                    ActivatedQuickFilters =
                        {
                            Guid.NewGuid(),
                            Guid.NewGuid(),
                            Guid.NewGuid(),
                        }
                });
            settings.DataSources.Add(new DataSource(@"SharpRemote.Host.1700.log")
            {
                Id = Guid.NewGuid(),
                FollowTail = false,
                ShowLineNumbers = true,
            });
            List<Guid> guids = settings.DataSources[0].ActivatedQuickFilters.ToList();
            settings.QuickFilters.Add(new QuickFilter
                {
                    Value = "foobar",
                    IgnoreCase = true,
                    MatchType = QuickFilterMatchType.RegexpFilter,
                    IsInverted = true,
                });
            settings.QuickFilters.Add(new QuickFilter
            {
                Value = "clondykebar",
                IgnoreCase = false,
                MatchType = QuickFilterMatchType.WildcardFilter,
                IsInverted = false,
            });
            Guid filterId1 = settings.QuickFilters[0].Id;
            Guid filterId2 = settings.QuickFilters[1].Id;
            settings.DataSources.SelectedItem = settings.DataSources[0].Id;
            settings.Save().Should().BeTrue();

            settings = new ApplicationSettings(fileName);
            settings.Restore();
            settings.MainWindow.Left.Should().Be(1);
            settings.MainWindow.Top.Should().Be(2);
            settings.MainWindow.Width.Should().Be(3);
            settings.MainWindow.Height.Should().Be(4);
            settings.MainWindow.State.Should().Be(WindowState.Maximized);
            settings.DataSources.Count.Should().Be(2);
            settings.DataSources[0].File.Should().Be(@"SharpRemote.Host.1600.log");
            settings.DataSources[0].FollowTail.Should().BeTrue();
            settings.DataSources[0].ShowLineNumbers.Should().BeFalse();
            settings.DataSources[0].SearchTerm.Should().Be("foobar");
            settings.DataSources[0].LevelFilter.Should().Be(LevelFlags.Debug);
            settings.DataSources[0].VisibleLogLine.Should().Be(new LogLineIndex(1));
            settings.DataSources[0].ActivatedQuickFilters.Should().Equal(guids);
            settings.DataSources[1].File.Should().Be(@"SharpRemote.Host.1700.log");
            settings.DataSources[1].FollowTail.Should().BeFalse();
            settings.DataSources[1].ShowLineNumbers.Should().BeTrue();
            settings.DataSources.SelectedItem.Should().NotBe(Guid.Empty);
            settings.DataSources.SelectedItem.Should().Be(settings.DataSources[0].Id);

            settings.QuickFilters.Count.Should().Be(2);
            settings.QuickFilters[0].Id.Should().Be(filterId1);
            settings.QuickFilters[0].Value.Should().Be("foobar");
            settings.QuickFilters[0].IgnoreCase.Should().BeTrue();
            settings.QuickFilters[0].MatchType.Should().Be(QuickFilterMatchType.RegexpFilter);
            settings.QuickFilters[0].IsInverted.Should().BeTrue();

            settings.QuickFilters[1].Id.Should().Be(filterId2);
            settings.QuickFilters[1].Value.Should().Be("clondykebar");
            settings.QuickFilters[1].IgnoreCase.Should().BeFalse();
            settings.QuickFilters[1].MatchType.Should().Be(QuickFilterMatchType.WildcardFilter);
            settings.QuickFilters[1].IsInverted.Should().BeFalse();
        }
コード例 #18
0
        public void TestStore1()
        {
            string path = Path.GetTempPath();
            const string folderName = "ApplicationSettingsTest";
            const string fileName = "settings.xml";
            string fileFolder = Path.Combine(path, folderName);
            string filePath = Path.Combine(fileFolder, fileName);

            if (File.Exists(filePath))
                File.Delete(filePath);

            if (Directory.Exists(fileFolder))
                Directory.Delete(fileFolder);

            var settings = new ApplicationSettings(filePath);
            settings.QuickFilters.Add(new QuickFilter());
            settings.Save().Should().BeTrue();

            File.Exists(filePath);
            var settings2 = new ApplicationSettings(filePath);
            settings2.Restore();
            settings2.QuickFilters.Count.Should().Be(1);
        }
コード例 #19
0
        public void TestRestore4()
        {
            string fname = Path.GetTempFileName();
            var settings = new ApplicationSettings(fname);
            settings.DataSources.Add(new DataSource("dawadaw")
            {
                VisibleLogLine = 42,
                HorizontalOffset = 142.42
            });

            settings.Save();
            settings = new ApplicationSettings(fname);
            settings.Restore();

            settings.DataSources.Count.Should().Be(1);
            DataSource source = settings.DataSources[0];
            source.Should().NotBeNull();
            source.VisibleLogLine.Should().Be(42);
            source.HorizontalOffset.Should().Be(142.42);
        }