2008/11/24

OSXのアドレスブックと携帯の電話帳をなんとかしてみる

電話帳編集ソフトを買えば何とかなる部分だけど、いちいちケーブル繋ぐのはなんだかねぇ。 せっかくBlueToothがあるのに。というわけでいろいろ試してみると、Leopardで追加された機能を使って何かできそう。

まずは携帯→Mac。このスクリプトを動かしておくと、携帯から電話帳データをMacに送信すると、余計なフィールドを削除してアドレスブックに追加(マージ)。vcfファイルをアドレスブックに放り込んでいるだけだけど。
このスクリプトは、各人の責任においてご自由にお使いください。使用した際に発生したいかなる問題にも、作者はいっさいの責任を負いません。


#!/usr/bin/ruby
# $Id:$

require 'osx/foundation'
OSX.require_framework '/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework'
include OSX

path = ENV["HOME"] +"/Downloads/telecom"
bt2pb = path + "/pb.vcf"
File.delete(bt2pb) if File.exist?(bt2pb)

def fbt2pb(filename)
  tmpfile = File.dirname(filename)+"/pb.tmp.vcf"
  File.open(tmpfile, 'w') do |fw|
    File.open(filename, 'r') do |fr|
      fr.each_line do |line|
        fw.puts line if !((/:.$/ =~ line) || (/X-(GNO|SH-.*):/ =~ line))
      end
    end
  end
  system("open #{tmpfile}")
end

# Watch directory and call functions
fsevents_cb = proc do |stream, ctx, numEvents, paths, marks, eventIDs|
  paths.regard_as('*')
  numEvents.times do |n|
    # launch event handler
    if File.exist?(bt2pb) then
      fbt2pb(bt2pb)
      File.delete(bt2pb)
    end
  end
end


stream = FSEventStreamCreate(
  KCFAllocatorDefault,
  fsevents_cb,
  nil,
  [path],
  KFSEventStreamEventIdSinceNow,
  1.0,
  0)

$stderr.puts "Faild to create watch event" unless stream

FSEventStreamScheduleWithRunLoop(
  stream,
  CFRunLoopGetCurrent(),
  KCFRunLoopDefaultMode)

ok = FSEventStreamStart(stream)
$stderr.puts "Failed to add event loop" unless ok

begin
  CFRunLoopRun()
rescue Interrupt
  FSEventStreamStop(stream)
  FSEventStreamInvalidate(stream)
  FSEventStreamRelease(stream)
end

Mac→携帯はBlueToothのファイル送信機能を使いたいのだけど、どうすればいいかな?



0 件のコメント :

コメントを投稿

Comments on Google+: