Пример #1
0
 private static void DeviceWatcher_DeviceQueryRemove(object sender, DeviceNotificationEventArgs e)
 {
     if (DirectoryWatchers.ContainsKey(e.Name))
     {
         DirectoryWatchers[e.Name].Stop();
     }
 }
Пример #2
0
        private void RegisterDirectoryWatcher(string path)
        {
            DirectoryWatcher directoryWatcher = new DirectoryWatcher(path, OnFileEvent, OnError);

            directoryWatcher.Start();

            DirectoryWatchers.Add(path, directoryWatcher);
        }
Пример #3
0
        /// <summary>
        /// Runs the startup tasks.
        /// </summary>
        /// <returns>Task.</returns>
        protected override async Task RunStartupTasks()
        {
            // Do these before allowing the base method to run, which will invoke startup scheduled tasks
            await ServerKernel.LoadRepositories(ServerConfigurationManager).ConfigureAwait(false);

            await base.RunStartupTasks().ConfigureAwait(false);

            DirectoryWatchers.Start();

            Parallel.ForEach(GetExports <IServerEntryPoint>(), entryPoint => entryPoint.Run());
        }
Пример #4
0
        /// <summary>
        /// Called when a DirectoryWatcher has completed collecting
        /// </summary>
        /// <param name="watcher">The watcher that has completed collecting</param>
        /// <param name="count">The number of items found</param>
        void musicDirectoryWatcher_CollectingCompleted(DirectoryWatcher watcher, int count)
        {
            watcher.CollectingCompleted -= musicDirectoryWatcher_CollectingCompleted;
            var done = DirectoryWatchers.Where(dw => dw.Medium == watcher.Medium).All(dw => dw.CollectionState == CollectionState.Collected);

            if (done)
            {
                var masterPlaylist = watcher.Medium.MasterContainer;
                masterPlaylist.Loaded = true;
                masterPlaylist.Save();
            }
        }
Пример #5
0
        public static void Stop()
        {
            foreach (DirectoryWatcher directoryWatcher in DirectoryWatchers.Values)
            {
                directoryWatcher.Stop();
            }

            DirectoryWatchers.Clear();

            DeviceWatcher.DeviceArrived        -= DeviceWatcher_DeviceArrived;
            DeviceWatcher.DeviceQueryRemove    -= DeviceWatcher_DeviceQueryRemove;
            DeviceWatcher.DeviceRemoveComplete -= DeviceWatcher_DeviceRemoveComplete;
        }
Пример #6
0
        private static void DeviceWatcher_DeviceArrived(object sender, DeviceNotificationEventArgs e)
        {
            if (DirectoryWatchers.ContainsKey(e.Name))
            {
                DirectoryWatchers[e.Name].Start();
            }
            else
            {
                RegisterDirectoryWatcher(e.Name);
            }

            SendNotificationMessage(NotificationType.Add, e.Name);
        }
Пример #7
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         _files.Clear();
         if (_directoryWatchers != null)
         {
             _directoryWatchers.Changed -= OnChanged;
             _directoryWatchers.Dispose();
             _directoryWatchers = null;
         }
     }
 }
Пример #8
0
        public static void RegisterDirectoryWatcher(string path)
        {
            DirectoryWatcher directoryWatcher = new DirectoryWatcher(path, OnFileEvent, OnError);

            directoryWatcher.Start();

            if (DirectoryWatchers.ContainsKey(path))
            {
                DirectoryWatchers[path].Stop();
                DirectoryWatchers.Remove(path);
            }

            DirectoryWatchers.Add(path, directoryWatcher);
        }
Пример #9
0
        /// <summary>
        /// Registers resources that classes will depend on
        /// </summary>
        /// <returns>Task.</returns>
        protected override async Task RegisterResources()
        {
            ServerKernel = new Kernel(ServerConfigurationManager);

            await base.RegisterResources().ConfigureAwait(false);

            RegisterSingleInstance <IHttpResultFactory>(new HttpResultFactory(LogManager));

            RegisterSingleInstance <IServerApplicationHost>(this);
            RegisterSingleInstance <IServerApplicationPaths>(ApplicationPaths);

            RegisterSingleInstance(ServerKernel);
            RegisterSingleInstance(ServerConfigurationManager);

            RegisterSingleInstance <IWebSocketServer>(() => new AlchemyServer(Logger));

            RegisterSingleInstance <IIsoManager>(new PismoIsoManager(Logger));
            RegisterSingleInstance <IBlurayExaminer>(new BdInfoExaminer());

            ZipClient = new DotNetZipClient();
            RegisterSingleInstance(ZipClient);

            HttpServer = ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html");
            RegisterSingleInstance(HttpServer, false);

            ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel);
            RegisterSingleInstance(ServerManager);

            UserManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager);
            RegisterSingleInstance(UserManager);

            LibraryManager = new LibraryManager(ServerKernel, Logger, TaskManager, UserManager, ServerConfigurationManager);
            RegisterSingleInstance(LibraryManager);

            InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this);
            RegisterSingleInstance(InstallationManager);

            DirectoryWatchers = new DirectoryWatchers(LogManager, TaskManager, LibraryManager, ServerConfigurationManager);
            RegisterSingleInstance(DirectoryWatchers);

            ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, DirectoryWatchers, LogManager);
            RegisterSingleInstance(ProviderManager);

            RegisterSingleInstance <ILibrarySearchEngine>(() => new LuceneSearchEngine());

            SetKernelProperties();
            SetStaticProperties();
        }
Пример #10
0
        /// <summary>
        /// Runs the startup tasks.
        /// </summary>
        /// <returns>Task.</returns>
        public override async Task RunStartupTasks()
        {
            await base.RunStartupTasks().ConfigureAwait(false);

            DirectoryWatchers.Start();

            Logger.Info("Core startup complete");

            Parallel.ForEach(GetExports <IServerEntryPoint>(), entryPoint =>
            {
                try
                {
                    entryPoint.Run();
                }
                catch (Exception ex)
                {
                    Logger.ErrorException("Error in {0}", ex, entryPoint.GetType().Name);
                }
            });
        }
Пример #11
0
        /// <summary>
        /// Registers resources that classes will depend on
        /// </summary>
        /// <returns>Task.</returns>
        protected override async Task RegisterResources()
        {
            ServerKernel = new Kernel();

            await base.RegisterResources().ConfigureAwait(false);

            RegisterSingleInstance <IHttpResultFactory>(new HttpResultFactory(LogManager));

            RegisterSingleInstance <IServerApplicationHost>(this);
            RegisterSingleInstance <IServerApplicationPaths>(ApplicationPaths);

            RegisterSingleInstance(ServerKernel);
            RegisterSingleInstance(ServerConfigurationManager);

            RegisterSingleInstance <IWebSocketServer>(() => new AlchemyServer(Logger));

            IsoManager = new IsoManager();
            RegisterSingleInstance(IsoManager);

            RegisterSingleInstance <IBlurayExaminer>(() => new BdInfoExaminer());

            ZipClient = new DotNetZipClient();
            RegisterSingleInstance(ZipClient);

            UserDataRepository = new SqliteUserDataRepository(ApplicationPaths, JsonSerializer, LogManager);
            RegisterSingleInstance(UserDataRepository);

            UserRepository = await GetUserRepository().ConfigureAwait(false);

            RegisterSingleInstance(UserRepository);

            DisplayPreferencesRepository = new SqliteDisplayPreferencesRepository(ApplicationPaths, JsonSerializer, LogManager);
            RegisterSingleInstance(DisplayPreferencesRepository);

            ItemRepository = new SqliteItemRepository(ApplicationPaths, JsonSerializer, LogManager);
            RegisterSingleInstance(ItemRepository);

            UserManager = new UserManager(Logger, ServerConfigurationManager, UserRepository);
            RegisterSingleInstance(UserManager);

            LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataRepository, () => DirectoryWatchers);
            RegisterSingleInstance(LibraryManager);

            DirectoryWatchers = new DirectoryWatchers(LogManager, TaskManager, LibraryManager, ServerConfigurationManager);
            RegisterSingleInstance(DirectoryWatchers);

            ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, DirectoryWatchers, LogManager, LibraryManager);
            RegisterSingleInstance(ProviderManager);

            RegisterSingleInstance <ILibrarySearchEngine>(() => new LuceneSearchEngine(ApplicationPaths, LogManager, LibraryManager));

            MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ZipClient, ApplicationPaths, JsonSerializer, HttpClient);
            RegisterSingleInstance(MediaEncoder);

            var clientConnectionManager = new SessionManager(UserDataRepository, ServerConfigurationManager, Logger, UserRepository);

            RegisterSingleInstance <ISessionManager>(clientConnectionManager);

            HttpServer = await _httpServerCreationTask.ConfigureAwait(false);

            RegisterSingleInstance(HttpServer, false);

            ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager);
            RegisterSingleInstance(ServerManager);

            LocalizationManager = new LocalizationManager(ServerConfigurationManager);
            RegisterSingleInstance(LocalizationManager);

            DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataRepository, ItemRepository);
            RegisterSingleInstance(DtoService);

            var displayPreferencesTask = Task.Run(async() => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false));
            var itemsTask    = Task.Run(async() => await ConfigureItemRepositories().ConfigureAwait(false));
            var userdataTask = Task.Run(async() => await ConfigureUserDataRepositories().ConfigureAwait(false));

            await ConfigureNotificationsRepository().ConfigureAwait(false);

            await Task.WhenAll(itemsTask, displayPreferencesTask, userdataTask).ConfigureAwait(false);

            SetKernelProperties();
        }