Exemple #1
0
        private int BrowseFolder_AddItems(IRequest request, XmlDocument result, IMediaFolder root, int start, int requested)
        {
            var provided = 0;

            foreach (var i in root.ChildFolders)
            {
                if (start > 0)
                {
                    start--;
                    continue;
                }
                Browse_AddFolder(result, i);
                if (++provided == requested)
                {
                    break;
                }
            }
            if (provided != requested)
            {
                foreach (var i in root.ChildItems)
                {
                    if (start > 0)
                    {
                        start--;
                        continue;
                    }
                    Browse_AddItem(request, result, i);
                    if (++provided == requested)
                    {
                        break;
                    }
                }
            }
            return(provided);
        }
Exemple #2
0
 protected override void SortFolder(IMediaFolder folder,
                                    SimpleKeyedVirtualFolder series)
 {
     foreach (var f in folder.ChildFolders.ToList())
     {
         SortFolder(f, series);
     }
     foreach (var i in folder.ChildItems.ToList())
     {
         var title = i.Title;
         if (string.IsNullOrWhiteSpace(title))
         {
             continue;
         }
         var m = regSeries.Match(title);
         if (!m.Success)
         {
             continue;
         }
         var ser = m.Groups[1].Value;
         if (string.IsNullOrEmpty(ser))
         {
             continue;
         }
         series.GetFolder(ser.StemNameBase()).AddResource(i);
         folder.RemoveResource(i);
     }
 }
Exemple #3
0
        public bool MoveTo(IMediaFolder destination)
        {
            try
            {
                if (_device.IsReadOnly == true)
                {
                    return(false);
                }
                if (destination.Device.IsReadOnly == true)
                {
                    return(false);
                }

                this.Refresh();

                _parent.RemoveItemInternal(this);
                _info.MoveTo(Path.Combine(destination.AbsolutePath, _info.Name));

                MediaFolder folder = destination as MediaFolder;
                Debug.Assert(folder != null, "Do not support inter-device moves yet");
                folder.AddItemInternal(this);
                _parent = folder;
            }
            catch
            {
                return(false);
            }
            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Release the resources used by the current <see cref="GameInformation"/> instance.
        /// </summary>
        public void Dispose()
        {
            if (IgnoreDispose == true)
            {
                return;
            }

            if (this.DataPsp != null)
            {
                this.DataPsp.Dispose();
            }
            this.DataPsp = null;

            if (this.Icon != null)
            {
                this.Icon.Dispose();
            }

            if (this.Background != null)
            {
                this.Background.Dispose();
            }

            this.Folder = null;
        }
Exemple #5
0
   protected override void SortFolder(IMediaFolder folder,
 SimpleKeyedVirtualFolder series)
   {
       foreach (var f in folder.ChildFolders.ToList()) {
       SortFolder(f, series);
         }
         foreach (var i in folder.ChildItems.ToList()) {
       try {
         var title = i.Title;
         if (string.IsNullOrWhiteSpace(title)) {
       throw new Exception("No title");
         }
         var m = regSites.Match(title);
         if (!m.Success) {
       throw new Exception("No match");
         }
         var site = m.Groups["site"].Value;
         if (string.IsNullOrEmpty(site)) {
       throw new Exception("No site");
         }
         site = site.Replace(" ", "").Replace("\t", "").Replace("-", "");
         site = regNumberStrip.Replace(site, string.Empty).TrimEnd();
         if (!regWord.IsMatch(site)) {
       throw new Exception("Not a site");
         }
         folder.RemoveResource(i);
         series.GetFolder(site.StemNameBase()).AddResource(i);
       }
       catch (Exception ex) {
         DebugFormat("{0} - {1}", ex.Message, i.Title);
         folder.RemoveResource(i);
         series.AddResource(i);
       }
         }
   }
 private void RegisterNewMaster(IMediaFolder newMaster)
 {
     lock (ids)
     {
         ids.RegisterFolder(Identifiers.GENERAL_ROOT, newMaster);
         ids.RegisterFolder(
             Identifiers.SAMSUNG_IMAGES,
             new VirtualClonedFolder(
                 newMaster,
                 Identifiers.SAMSUNG_IMAGES,
                 types & DlnaMediaTypes.Image
                 )
             );
         ids.RegisterFolder(
             Identifiers.SAMSUNG_AUDIO,
             new VirtualClonedFolder(
                 newMaster,
                 Identifiers.SAMSUNG_AUDIO,
                 types & DlnaMediaTypes.Audio
                 )
             );
         ids.RegisterFolder(
             Identifiers.SAMSUNG_VIDEO,
             new VirtualClonedFolder(
                 newMaster,
                 Identifiers.SAMSUNG_VIDEO,
                 types & DlnaMediaTypes.Video
                 )
             );
     }
 }
        public override IMediaFolder Transform(IMediaFolder Root)
        {
            var rv = new VirtualFolder(null, Root.Title, Root.Id);

            EatAll(rv, Root);
            return(rv);
        }
Exemple #8
0
        public override IMediaFolder Transform(IMediaFolder oldRoot)
        {
            var root   = new VirtualClonedFolder(oldRoot);
            var titles = new SimpleKeyedVirtualFolder(root, "titles");

            SortFolder(root, titles);
            foreach (var i in root.ChildFolders.ToList())
            {
                root.ReleaseFolder(i);
            }
            foreach (var i in titles.ChildFolders.ToList())
            {
                if (i.ChildCount > 100)
                {
                    DebugFormat("Partioning folder {0}", i.Title);
                    using (var prefixer = new Prefixer())
                    {
                        PartitionChildren(i as VirtualFolder, prefixer);
                    }
                }

                root.AdoptFolder(i);
            }

            return(root);
        }
Exemple #9
0
        public void Merge(IMediaFolder folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException(nameof(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 static void Browse_AddFolder(XmlDocument result, IMediaFolder f)
        {
            var meta      = f as IMetaInfo;
            var container = result.CreateElement(string.Empty, "container", NS_DIDL);

            container.SetAttribute("restricted", "0");
            container.SetAttribute("childCount", f.ChildCount.ToString());
            container.SetAttribute("id", f.Id);
            var parent = f.Parent;

            container.SetAttribute("parentID", parent == null ? Identifiers.GENERAL_ROOT : parent.Id);

            var title = result.CreateElement("dc", "title", NS_DC);

            title.InnerText = f.Title;
            container.AppendChild(title);
            if (meta != null)
            {
                var date = result.CreateElement("dc", "date", NS_DC);
                date.InnerText = meta.InfoDate.ToString("o");
                container.AppendChild(date);
            }

            var objectClass = result.CreateElement("upnp", "class", NS_UPNP);

            objectClass.InnerText = "object.container";
            container.AppendChild(objectClass);
            result.DocumentElement?.AppendChild(container);
        }
Exemple #11
0
        private bool HandleFileDeleted(string fullPath, IMediaFolder master)
        {
            var info = new FileInfo(fullPath);

            if (store != null)
            {
                store.MaybeRemoveFile(info);
            }
            lock (ids)
            {
                var item   = ids.GetItemByPath(info.FullName) as IMediaResource;
                var folder = ids.GetItemByPath(info.Directory?.FullName) as VirtualFolder;

                if (item != null || folder != null)
                {
                    ids.RemoveItemByPath(fullPath);
                }
                foreach (var childFolder in master.ChildFolders)
                {
                    childFolder.RemoveResource(item);
                }
                if (folder != null)
                {
                    return(folder.RemoveResource(item));
                }
                return(true);
            }
        }
Exemple #12
0
        private void CheckSampleExists(IMediaFolder master)
        {
            if (store == null)
            {
                return;
            }

            // Check a random sample of files still exists, we don't really handle deletions well
            //  Ideally we would check the this file is valid for this mast folder
            //  But we don't know if the filetypes or paths have been changed
            int cleanedFile = 0;
            int sampleSize  = 0;

            foreach (var path in store.RandomSample())
            {
                sampleSize++;
                if (!File.Exists(path))
                {
                    cleanedFile++;
                    HandleFileDeleted(path, master);
                }
            }

            if (cleanedFile > 0)
            {
                NoticeFormat("Removed {0} out of sample of {1}", cleanedFile, sampleSize);
            }
        }
Exemple #13
0
 public override IMediaFolder Transform(IMediaFolder root)
 {
   if (filter == null) {
     return root;
   }
   return base.Transform(root);
 }
Exemple #14
0
 public override IMediaFolder Transform(IMediaFolder Root)
 {
   var root = new VirtualClonedFolder(Root);
   var series = new SimpleKeyedVirtualFolder(root, "Series");
   SortFolder(root, series);
   foreach (var f in series.ChildFolders.ToList()) {
     if (f.ChildCount < 2) {
       foreach (var file in f.ChildItems) {
         root.AddResource(file);
       }
       continue;
     }
     var fsmi = f as VirtualFolder;
     root.AdoptFolder(fsmi);
   }
   if (!cascade || root.ChildFolders.LongCount() <= 50) {
     return root;
   }
   var cascaded = new DoubleKeyedVirtualFolder(root, "Series");
   foreach (var i in root.ChildFolders.ToList()) {
     var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
     folder.AdoptFolder(i);
   }
   foreach (var i in root.ChildItems.ToList()) {
     var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
     folder.AddResource(i);
   }
   return cascaded;
 }
Exemple #15
0
        public void StartGameDirect(string path, bool debugging)
        {
            if (path == null)
            {
                return;
            }

            if (debugging == true)
            {
                _host.AttachDebugger();
            }
            this.StartInstance(false, debugging);

            // If the path contains 'iso', we assume it's an iso and load it via the UMD driver
            Games.GameInformation game = null;
            if (path.Contains("iso") == true)
            {
                if (File.Exists(path) == false)
                {
                    Log.WriteLine(Verbosity.Critical, Feature.General, "Unable to direct start UMD {0} - path not found", path);
                    return;
                }

                _host.CurrentInstance.Umd.Load(path, false);
                game = Games.GameLoader.FindGame(_host.CurrentInstance.Umd);
                if (game == null)
                {
                    Log.WriteLine(Verbosity.Critical, Feature.General, "Unable to find game in UMD ISO {0}", path);
                    return;
                }

                Log.WriteLine(Verbosity.Critical, Feature.General, "Direct starting UMD '{0}' from {1}", game.Parameters.Title, path);
            }
            else
            {
                // We need to get the folder on the memory stick device of this path
                IMediaFolder folder = _host.CurrentInstance.MemoryStick.Root.FindFolder(path);
                if (folder == null)
                {
                    Log.WriteLine(Verbosity.Critical, Feature.General, "Unable to find path {0}", path);
                    return;
                }
                game = Games.GameLoader.GetEbootGameInformation(folder);
                if (game == null)
                {
                    Log.WriteLine(Verbosity.Critical, Feature.General, "Unable to find eboot at path {0}", path);
                    return;
                }

                Log.WriteLine(Verbosity.Critical, Feature.General, "Direct starting eboot '{0}' from {1}", game.Parameters.Title, path);
            }
            Debug.Assert(game != null);
            if (game == null)
            {
                return;
            }

            (_host.CurrentInstance as Instance).SwitchToGame(game);
        }
 private FolderHierarchy GetFolderHierarchy(IMediaFolder root)
 {
     Argument.ThrowIfNull(root, "root");
     return(new FolderHierarchy(root)
     {
         Children = _mediaLibraryService.GetMediaFolders(root.MediaPath).Select(GetFolderHierarchy)
     });
 }
Exemple #17
0
 public override IMediaFolder Transform(IMediaFolder root)
 {
     if (filter == null)
     {
         return(root);
     }
     return(base.Transform(root));
 }
Exemple #18
0
 public override IMediaFolder Transform(IMediaFolder oldRoot)
 {
     if (!min.HasValue && !max.HasValue && !minWidth.HasValue &&
       !maxWidth.HasValue && !minHeight.HasValue && !maxHeight.HasValue) {
     return oldRoot;
       }
       return base.Transform(oldRoot);
 }
 protected VirtualClonedFolder(IMediaFolder parent, string name, string id, DlnaMediaTypes types)
     : base(parent, name, id)
 {
     this.types = types;
       Id = id;
       clone = parent;
       CloneFolder(this, parent);
       Cleanup();
 }
Exemple #20
0
 protected VirtualClonedFolder(IMediaFolder parent, string name, string id, DlnaMediaTypes types)
     : base(parent, name, id)
 {
     this.types = types;
     Id         = id;
     clone      = parent;
     CloneFolder(this, parent);
     Cleanup();
 }
Exemple #21
0
 public override IMediaFolder Transform(IMediaFolder root)
 {
     if (filter == null) {
     return root;
       }
       root = new VirtualClonedFolder(root);
       ProcessFolder(root);
       return root;
 }
Exemple #22
0
 public override IMediaFolder Transform(IMediaFolder Root)
 {
   if (Root == null) {
     throw new ArgumentNullException("Root");
   }
   var rv = new VirtualFolder(null, Root.Title, Root.Id);
   EatAll(rv, Root);
   return rv;
 }
Exemple #23
0
 private static void EatAll(IMediaFolder root, IMediaFolder folder)
 {
   foreach (var f in folder.ChildFolders.ToList()) {
     EatAll(root, f);
   }
   foreach (var c in folder.ChildItems.ToList()) {
     root.AddResource(c);
   }
 }
Exemple #24
0
 public override IMediaFolder Transform(IMediaFolder oldRoot)
 {
     if (!min.HasValue && !max.HasValue && !minWidth.HasValue &&
         !maxWidth.HasValue && !minHeight.HasValue && !maxHeight.HasValue)
     {
         return(oldRoot);
     }
     return(base.Transform(oldRoot));
 }
Exemple #25
0
        public bool CopyItem(string name, IMediaFolder destination)
        {
            IMediaItem item = this[name];

            if (item == null)
            {
                return(false);
            }
            return(item.CopyTo(destination));
        }
Exemple #26
0
        public bool CopyTo(IMediaFolder destination)
        {
            if (destination.Device.IsReadOnly == true)
            {
                return(false);
            }

            // TODO: Folder copy
            throw new NotImplementedException();
        }
Exemple #27
0
        internal GameInformation(GameType gameType, IMediaFolder folder, GameParameters parameters, Stream icon, Stream background, string uniqueId)
        {
            this.GameType   = gameType;
            this.UniqueID   = uniqueId;
            this.Parameters = parameters;
            this.Icon       = icon;
            this.Background = background;

            this.Folder = folder;
        }
Exemple #28
0
 private void RegisterFolderTree(IMediaFolder folder)
 {
   foreach (var f in folder.ChildFolders) {
     RegisterPath(f);
     RegisterFolderTree(f);
   }
   foreach (var i in folder.ChildItems) {
     RegisterPath(i);
   }
 }
Exemple #29
0
 public override IMediaFolder Transform(IMediaFolder root)
 {
     if (filter == null)
     {
         return(root);
     }
     root = new VirtualClonedFolder(root);
     ProcessFolder(root);
     return(root);
 }
Exemple #30
0
 private static void EatAll(IMediaFolder root, IMediaFolder folder)
 {
     foreach (var f in folder.ChildFolders.ToList())
     {
         EatAll(root, f);
     }
     foreach (var c in folder.ChildItems.ToList())
     {
         root.AddResource(c);
     }
 }
Exemple #31
0
        public override IMediaFolder Transform(IMediaFolder Root)
        {
            if (Root == null)
            {
                throw new ArgumentNullException("Root");
            }
            var rv = new VirtualFolder(null, Root.Title, Root.Id);

            EatAll(rv, Root);
            return(rv);
        }
Exemple #32
0
        public IMediaItem Find(string path)
        {
            if (path.Length == 0)
            {
                return(this);
            }

            int slashIndex = path.IndexOfAny(new char[] { '/', '\\' });

            if (slashIndex < 0)
            {
                if (path == ".")
                {
                    return(this);
                }
                else if (path == "..")
                {
                    return(_parent);
                }
                else
                {
                    return(this[path]);
                }
            }

            string localPath = path.Substring(0, slashIndex);
            string subPath   = path.Substring(slashIndex + 1);

            if (localPath.Length == 0)
            {
                return(this.Find(subPath));
            }

            if (localPath == ".")
            {
                return(this.Find(subPath));
            }
            if (localPath == "..")
            {
                return(_parent.Find(subPath));
            }

            IMediaFolder local = this[localPath] as IMediaFolder;

            if (local == null)
            {
                return(null);
            }
            if (subPath.Length == 0)
            {
                return(local);
            }
            return(local.Find(subPath));
        }
Exemple #33
0
 private void ProcessFolder(IMediaFolder root)
 {
     foreach (var f in root.ChildFolders) {
     ProcessFolder(f);
       }
       foreach (var f in root.ChildItems.ToList()) {
     if (Allowed(f)) {
       continue;
     }
     root.RemoveResource(f);
       }
 }
Exemple #34
0
 private void RegisterFolderTree(IMediaFolder folder)
 {
     foreach (var f in folder.ChildFolders)
     {
         RegisterPath(f);
         RegisterFolderTree(f);
     }
     foreach (var i in folder.ChildItems)
     {
         RegisterPath(i);
     }
 }
Exemple #35
0
 private void ProcessFolder(IMediaFolder root)
 {
     foreach (var f in root.ChildFolders) {
     ProcessFolder(f);
       }
       foreach (var f in root.ChildItems.ToList()) {
     if (filter.IsMatch(f.Title)) {
       continue;
     }
     root.RemoveResource(f);
       }
 }
 private void CloneFolder(VirtualFolder parent, IMediaFolder folder)
 {
     foreach (var f in folder.ChildFolders) {
     var vf = new VirtualFolder(parent, f.Title, f.Id);
     parent.AdoptFolder(vf);
     CloneFolder(vf, f);
       }
       foreach (var i in folder.ChildItems) {
     if ((types & i.MediaType) == i.MediaType) {
       parent.AddResource(i);
     }
       }
 }
Exemple #37
0
        public override IMediaFolder Transform(IMediaFolder oldRoot)
        {
            var root   = new VirtualClonedFolder(oldRoot);
            var sorted = new SimpleKeyedVirtualFolder(root, Name);

            SortFolder(root, sorted);
            DebugFormat("sort {0} - {1}", sorted.ChildFolders.Count(), sorted.ChildItems.Count());
            DebugFormat("root {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());
            foreach (var f in sorted.ChildFolders.ToList())
            {
                if (f.ChildCount < 2)
                {
                    foreach (var file in f.ChildItems)
                    {
                        root.AddResource(file);
                    }
                    continue;
                }

                var fsmi = f as VirtualFolder;
                root.AdoptFolder(fsmi);
            }

            foreach (var f in sorted.ChildItems.ToList())
            {
                root.AddResource(f);
            }
            DebugFormat("merg {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());
            MergeFolders(root, root);
            DebugFormat("done {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());

            if (!cascade || root.ChildFolders.LongCount() <= 50)
            {
                return(root);
            }
            var cascaded = new DoubleKeyedVirtualFolder(root, "Series");

            foreach (var i in root.ChildFolders.ToList())
            {
                var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
                folder.AdoptFolder(i);
            }

            foreach (var i in root.ChildItems.ToList())
            {
                var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
                folder.AddResource(i);
            }

            return(cascaded);
        }
Exemple #38
0
        public bool CopyItem(string name, IMediaFolder destination)
        {
            if (destination.Device.IsReadOnly == true)
            {
                return(false);
            }

            IMediaItem item = this[name];

            if (item == null)
            {
                return(false);
            }
            return(item.CopyTo(destination));
        }
        // SDK location: /user/pspiofilemgr.h:243
        // SDK declaration: int sceIoChdir(const char *path);
        public int sceIoChdir(int pathName)
        {
            string       path   = _kernel.ReadString(( uint )pathName);
            IMediaFolder folder = ( IMediaFolder )_kernel.FindPath(path);

            if (folder == null)
            {
                Log.WriteLine(Verbosity.Normal, Feature.Bios, "sceIoChdir: could not find path {0}", path);
                return(-1);
            }

            _kernel.CurrentPath = folder;

            return(0);
        }
Exemple #40
0
 public static bool RecursiveSearchItem(this IMediaFolder master, string itemID)
 {
     if (master.ChildItems.Any(c => c.Id == itemID))
     {
         return(true);
     }
     foreach (var folder in master.ChildFolders)
     {
         if (folder.RecursiveSearchItem(itemID))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #41
0
        public void AdoptFolder(IMediaFolder folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException(nameof(folder));
            }
            var vf = folder.Parent as VirtualFolder;

            vf?.ReleaseFolder(folder);
            folder.Parent = this;
            if (!Folders.Contains(folder))
            {
                Folders.Add(folder);
            }
        }
Exemple #42
0
 private void ProcessFolder(IMediaFolder root)
 {
     foreach (var f in root.ChildFolders)
     {
         ProcessFolder(f);
     }
     foreach (var f in root.ChildItems.ToList())
     {
         if (DoFilter(f))
         {
             continue;
         }
         root.RemoveResource(f);
     }
 }
 private void ProcessFolder(IMediaFolder root)
 {
     foreach (var f in root.ChildFolders) {
     ProcessFolder(f);
       }
       foreach (var f in root.ChildItems.ToList()) {
     var i = f as IMetaInfo;
     if (i == null) {
       continue;
     }
     if (i.InfoSize.HasValue && i.InfoSize.Value >= minSize) {
       continue;
     }
     root.RemoveResource(f);
       }
 }
        public override IMediaFolder Transform(IMediaFolder Root)
        {
            var r = new VirtualClonedFolder(Root);
              var cross = from f in r.ChildFolders
                  from t in r.ChildFolders
                  where f != t
                  orderby f.Title, t.Title
                  select new { f = f as VirtualFolder, t = t as VirtualFolder };
              foreach (var c in cross) {
            MergeFolders(c.f, c.t);
              }

              TransformInternal(r, r);
              MergeFolders(r, r);
              return r;
        }
Exemple #45
0
 public override IMediaFolder Transform(IMediaFolder Root)
 {
   var root = new VirtualClonedFolder(Root);
   var titles = new SimpleKeyedVirtualFolder(root, "titles");
   SortFolder(root, titles);
   foreach (var i in root.ChildFolders.ToList()) {
     root.ReleaseFolder(i);
   }
   foreach (var i in titles.ChildFolders.ToList()) {
     if (i.ChildCount > 100) {
       ErrorFormat("Partioning folder {0}", i.Title);
       PartitionChildren(i as VirtualFolder, new Prefixer());
     }
     root.AdoptFolder(i);
   }
   return root;
 }
Exemple #46
0
        public override IMediaFolder Transform(IMediaFolder oldRoot)
        {
            var root = new VirtualClonedFolder(oldRoot);
              var sorted = new SimpleKeyedVirtualFolder(root, Name);
              SortFolder(root, sorted);
              DebugFormat("sort {0} - {1}", sorted.ChildFolders.Count(), sorted.ChildItems.Count());
              DebugFormat("root {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());
              foreach (var f in sorted.ChildFolders.ToList()) {
            if (f.ChildCount < 2) {
              foreach (var file in f.ChildItems) {
            root.AddResource(file);
              }
              continue;
            }
            var fsmi = f as VirtualFolder;
            root.AdoptFolder(fsmi);
              }
              foreach (var f in sorted.ChildItems.ToList()) {
            root.AddResource(f);
              }
              DebugFormat("merg {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());
              MergeFolders(root, root);
              DebugFormat("done {0} - {1}", root.ChildFolders.Count(), root.ChildItems.Count());

              if (!cascade || root.ChildFolders.LongCount() <= 50) {
            return root;
              }
              var cascaded = new DoubleKeyedVirtualFolder(root, "Series");
              foreach (var i in root.ChildFolders.ToList()) {
            var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
            folder.AdoptFolder(i);
              }
              foreach (var i in root.ChildItems.ToList()) {
            var folder = cascaded.GetFolder(i.Title.StemCompareBase().Substring(0, 1).ToUpper());
            folder.AddResource(i);
              }
              return cascaded;
        }
Exemple #47
0
 private static void SortFolder(IMediaFolder folder,
                                SimpleKeyedVirtualFolder series)
 {
   foreach (var f in folder.ChildFolders.ToList()) {
     SortFolder(f, series);
   }
   foreach (var i in folder.ChildItems.ToList()) {
     var title = i.Title;
     if (string.IsNullOrWhiteSpace(title)) {
       continue;
     }
     var m = re_series.Match(title);
     if (!m.Success) {
       continue;
     }
     var ser = m.Groups[1].Value;
     if (string.IsNullOrEmpty(ser)) {
       continue;
     }
     series.GetFolder(ser.StemNameBase()).AddResource(i);
     folder.RemoveResource(i);
   }
 }
 public VirtualClonedFolder(IMediaFolder parent, string name, DlnaMediaTypes types)
     : this(parent, name, name, types)
 {
 }
Exemple #49
0
        /// <summary>
        /// Get <see cref="GameInformation"/> from the given EBOOT folder.
        /// </summary>
        /// <param name="folder">The folder containing the EBOOT.</param>
        /// <returns>A <see cref="GameInformation"/> instance representing the game, or <c>null</c> if an error occurred.</returns>
        public static GameInformation GetEbootGameInformation( IMediaFolder folder )
        {
            Debug.Assert( folder != null );
            if( folder == null )
                return null;

            IMediaFile file = folder[ "EBOOT.PBP" ] as IMediaFile;
            if( file == null )
                return null;

            using( Stream stream = file.OpenRead() )
            {
                PbpReader reader = new PbpReader( stream );

                GameParameters gameParams;
                using( Stream pdbStream = reader.Read( stream, PbpReader.PbpEntryType.Param ) )
                    gameParams = ReadSfo( pdbStream );

                // Only accept games
                if( ( gameParams.Category != GameCategory.MemoryStickGame ) &&
                    ( gameParams.Category != GameCategory.UmdGame ) )
                    return null;

                Stream icon = null;
                Stream background = null;
                if( reader.ContainsEntry( PbpReader.PbpEntryType.Icon0 ) == true )
                    icon = reader.Read( stream, PbpReader.PbpEntryType.Icon0 );
                //if( reader.ContainsEntry( PbpReader.PbpEntryType.Pic1 ) == true )
                //	background = reader.Read( stream, PbpReader.PbpEntryType.Pic1 );

                return new GameInformation( GameType.Eboot, folder, gameParams, icon, background, null );
            }
        }
        internal GameInformation( GameType gameType, IMediaFolder folder, GameParameters parameters, Stream icon, Stream background, string uniqueId )
        {
            this.GameType = gameType;
            this.UniqueID = uniqueId;
            this.Parameters = parameters;
            this.Icon = icon;
            this.Background = background;

            this.Folder = folder;
        }
        /// <summary>
        /// Release the resources used by the current <see cref="GameInformation"/> instance.
        /// </summary>
        public void Dispose()
        {
            if( IgnoreDispose == true )
                return;

            if( this.DataPsp != null )
                this.DataPsp.Dispose();
            this.DataPsp = null;

            if( this.Icon != null )
                this.Icon.Dispose();

            if( this.Background != null )
                this.Background.Dispose();

            this.Folder = null;
        }
 public VirtualFolder(IMediaFolder parent, string name, string id)
 {
     Parent = parent;
       Id = id;
       Name = name;
 }
 private FolderHierarchy GetFolderHierarchy(IMediaFolder root) {
     Argument.ThrowIfNull(root, "root");
     return new FolderHierarchy(root) {Children = _mediaLibraryService.GetMediaFolders(root.MediaPath).Select(GetFolderHierarchy)};
 }
 public void ReleaseFolder(IMediaFolder folder)
 {
     folders.Remove(folder);
 }
 public VirtualFolder(IMediaFolder parent, string name)
     : this(parent, name, name)
 {
 }
 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);
       }
 }
 public void AdoptFolder(IMediaFolder folder)
 {
     if (folder == null) {
     throw new ArgumentNullException("folder");
       }
       var vf = folder.Parent as VirtualFolder;
       if (vf != null) {
     vf.ReleaseFolder(folder);
       }
       folder.Parent = this;
       if (!folders.Contains(folder)) {
     folders.Add(folder);
       }
 }
Exemple #58
0
        private static void Browse_AddFolder(XmlDocument result, IMediaFolder f)
        {
            var meta = f as IMetaInfo;
              var container = result.CreateElement(string.Empty, "container", NS_DIDL);
              container.SetAttribute("restricted", "0");
              container.SetAttribute("childCount", f.ChildCount.ToString());
              container.SetAttribute("id", f.Id);
              var parent = f.Parent;
              container.SetAttribute("parentID", parent == null ? Identifiers.GENERAL_ROOT : parent.Id);

              var title = result.CreateElement("dc", "title", NS_DC);
              title.InnerText = f.Title;
              container.AppendChild(title);
              if (meta != null) {
            var date = result.CreateElement("dc", "date", NS_DC);
            date.InnerText = meta.InfoDate.ToString("o");
            container.AppendChild(date);
              }

              var objectClass = result.CreateElement("upnp", "class", NS_UPNP);
              objectClass.InnerText = "object.container";
              container.AppendChild(objectClass);
              result.DocumentElement?.AppendChild(container);
        }
Exemple #59
0
   private int BrowseFolder_AddItems(IRequest request, XmlDocument result,
 IMediaFolder root, int start,
 int requested)
   {
       var provided = 0;
         foreach (var i in root.ChildFolders) {
       if (start > 0) {
         start--;
         continue;
       }
       Browse_AddFolder(result, i);
       if (++provided == requested) {
         break;
       }
         }
         if (provided != requested) {
       foreach (var i in root.ChildItems) {
         if (start > 0) {
       start--;
       continue;
         }
         Browse_AddItem(request, result, i);
         if (++provided == requested) {
       break;
         }
       }
         }
         return provided;
   }
Exemple #60
0
 public abstract IMediaFolder Transform(IMediaFolder root);