private bool AddDirectoryEx(DvMediaContainer container, DirectoryInfo directory) { if (directory.Exists == false) return false; MediaBuilder.storageFolder storageInfo = new MediaBuilder.storageFolder(directory.Name); storageInfo.Searchable = true; storageInfo.IsRestricted = false; DvMediaContainer newContainer = DvMediaBuilder.CreateContainer(storageInfo); newContainer.OnChildrenRemoved += new DvDelegates.Delegate_OnChildrenRemove(this.Sink_OnChildRemoved); newContainer.Callback_UpdateMetadata = new DvMediaContainer.Delegate_UpdateMetadata(this.Sink_UpdateContainerMetadata); InnerMediaDirectory mediadir = new InnerMediaDirectory(); mediadir.directory = directory; mediadir.directoryname = directory.FullName; mediadir.watcher = new FileSystemWatcher(directory.FullName); mediadir.watcher.Changed += new FileSystemEventHandler(OnDirectoryChangedSink); mediadir.watcher.Created += new FileSystemEventHandler(OnDirectoryCreatedSink); mediadir.watcher.Deleted += new FileSystemEventHandler(OnDirectoryDeletedSink); mediadir.watcher.Renamed += new RenamedEventHandler(OnFileSystemRenameSink); mediadir.restricted = true; mediadir.readOnly = true; watcherTable.Add(mediadir.watcher,newContainer); mediadir.watcher.EnableRaisingEvents = true; newContainer.Tag = mediadir; FileInfo[] files = directory.GetFiles(); ArrayList addedFiles = new ArrayList(files.Length); foreach (FileInfo file in files) { IDvMedia newObj = CreateObjFromFile(file, new ArrayList()); if (newObj != null) { addedFiles.Add(newObj); totalFileCount++; } } newContainer.AddObjects(addedFiles, true); // Add the new container to an existing container. container.AddObject(newContainer, true); foreach (IDvMedia item in addedFiles) { if (item.Class.IsA(MediaBuilder.StandardMediaClasses.AudioItem)) { this.m_AudioItems.AddReference((DvMediaItem)item); } else if (item.Class.IsA(MediaBuilder.StandardMediaClasses.ImageItem)) { this.m_ImageItems.AddReference((DvMediaItem)item); } else if (item.Class.IsA(MediaBuilder.StandardMediaClasses.VideoItem)) { this.m_VideoItems.AddReference((DvMediaItem)item); } else if (item.Class.IsA(MediaBuilder.StandardMediaClasses.PlaylistContainer)) { // References to playlists are not allowed, so we have to build // completely new instances of the container and its resources. // However the new container can have references to the items. DvMediaContainer originalC = (DvMediaContainer) item; MediaBuilder.playlistContainer plcInfo = new MediaBuilder.playlistContainer(originalC.Title); DvMediaContainer newC = DvMediaBuilder.CreateContainer(plcInfo); foreach (DvMediaResource res in originalC.Resources) { ResourceBuilder.AllResourceAttributes resAttribs = new ResourceBuilder.AllResourceAttributes(); resAttribs.contentUri = res.ContentUri; foreach (string attribute in res.ValidAttributes) { object obj = res[attribute]; _RESATTRIB attribName = (_RESATTRIB) Enum.Parse(typeof(_RESATTRIB), attribute, true); switch (attribName) { case _RESATTRIB.bitrate: resAttribs.bitrate = (_UInt) obj; break; case _RESATTRIB.bitsPerSample: resAttribs.bitsPerSample = (_UInt) obj; break; case _RESATTRIB.colorDepth: resAttribs.colorDepth = (_UInt) obj; break; case _RESATTRIB.duration: resAttribs.duration = (_TimeSpan) obj; break; case _RESATTRIB.importUri: //do not allow import break; case _RESATTRIB.nrAudioChannels: resAttribs.nrAudioChannels = (_UInt) obj; break; case _RESATTRIB.protection: resAttribs.protection = (string) obj; break; case _RESATTRIB.protocolInfo: resAttribs.protocolInfo = new ProtocolInfoString(((ProtocolInfoString)obj).ToString()); break; case _RESATTRIB.resolution: resAttribs.resolution = (ImageDimensions) obj; break; case _RESATTRIB.sampleFrequency: resAttribs.sampleFrequency = (_UInt) obj; break; case _RESATTRIB.size: resAttribs.size = (_ULong) obj; break; } } DvMediaResource newCR = DvResourceBuilder.CreateResource(resAttribs, false); newCR.AllowImport = res.AllowImport; newCR.CheckAutomapFileExists = res.CheckAutomapFileExists; newCR.HideContentUri = res.HideContentUri; newCR.MakeStreamAtHttpGetTime = res.MakeStreamAtHttpGetTime; newCR.Tag = res.Tag; newC.AddResource(newCR); } // The child container should only have items. // If the child-container has child containers, then // then this is bad because those child playlists // should have been converted to a flat list // in the recursive building of the hierarchy foreach (DvMediaItem childItem in originalC.CompleteList) { newC.AddReference(childItem); } this.m_Playlists.AddObject(newC, true); } } DirectoryInfo[] directories = directory.GetDirectories(); foreach (DirectoryInfo dir in directories) { AddDirectoryEx(newContainer,dir); } totalDirectoryCount++; if (OnStatsChanged != null) OnStatsChanged(this); return true; }
private DvMediaResource BuildM3uResource(FileInfo file, string protInfo) { ResourceBuilder.AllResourceAttributes resInfo = new ResourceBuilder.AllResourceAttributes(); resInfo.contentUri = MediaResource.AUTOMAPFILE + file.FullName + "?format=m3u"; resInfo.protocolInfo = new ProtocolInfoString(protInfo); DvMediaResource newRes = DvResourceBuilder.CreateResource(resInfo, true); newRes.AllowImport = false; newRes.MakeStreamAtHttpGetTime = true; newRes.Tag = file; return newRes; }
private DvMediaItem CreateItemFromGenericVideoFile(FileInfo file) { string mime, mediaClass; MimeTypes.ExtensionToMimeType(file.Extension, out mime, out mediaClass); string protInfo = new System.Text.StringBuilder().AppendFormat("http-get:*:{0}:*", mime).ToString(); string title = Path.GetFileNameWithoutExtension(file.Name); string creator = file.Directory.Name; string genre = null; string album = null; long duration = 0; int bitrate = 0; long fileSize = file.Length; /* if ((file.Extension.ToUpper() == ".WMV") || (file.Extension.ToUpper() == ".ASF")) { MetadataParser.CMediaMetadataClass mp = new MetadataParser.CMediaMetadataClass(); mp.ParseMetadata_WindowsMediaPlayerFriendly(file.FullName, out title, out creator, out album, out genre, out duration, out bitrate, out fileSize); } */ if ((title == null) || (title == "")) { title = Path.GetFileNameWithoutExtension(file.Name); creator = file.Directory.Name; } MediaBuilder.videoItem info = new MediaBuilder.videoItem(title); info.creator = creator; if (genre != null) { info.genre = new string[1]; info.genre[0] = genre; } DvMediaItem newMedia = DvMediaBuilder.CreateItem(info); //DvMediaResource res = DvResourceBuilder.CreateResource_HttpGet(file,false); ResourceBuilder.AllResourceAttributes resInfo = new ResourceBuilder.AllResourceAttributes(); resInfo.contentUri = DvMediaResource.AUTOMAPFILE + file.FullName; resInfo.protocolInfo = new ProtocolInfoString(protInfo); resInfo.size = new _ULong((ulong)fileSize); if (bitrate > 0) { resInfo.bitrate = new _UInt((uint)bitrate/8); } if (duration > 0) { resInfo.duration = new _TimeSpan(new TimeSpan(duration)); } DvMediaResource res = DvResourceBuilder.CreateResource(resInfo, true); res.Tag = file; newMedia.AddResource(res); return newMedia; }