Наследование: NMaier.SimpleDlna.Utilities.Logging
Пример #1
0
 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();
 }
Пример #2
0
        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();
        }
Пример #3
0
 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");
 }
Пример #4
0
    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;
      }
    }
Пример #5
0
 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;
 }
Пример #6
0
        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;
        }
Пример #7
0
 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;
       }
 }