Platforms to show: All Mac Windows Linux Cross-Platform

/Mac64bit/Media Library/Media Library Threaded KSW


Required plugins for this example: MBS MacBase Plugin, MBS Mac64bit Plugin, MBS Main Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Mac64bit/Media Library/Media Library Threaded KSW

This example is the version from Tue, 14th May 2018.

Project "Media Library Threaded KSW.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits Window
Control lstMain Inherits Listbox
ControlInstance lstMain Inherits Listbox
End Control
Control tmrCheckThread Inherits Timer
ControlInstance tmrCheckThread Inherits Timer
EventHandler Sub Action() If xLoadMediaLibrary = Nil Then me.Mode = Timer.ModeOff Return End If Select Case xLoadMediaLibrary.State Case Thread.NotRunning me.Mode = Timer.ModeOff If xLoadMediaLibrary.TimedOut Then MsgBox "Media Library Timed Out" Else Dim i, iEnd As Integer iEnd = uBound(xLoadMediaLibrary.Playlists) For i =0 to iEnd lstMain.AddRow xLoadMediaLibrary.Playlists(i).Name lstMain.Cell(lstMain.LastIndex,1) = xLoadMediaLibrary.Playlists(i).Type Next End If xLoadMediaLibrary = Nil Return End Select End EventHandler
End Control
Control Label1 Inherits Label
ControlInstance Label1 Inherits Label
End Control
EventHandler Sub Open() lstMain.DeleteAllRows() xLoadMediaLibrary = New ThreadMediaLibrary xLoadMediaLibrary.Run() tmrCheckThread.Mode = Timer.ModeMultiple End EventHandler
Property xLoadMediaLibrary As ThreadMediaLibrary
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
Class ThreadMediaLibrary Inherits Thread
EventHandler Sub Run() Dim Options as New Dictionary Dim dStarTicks As Double Options.Value(MLMediaLibraryMBS.MLMediaLoadIncludeSourcesKey) = Array(MLMediaSourceMBS.MLMediaSourceiTunesIdentifier) MediaLibrary = New MLMediaLibraryMBS(Options) Const kTimeoutSeconds = 30 Dim dSources As Dictionary dStarTicks = Ticks Do dSources = MediaLibrary.mediaSources me.Sleep(1) me.TimedOut = (Ticks-dStarTicks)/60 > kTimeoutSeconds Loop Until dSources <> Nil or me.TimedOut If me.TimedOut Then Return System.DebugLog Str((Ticks-dStarTicks)/60) + " seconds to load media sources." Dim xRootGroup As MLMediaGroupMBS If dSources <> Nil Then if dSources.Count = 0 then return end if For Each x As Variant In dSources.Keys Dim key_name As String = x Dim xSource As MLMediaSourceMBS = dSources.Value(key_name) dStarTicks = Ticks Do Dim xTest As MLMediaGroupMBS = xSource.rootMediaGroup If xTest <> Nil Then Select Case xTest.TypeIdentifier Case MLMediaGroupMBS.MLiTunesRootGroupTypeIdentifier xRootGroup = xTest Else System.DebugLog "Found " + xTest.Identifier + "; wanted: " + MLMediaGroupMBS.MLiTunesRootGroupTypeIdentifier End Select End If me.Sleep(5) me.TimedOut = (Ticks-dStarTicks)/60 > kTimeoutSeconds Loop Until xRootGroup <> Nil or me.TimedOut If me.TimedOut Then Return System.DebugLog Str((Ticks-dStarTicks)/60) + " seconds to load root group." Next End If Dim xChildGroups() As MLMediaGroupMBS xChildGroups = xRootGroup.childGroups //Already loaded when we called //Does not require waiting below as calling "rootMediaGroup" populated this already 'If xRootGroup <> Nil Then 'dStarTicks = Ticks 'Do 'xChildGroups = xRootGroup.childGroups //Already loaded when we called 'me.Sleep(1) 'me.TimedOut = (Ticks-dStarTicks)/60 > kTimeoutSeconds 'Loop Until uBound(xChildGroups) <> -1 or me.TimedOut 'If me.TimedOut Then Return 'System.DebugLog Str((Ticks-dStarTicks)/60) + " seconds to load childGroups." 'End If For Each xThisChildGroup As MLMediaGroupMBS In xChildGroups Select Case xThisChildGroup.TypeIdentifier Case MLMediaGroupMBS.MLiTunesAudioBooksPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesFolderPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesGeniusPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesiTunesUPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesMoviesPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesMusicPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesMusicVideosPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesPodcastPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesPurchasedPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesSavedGeniusPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesTVShowsPlaylistTypeIdentifier, _ MLMediaGroupMBS.MLiTunesVideoPlaylistTypeIdentifier Dim xNew As New iTunesPlaylistKSW xNew.Name = xThisChildGroup.Name xNew.Type = xThisChildGroup.TypeIdentifier me.Playlists.Append xNew End Select Next End EventHandler
Property MediaLibrary As MLMediaLibraryMBS
Property Playlists() As iTunesPlaylistKSW
Property TimedOut As Boolean
End Class
Class iTunesPlaylistKSW
Property Name As String
Property Type As String
End Class
End Project

See also:

The items on this page are in the following plugins: MBS Mac64bit Plugin.


The biggest plugin in space...