3

의 비교/리치 쿼리 OSX 캘린더 (이전의 "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 이벤트가 실행하는 자바 스크립트 객체로 변환 할 필요가 있기 때문에, 그것은 매우, 매우, 매우 느리다. 실질적으로 더 빠른 배합이 있습니다 :

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

정확하게 일치하는 부분은 summary == 'Lunch'입니다. 그러나 endDate: > new Date() 또는 summary: /lunch/i과 같은 비교는 어떻게됩니까? which() selector에 네이티브 (ObjC) 코드를 전달할 수 있습니까? whose()에 도움이 될만한 문서가 있습니까?

+0

이 관련 질문 : http://stackoverflow.com/questions/27072977/using-whose-on-arrays -in-javascript-for-automation은 주로 JXA의 버그 투성이 인 초기 구현에서 작동 할 간단한 형태의'who()'를 얻는 것에 관한 것이었다. 중복 된 질문이 아닙니다. –

답변

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 =. ..."를 통해 시간을 보내는 것이 흥미로울 것입니다. 성명서. 나는 그것을 할 것이지만 나는 애플 캘린더를 사용하지 않는다. 나는() 함수의 일반적인 접근법과 사용법에 더 관심이 많았다. – JMichaelTX