public FileServer(DlnaMediaTypes types, Identifiers ids, params DirectoryInfo[] directories) { this.types = types; this.ids = ids; this.directories = directories.Distinct().ToArray(); if (this.directories.Length == 0) { throw new ArgumentException( "Provide one or more directories", "directories" ); } var parent = this.directories[0].Parent; if (parent == null) { parent = this.directories[0]; } if (this.directories.Length == 1) { FriendlyName = string.Format( "{0} ({1})", this.directories[0].Name, parent.FullName ); } else { FriendlyName = string.Format( "{0} ({1}) + {2}", this.directories[0].Name, parent.FullName, this.directories.Length - 1 ); } watchers = (from d in directories select new FileSystemWatcher(d.FullName)).ToArray(); uuid = DeriveUUID(); }
public FileServer(DlnaMediaTypes types, Identifiers ids, params DirectoryInfo[] directories) { this.types = types; this.ids = ids; this.directories = directories.Distinct().ToArray(); Filter = new ExtensionFilter(this.types.GetExtensions()); if (this.directories.Length == 0) { throw new ArgumentException( "Provide one or more directories", nameof(directories) ); } var parent = this.directories[0].Parent ?? this.directories[0]; FriendlyName = this.directories.Length == 1 ? $"{this.directories[0].Name} ({parent.FullName})" : $"{this.directories[0].Name} ({parent.FullName}) + {this.directories.Length - 1}"; watchers = (from d in directories select new FileSystemWatcher(d.FullName)).ToArray(); UUID = DeriveUUID(); }
public void ByDateView_RegisterFolder_Test() { var ids = new Identifiers(ComparerRepository.Lookup("title"), false); ids.AddView("bydate"); var f = new MediaFolder(); var addRes = new[] { new MediaResource() { Path = @"C:\somepath\resrouceZ.mkv", Title = "Z" } ,new MediaResource() { Path = @"C:\somepath\resrouceY.mkv", Title = "Y" } ,new MediaResource() { Path = @"C:\somepath\resrouceV.mkv", Title = "V" } ,new MediaResource() { Path = @"C:\somepath\resrouceO.mkv", Title = "O" } ,new MediaResource() { Path = @"C:\somepath\resrouceP.mkv", Title = "P" } ,new MediaResource() { Path = @"C:\somepath\resrouceQ.mkv", Title = "Q" } ,new MediaResourceMockWithInfo() { Path = @"C:\somepath\resrouceM.mkv", Title = "M", InfoDate = new DateTime(2015,1,1) } ,new MediaResource() { Path = @"C:\somepath\resrouceE.mkv", Title = "E" } }; f.AccessorChildItems.AddRange(addRes); f.AccessorChildFolders.Add(new MediaFolder() { Path = @"C:\somepath" }); ids.RegisterFolder("tempid", f); var res = ids.Resources; Assert.IsTrue(res.Select(r => r.Target).ToList().Contains(addRes[2]), "Not contains added resource"); Assert.IsNotNull(ids.GetItemByPath("/:/:2015-Jan"), @"GetItemByPath(""/:/:2015-Jan"") failed"); Assert.AreEqual(ids.GetItemById(addRes[2].Id), addRes[2], "GetItemById(addRes[2].Id) failed"); }
private void StartFileServer() { if (!Description.Active) { state = State.Stopped; return; } var start = DateTime.Now; try { state = State.Loading; var ids = new Identifiers(ComparerRepository.Lookup(Description.Order), Description.OrderDescending); foreach (var v in Description.Views) { ids.AddView(v); } var dirs = (from i in Description.Directories let d = new DirectoryInfo(i) where d.Exists select d).ToArray(); if (dirs.Length == 0) { throw new InvalidOperationException("No remaining directories"); } fileServer = new FileServer(Description.Types, ids, dirs) { FriendlyName = Description.Name }; #if !DEBUG if (cacheFile != null) { fileServer.SetCacheFile(cacheFile); } #endif fileServer.Changing += (o, e) => { state = State.Refreshing; }; fileServer.Changed += (o, e) => { state = Description.Active ? State.Running : State.Stopped; }; fileServer.Load(); var authorizer = new HttpAuthorizer(); if (Description.Ips.Length != 0) { authorizer.AddMethod(new IPAddressAuthorizer(Description.Ips)); } if (Description.Macs.Length != 0) { authorizer.AddMethod(new MacAuthorizer(Description.Macs)); } if (Description.UserAgents.Length != 0) { authorizer.AddMethod(new UserAgentAuthorizer(Description.UserAgents)); } fileServer.Authorizer = authorizer; server.RegisterMediaServer(fileServer); state = State.Running; var elapsed = DateTime.Now - start; LogManager.GetLogger("State").Logger.Log( GetType(), Level.Notice, string.Format( "{0} loaded in {1:F2} seconds", fileServer.FriendlyName, elapsed.TotalSeconds), null ); } catch (Exception ex) { server.ErrorFormat("Failed to start {0}, {1}", Description.Name, ex); Description.ToggleActive(); state = State.Stopped; } }
private static FileServer SetupFileServer(Options options, DlnaMediaTypes types, DirectoryInfo[] d) { var ids = new Identifiers( ComparerRepository.Lookup(options.Order), options.DescendingOrder); foreach (var v in options.Views) { try { ids.AddView(v); } catch (RepositoryLookupException) { throw new GetOptException("Invalid view " + v); } } var fs = new FileServer(types, ids, d); if (!string.IsNullOrEmpty(options.FriendlyName)) { fs.FriendlyName = options.FriendlyName; } try { if (options.CacheFile != null) { fs.SetCacheFile(options.CacheFile); } fs.Load(); if (!options.Rescanning) { fs.Rescanning = false; } } catch (Exception) { fs.Dispose(); throw; } return fs; }
private static FileServer ConfiguraServidorDeArquivos(Opcoes opcoes, DlnaMediaTypes tipos, DirectoryInfo[] d) { var ids = new Identifiers(ComparerRepository.Lookup(opcoes.Ordem), opcoes.Ascendente); var fs = new FileServer(tipos, ids, d); try { if (opcoes.ArquivoCache != null) { fs.SetCacheFile(opcoes.ArquivoCache); } fs.Load(); } catch (Exception) { fs.Dispose(); throw; } return fs; }
private void StartFileServer() { if (!Description.Active) { state = State.Stopped; return; } try { state = State.Loading; var ids = new Identifiers(ComparerRepository.Lookup(Description.Order), Description.OrderDescending); foreach (var v in Description.Views) { ids.AddView(v); } var dirs = (from i in Description.Directories let d = new DirectoryInfo(i) where d.Exists select d).ToArray(); if (dirs.Length == 0) { throw new InvalidOperationException("No remaining directories"); } fileServer = new FileServer(Description.Types, ids, dirs) { FriendlyName = Description.Name }; #if !DEBUG if (cacheFile != null) { fileServer.SetCacheFile(cacheFile); } #endif fileServer.Changing += (o, e) => { state = State.Refreshing; }; fileServer.Changed += (o, e) => { state = Description.Active ? State.Running : State.Stopped; }; fileServer.Load(); server.RegisterMediaServer(fileServer); state = State.Running; } catch (Exception ex) { server.ErrorFormat("Failed to start {0}, {1}", Description.Name, ex); Description.ToggleActive(); state = State.Stopped; } }