/** * Create a new media list item for a give native media instance. * * @param mediaInstance native media instance * @return media list item */ private MediaListItem NewMediaListItem(IntPtr mediaInstance) { string name = NativeString.GetNativeString(LibVlc.libvlc_media_get_meta(mediaInstance, (int)libvlc_meta_e.libvlc_meta_Title)); string mrl = NativeString.GetNativeString(LibVlc.libvlc_media_get_mrl(mediaInstance)); List <MediaListItem> subItems; IntPtr subItemList = LibVlc.libvlc_media_subitems(mediaInstance); if (subItemList != IntPtr.Zero) { try { LibVlc.libvlc_media_list_lock(subItemList); subItems = new List <MediaListItem>(); for (int i = 0; i < LibVlc.libvlc_media_list_count(subItemList); i++) { IntPtr subItemInstance = LibVlc.libvlc_media_list_item_at_index(subItemList, i); subItems.Add(NewMediaListItem(subItemInstance)); LibVlc.libvlc_media_release(subItemInstance); } } finally { LibVlc.libvlc_media_list_unlock(subItemList); } LibVlc.libvlc_media_list_release(subItemList); } else { subItems = new List <MediaListItem>(0); } return(new MediaListItem(name, mrl, subItems)); }
/** * Get the number of items currently in the list. * * @return item count */ public int Size() { Logger.Debug("Size()"); try { LockList(); int size = LibVlc.libvlc_media_list_count(mediaListInstance); return(size); } finally { UnlockList(); } }
/** * Clear the list. */ public void Clear() { Logger.Debug("Clear()"); try { LockList(); // Traverse the list from the end back to the start... for (int i = LibVlc.libvlc_media_list_count(mediaListInstance) - 1; i >= 0; i--) { LibVlc.libvlc_media_list_remove_index(mediaListInstance, i); } } finally { UnlockList(); } }
/** * Get the list of items. * * @return list of items */ // FIXME readonly collection? public List <MediaListItem> Items() { Logger.Debug("Items()"); List <MediaListItem> result = new List <MediaListItem>(); try { LockList(); for (int i = 0; i < LibVlc.libvlc_media_list_count(mediaListInstance); i++) { IntPtr mediaInstance = LibVlc.libvlc_media_list_item_at_index(mediaListInstance, i); result.Add(NewMediaListItem(mediaInstance)); } } finally { UnlockList(); } return(result); }