private PlainFolder(FileServer server, DlnaMediaTypes types, VirtualFolder parent, DirectoryInfo dir, IEnumerable<string> exts) : base(parent, dir.Name) { Server = server; this.dir = dir; folders = (from d in dir.GetDirectories() let m = TryGetFolder(server, types, d) where m != null && m.ChildCount > 0 select m as IMediaFolder).ToList(); var rawfiles = from f in dir.GetFiles("*.*") select f; var files = new List<BaseFile>(); foreach (var f in rawfiles) { var ext = f.Extension; if (string.IsNullOrEmpty(ext) || !exts.Contains(ext.Substring(1), StringComparer.InvariantCultureIgnoreCase)) { continue; } try { files.Add(server.GetFile(this, f)); } catch (Exception ex) { server.Warn(f, ex); } } resources.AddRange(files); }
internal PlainFolder(FileServer server, VirtualFolder parent, DirectoryInfo dir) : base(parent, dir.Name) { Server = server; this.dir = dir; var rawfiles = from f in dir.GetFiles("*.*") select f; var files = new List<BaseFile>(); foreach (var f in rawfiles) { var ext = f.Extension; if (string.IsNullOrEmpty(ext) || !server.Filter.Filtered(ext.Substring(1))) { continue; } try { var file = server.GetFile(this, f); if (server.Allowed(file)) { files.Add(file); } } catch (Exception ex) { server.Warn(f, ex); } } Resources.AddRange(files); Folders = (from d in dir.GetDirectories() let m = TryGetFolder(server, d) where m != null && m.ChildCount > 0 select m as IMediaFolder).ToList(); }
public void Merge(IMediaFolder folder) { if (folder == null) { throw new ArgumentNullException("folder"); } merged.Add(folder); foreach (var item in folder.ChildItems) { AddResource(item); } foreach (var cf in folder.ChildFolders) { var ownFolder = (from f in folders where f is VirtualFolder && f.Title == cf.Title select f as VirtualFolder ).FirstOrDefault(); if (ownFolder == null) { ownFolder = new VirtualFolder(this, cf.Title, cf.Id); AdoptFolder(ownFolder); } ownFolder.Merge(cf); } }
private void DoRoot() { lock (this) { IMediaFolder newMaster; if (directories.Length == 1) { newMaster = new PlainRootFolder( this, types, directories[0] ); } else { var virtualMaster = new VirtualFolder( null, FriendlyName, Identifiers.GeneralRoot ); foreach (var d in directories) { virtualMaster.Merge( new PlainRootFolder(this, types, d) ); } newMaster = virtualMaster; } lock (ids) { ids.RegisterFolder(Identifiers.GeneralRoot, newMaster); ids.RegisterFolder( Identifiers.SamsungImages, new VirtualClonedFolder( newMaster, Identifiers.SamsungImages, types & DlnaMediaTypes.Image ) ); ids.RegisterFolder( Identifiers.SamsungAudio, new VirtualClonedFolder( newMaster, Identifiers.SamsungAudio, types & DlnaMediaTypes.Audio ) ); ids.RegisterFolder( Identifiers.SamsungVideo, new VirtualClonedFolder( newMaster, Identifiers.SamsungVideo, types & DlnaMediaTypes.Video ) ); } } Thumbnail(); }
protected PlainFolder(FileServer server, DlnaMediaTypes types, VirtualFolder parent, DirectoryInfo dir) : this(server, types, parent, dir, GetExtensions(types)) { }