Sunday, 6 June 2010

iPhone and AppleScript 解決篇

Event log ってのがあるじゃん。

tell application "iPhoto"
    count every photo whose width < 400
        --> 3897
    get width of item 1 of every photo whose width < 400
        --> 270.0
    remove item 1 of every photo whose width < 400 from album 0
    get width of item 3 of every photo whose width < 400
        --> 370.0
    remove item 3 of every photo whose width < 400 from album 0
     ...

うーん。every photo を毎回送っているな。これは...

つまり、repeat with aPhoto in (every photo whose width < 400 ) の()の中を毎回 eval ってる。

ってことは...

tell application "iPhoto"
    set small to 0
    set aList to every photo whose width < 400
    repeat with aPhoto in aList
        remove aPhoto from album 0
        set small to small + 1
        if small mod 100 = 0 then
            say small
            say "is removed"
            -- empty trash
        end if
    end repeat
    -- empty trash
    small
end tell

で、良いみたいです。削除には時間がかかるのは仕方がないが。もっとも、aList が小さくなったので、この方法が可能になったらしい。

うーん、でも、これでも、ゴミ箱に入る数が合わない。 やっぱり empty trash しないとダメなのかな。

tell application "iPhoto"
    set small to 0
    set aList to every photo whose width < 400
    set num to (count of aList) as text
    say num & " photos will be removed"
    repeat with aPhoto in aList
        remove aPhoto from album 0
        set small to small + 1
        if small mod 100 = 0 then
            say small
            say "photos are removed"
            empty trash
            photo 0
        end if
    end repeat
    -- empty trash
    small
end tell

empty tash の後の、photo 0 がないと、album 0 がないとか言って来るみたいです。おまじないです。

でも、速度的には、番号でアクセスする方が高速。おそらく、aPhoto でアクセスすると、object id かなんかを送っていて、それを探すのに時間がかかっているらしい。なので、photo 253 とかでアクセスする方が高速なようですね。

でも、empty trash の後で、何故か、

 album 0 not found

とか言って来る。ダメじゃん。すると、tiwtter.com/Piyomaru 氏が、

with timeout of 36000 seconds
    tell application "iPhoto"
        remove (every photo whose width < 400)
    end tell
end timeout

で、一瞬で終るっていうんですが、timeout 36000 seconds って一瞬なんですか? それに、このscriptって、「debug 不可能」だと思うんだけど。でも、まぁ、かなり速いかな。といっても、3700削除するのに、26分で終らず。


たこな言語作るんじゃねぇ! って所ですが、たぶん、言っても聞かない人が作っていると思われ。

No comments: