3

の比較/リッチクエリOS X Calendar(以前の" iCal ")を見て、要約が" Lunch "だったイベントを見つけたい場合は、この:でも、これが唯一の最初のカレンダーを検索しているという事実を考慮に入れてJavascript for Automation(JXA)の比較(/) "

var eventsContainer = Application('Calendar').calendars[0].events 
for (var i = 0; i < eventsContainer.length; i++) { 
    var thisEvent = eventsContainer[i]; 
    if (thisEvent.summary() == 'Lunch') { doSomething() } 
} 

各iCalのイベントを実行するにはJavaScriptオブジェクトに変換する必要があるため、それは、非常に、非常に、非常に遅いです。

var foundEvents = Application('Calendar').calendars.events.whose({summary: 'Lunch'}); 

これは完全に一致summary == 'Lunch'のための素晴らしい作品:ここでは、実質的に高速である製剤です。しかし、endDate: > new Date()summary: /lunch/iのような比較はどうでしょうか? which()セレクタにネイティブ(ObjC)コードを渡すことは可能ですか? whose()のどこに文書がありますか?

+0

この関連の質問:http://stackoverflow.com/questions/27072977/using-whose-on-arrays -in-javascript-for-automationは、主にJXAの最初のバグの実装で動作する 'whom()'のシンプルな形式を得ることでした。それは重複したQではありません。 –

答えて

3

関連文書は、OS X 10.10のためのアプリケーション間通信のためのリリースノートであることが判明:https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html

別の一要素オブジェクトを取ることができwhose()引数内のオブジェクトの右側どこ左側は演算子を与え、右辺は値を与える。例えば:

.calendars.events.whose({summary: {_beginsWith: 'Lunch'}}); 

または私の場合は、開始イベントを見つけるために、今日:

var startOfDay = new Date(); 
    startOfDay.setHours(0); 
    startOfDay.setMinutes(0); 
    startOfDay.setSeconds(0); 
    startOfDay.setMilliseconds(0); 
    var endOfDay = new Date(); 
    endOfDay.setHours(23); 
    endOfDay.setMinutes(59); 
    endOfDay.setSeconds(59); 
    endOfDay.setMilliseconds(999); 

    var events = Application('Calendar').calendars.events.whose({ 
     _and: [ 
      { startDate: { _greaterThan: startOfDay }}, 
      { startDate: { _lessThan: endOfDay }} 
     ] 
    }); 
    var convertedEvents = events(); 
    for (var cal of convertedEvents) { 
     for (var ev of cal) { 
      console.log(ev.summary()); 
     } 
    } 
+1

素晴らしい質問と回答をお寄せいただきありがとうございます! – JMichaelTX

+0

ありがとう!私は "Accepted Answer"を開いて、誰かが構文/スピードを改善できるかどうかを見ていきます。私のコンピュータでは20秒かかります。 –

+0

"クエリは自分のコンピュータで20秒かかる" - それは私を驚かせます。 「var events =。...」をちょうど時間通りにするのは面白いでしょう。ステートメント。私はそれをするだろうが、私はAppleのカレンダーを使用していない。私はwho()関数の一般的なアプローチと使用にもっと興味がありました。 – JMichaelTX