LoginSignup
0
0

More than 5 years have passed since last update.

MacでCalendar.appのエントリを取得したい場合にはキャッシュを強引に覗くのが手っ取り早い

Posted at

MacでCalrndar.appのエントリを取得したい気分になるじゃろ?MacだからAppleScriptを使えば良いと思うじゃろ?死ぬほど遅いんじゃ。JXAでもやっぱり死ぬほど遅いぞい。

Core Dataうんぬんかんぬん詳しいことはおいといて、ちゃっちゃとカレンダーエントリを読みたいときには、SQLiteなキャッシュを読むのが手っ取り早いようです。

[takada-s@MBA Calendars]$ pwd
/Users/takada-s/Library/Calendars

[takada-s@MBA Calendars]$ ls -l Calendar\ Cache*
-rw-r--r--@ 1 takada-s  staff  6156288  3 28 13:30 Calendar Cache
-rw-r--r--@ 1 takada-s  staff    32768  3 24 15:34 Calendar Cache-shm
-rw-r--r--@ 1 takada-s  staff   576832  3 28 14:44 Calendar Cache-wal

[takada-s@MBA Calendars]$ file Calendar\ Cache
Calendar Cache: SQLite 3.x database

shmとwalはメタデータ的なものらしいので、ここではとりあえず気にしないことにしましょう。

このSQLiteファイルに対して、次のようなSQLをぶっこむと、極めて高速に指定期間内のカレンダーエントリ一覧を取得することができます。

SELECT
  ZNODE.ZTITLE, ZCALENDARITEM.ZTITLE, ZSTARTDATE, ZENDDATE
FROM
  ZCALENDARITEM, ZNODE
WHERE
  ZCALENDARITEM.ZCALENDAR = ZNODE.Z_PK
  AND
  ZCALENDARITEM.ZSTARTDATE > ?
  AND
  ZCALENDARITEM.ZENDDATE < ?

と思うじゃろ?時刻はUnixEpochと思いきや、2001/01/01 00:00:00を0とする謎エポックなんじゃ。これもCoreDataの仕様らしいぞい。というわけで、978,307,200秒のオフセットを考慮する必要があるようです。参考: http://stackoverflow.com/questions/10705062/behind-the-scenes-core-data-dates-stored-with-31-year-offset

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0