Пример #1
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            var changed     = false;
            var openWindows = nativeMethods.GetOpenWindows();

            lock (@lock)
            {
                var closedWindows = windows.Where(w => openWindows.All(ow => ow != w.Handle)).ToList();
                var openedWindows = openWindows.Where(ow => windows.All(w => w.Handle != ow) && BelongsToInstance(ow)).ToList();

                foreach (var window in closedWindows)
                {
                    changed = true;
                    windows.Remove(window);
                }

                foreach (var window in openedWindows)
                {
                    changed = true;
                    windows.Add(new ExternalApplicationWindow(icon, nativeMethods, window));
                }

                foreach (var window in windows)
                {
                    window.Update();
                }
            }

            if (changed)
            {
                WindowsChanged?.Invoke();
            }

            timer.Start();
        }
        private void Instance_Terminated(int id)
        {
            lock (@lock)
            {
                instances.Remove(instances.First(i => i.Id == id));
            }

            WindowsChanged?.Invoke();
        }
        private void InitializeInstance(IProcess process)
        {
            lock (@lock)
            {
                var instanceLogger = logger.CloneFor($"{Name} ({process.Id})");
                var instance       = new ExternalApplicationInstance(Icon, instanceLogger, nativeMethods, process);

                instance.Terminated     += Instance_Terminated;
                instance.WindowsChanged += () => WindowsChanged?.Invoke();
                instance.Initialize();

                instances.Add(instance);
            }
        }
Пример #4
0
        internal void CreateNewInstanceInvoke(string startUrl = null)
        {
            var id             = ++instanceIdCounter;
            var isMainInstance = instances.Count == 0;
            var numWindows     = instances.Count;
            var instanceLogger = new ModuleLogger(logger, nameof(MainWindow));
            var instance       = new BrowserApplicationInstance(appSettings, messageBox, id, isMainInstance, numWindows, startUrl, instanceLogger, text);

            instance.PopupRequested       += Instance_PopupRequested;
            instance.TerminationRequested += Instance_TerminationRequested;
            instance.Terminated           += Instance_Terminated;

            instance.Activate();
            instances.Add(instance);
            logger.Info($"Created browser instance {instance.Id}.");
            WindowsChanged?.Invoke();
        }
Пример #5
0
        private void CreateNewInstance(string url = null)
        {
            var id             = ++instanceIdCounter;
            var isMainInstance = instances.Count == 0;
            var instanceLogger = logger.CloneFor($"Browser Instance #{id}");
            var startUrl       = url ?? settings.StartUrl;
            var instance       = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, fileSystemDialog, messageBox, instanceLogger, text, uiFactory, startUrl);

            instance.ConfigurationDownloadRequested += (fileName, args) => ConfigurationDownloadRequested?.Invoke(fileName, args);
            instance.PopupRequested       += Instance_PopupRequested;
            instance.Terminated           += Instance_Terminated;
            instance.TerminationRequested += () => TerminationRequested?.Invoke();

            instance.Initialize();
            instances.Add(instance);

            logger.Info($"Created browser instance {instance.Id}.");
            WindowsChanged?.Invoke();
        }
        private void Instance_ResetRequested()
        {
            logger.Info("Attempting to reset browser...");

            foreach (var instance in instances)
            {
                instance.Terminated -= Instance_Terminated;
                instance.Terminate();
                logger.Info($"Terminated browser instance {instance.Id}.");
            }

            instances.Clear();
            WindowsChanged?.Invoke();

            if (settings.DeleteCookiesOnStartup && settings.DeleteCookiesOnShutdown)
            {
                DeleteCookies();
            }

            nativeMethods.EmptyClipboard();
            CreateNewInstance();
            logger.Info("Successfully reset browser.");
        }