處理複雜的AppleScript for iTunes。一個任務是累積包含給定軌道的所有播放列表的列表。我從別的地方找到了這個軌道對象(選擇或其他)。iTunes AppleScript:查詢包含特定曲目的所有播放列表
目前,我有一個片段是這樣的:
on containingPlaylists(theTrack)
tell application "iTunes"
set librarySource to the source named "Library"
set candidateLists to every user playlist in librarySource
set candidateId to (get id of theTrack)
set matchLists to {}
repeat with candidateList in candidateLists
set matchTracks to (file tracks in candidateList whose id = candidateId)
if (count of matchTracks) > 0 then
copy candidateList to end of matchLists
end if
end repeat
return matchLists
end tell
end containingPlaylists
這工作,但需要在循環,這是昂貴的(PERF)每個播放列表一個蘋果事件和扔掉的中間結果。我寧願做的是所有的東西在一個查詢:
set matchLists to every playlist in librarySource whose file tracks contain theTrack
但這當然不工作(特定的錯誤是「處理程序只能處理單個對象。」但不知道這是有見地)。我真的不確定語言/應用是否支持這樣的查詢。
任何人都可以確認/否認/提供任何見解?謝謝!
您的單行查詢的邏輯錯誤:您需要使用'數據庫ID爲
@foo:謝謝。你能幫我構建一個這樣的查詢嗎? (在這種情況下,簡單地替換「track的數據庫ID」具有相同的問題。)我正在查找包含該軌道的播放列表的列表(不需要軌道引用,只是列表引用) 。我正在構建一個龐大的批處理作業,AE的開銷會很大,我很樂意儘可能地避免它。再次感謝! – 2014-12-12 18:43:07
我試過了,但是iTunes每次都有胡塗;正如我所說,它解決多項目說明的能力很差。爲了最大限度地減少自動曝光負荷,您可以使用「告訴應用程序」iTunes來獲取每個軌道的{數據庫ID,容器ID},這會爲您提供所有軌道的數據ID以及包含它們的播放列表的ID。使用'NS [Counted] Set'魔法可以有效消除重複的數據庫ID,使用'NSDictionary'將它們映射到播放列表ID,然後使用另一個'NSSet'來搖出重複的ID,最後生成新的'playlist id'參考還剩下什麼。 –
foo
2014-12-13 23:51:34