Hm, nice Idea…
this script scans your download for any folders containing media data that iTunes can play,
and adds them to a corresponding playlist within iTunes
duplicates will be removed and playlist names no not contain _
just give it a try and see =)
-- hubionmac.com 10.10.2009
-- scans download folder for folders containing media data iTunes can play
-- creates a corresponding playlist within itunes
property special_bigChars : {"Ä", "Ã…", "Ç", "É", "Ñ", "Ö", "Ü", "À", "Ã", "Õ", "Ÿ", "Â", "Ê", "Ã", "Ë", "È", "Ã", "ÃŽ", "Ã", "ÃŒ", "Ó", "Ô", "Ã’", "Ú", "Û", "Ù"}
property special_smallChars : {"ä", "Ã¥", "ç", "é", "ñ", "ö", "ü", "à ", "ã", "õ", "ÿ", "â", "ê", "á", "ë", "è", "Ã", "î", "ï", "ì", "ó", "ô", "ò", "ú", "û", "ù"}
property action_list02 : {"01-Abcd Efg", "02-Abcd efg", "03-ABCD EFG", "04-abcd efg"}
global folder2Scan, actionid
tell application "Finder"
set actionid to (my get_selection_index(action_list02, "Format of Playlist_names (cancel for no changes)", false))
set folder2Scan to folder "Downloads" of home
set thefolders to every container of folder2Scan
--get my download folder
set thefolders_list to my makeDownloadPlaylist()
--clean the folderlist from old playlist // option dialog would be nice
my clean_iTunes_folder(thefolders_list)
-- make a folder playlist called itunes or get reference to it
repeat with thefolder in thefolders
set foldername to my do_string(actionid, my replace_chars((name of thefolder), "_", " "))
--now the script loops through every folder, creates a corrensponding playlist
-- if there created playlist is empty after all, it will be removed again =)
tell application "iTunes"
set current_playlist to my check_playlist(thefolders_list, foldername)
add (thefolder as alias) to current_playlist
if (count of every track of current_playlist) = 0 then
delete current_playlist
else
--clean the playlist from duplicates
my cleanPlaylist(current_playlist)
end if
end tell
end repeat
end tell
display dialog "done...
***commerical***
created by hubionmac.com :-P
***commerical***"
on check_playlist(folderplaylist, playlistname2check)
tell application "iTunes"
set thelists to every user playlist of source 1 whose special kind is none and smart is false
set fpl_lists to {}
repeat with i in thelists
try
if parent of i = folderplaylist then
set fpl_lists to fpl_lists & {i}
end if
end try
end repeat
repeat with i in fpl_lists
if (name of i) as text = playlistname2check then
return i
end if
end repeat
make new playlist with properties {name:playlistname2check} at folderplaylist
end tell
end check_playlist
on makeDownloadPlaylist()
tell application "iTunes"
-- set thelists to name of every user playlist of source 1 whose special kind is none and smart is false
if (count of every folder playlist) = 0 or (name of every folder playlist) does not contain "Downloads" then
tell source 1 to make new folder playlist with properties {name:"Downloads"}
set fpl to folder playlist "Downloads" of source 1
else
set fpl to folder playlist "Downloads" of source 1
end if
return fpl
end tell
end makeDownloadPlaylist
on cleanPlaylist(theplaylist)
tell application "iTunes"
set idlist to {}
repeat with i from the (count of tracks) of theplaylist to 1 by -1
set currentID to database ID of track i of theplaylist
if currentID is in the idlist then
delete track i of theplaylist
else
if ((location of track i of theplaylist) as text) starts with folder2Scan then
set idlist to idlist & {currentID}
else
delete track i of theplaylist
end if
end if
end repeat
end tell
end cleanPlaylist
on replace_chars(this_text, search_string, replacement_string)
if this_text contains the search_string then
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to ""
end if
return do_string(actionid, this_text)
end replace_chars
on do_string(actionid, the_string)
if actionid = {} then
return the_string
else
set actionid to actionid as integer
set finalstring to ""
if actionid = 1 then
repeat with i from 1 to count of characters of the_string
set test_char to character i of the_string
if i = 1 then
set finalstring to makebig(test_char)
else
set prev_char to character (i - 1) of the_string --last character of finalstring as text
if followed_by_bigchar(prev_char) = true then
set finalstring to finalstring & makebig(test_char)
else
set finalstring to finalstring & makesmall(test_char)
end if
end if
end repeat
else if actionid = 2 then
set firstchar to makebig(character 1 of the_string)
repeat with i from 2 to count of characters of the_string
set test_char to character i of the_string
set finalstring to finalstring & makesmall(test_char)
end repeat
set finalstring to (firstchar & finalstring) as text
else if actionid = 3 then
repeat with i from 1 to count of characters of the_string
set test_char to character i of the_string
set finalstring to finalstring & makebig(test_char)
end repeat
else if actionid = 4 then
repeat with i from 1 to count of characters of the_string
set test_char to character i of the_string
set finalstring to finalstring & makesmall(test_char)
end repeat
end if
return finalstring
end if
end do_string
on followed_by_bigchar(test_char)
if ((ASCII number of test_char) is greater than 64) and ¬
((ASCII number of test_char) is less than 91) then
return false
else if ((ASCII number of test_char) is greater than 96) and ¬
((ASCII number of test_char) is less than 123) then
return false
else if special_bigChars contains test_char then
return false
else if test_char = "'" then
return false
else
return true
end if
end followed_by_bigchar
on makesmall(test_char)
--when it's a normal character
if ((ASCII number of test_char) is greater than 64) and ¬
((ASCII number of test_char) is less than 91) then
return (ASCII character ((ASCII number of test_char) + 32))
--when it's a special character
else if test_char is in special_bigChars then
repeat with i from 1 to count of special_bigChars
if item i of special_bigChars = test_char then
return item i of special_smallChars
end if
end repeat
--when it's something else
else
return test_char
end if
end makesmall
on makebig(test_char)
--when it's a normal character
if ((ASCII number of test_char) is greater than 96) and ¬
((ASCII number of test_char) is less than 123) then
return (ASCII character ((ASCII number of test_char) - 32))
--when it's a special character
else if test_char is in special_smallChars then
repeat with i from 1 to count of special_bigChars
if item i of special_smallChars = test_char then
return item i of special_bigChars
end if
end repeat
--when it's something else
else
return test_char
end if
end makebig
on get_selection_index(action_list, theprompt, mult_selection)
set theselection to choose from list action_list multiple selections allowed mult_selection with prompt theprompt
set returnlist to {}
repeat with theselected in theselection
set i to 1
repeat with theaction in action_list
if theselected as text = theaction as text then
set returnlist to returnlist & i as list
end if
set i to i + 1
end repeat
end repeat
return returnlist
end get_selection_index
on clean_iTunes_folder(folder_playlist_2_clean)
tell application "iTunes"
set thelists to every user playlist of source 1 whose special kind is none and smart is false
repeat with i in thelists
try
if parent of i = folder_playlist_2_clean then
delete i
end if
end try
end repeat
end tell
end clean_iTunes_folder