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.