読者です 読者をやめる 読者になる 読者になる

ichiroc subset

書きながら考える・考えをまとめる場所

Dropboxが使えなくなった MobileOrg を WebDAVに移行

iOS Emacs

背景

3年前に MobileOrg の環境セットアップの記事を書いた。

iPhoneでもorg-modeを。 MobileOrg環境構築手順メモ

あれからしばらくして Dropbox に MobileOrg が対応した。 色々あって金のかかる自分も自前サーバの契約をやめて Dropbox に移行した。 それでしばらく使っていたが、DropboxAPI が変更でもしたのか、結構前にエラーで使えなくなってしまった。 そのうち対応されるとは思うが、開発は停滞しているようなので、またWebDAVに環境を戻した。

最近はフリーの WebDAV サーバが出てきたのでそれを利用。 動作を検証したのは以下の2つ。

  • drivee.jp
    • 日本製
    • 3GBまで
  • Box.net
    • Dropbox と同じファイル同期サービス?
    • 5GB?
    • 使いやすい Web UI がある

決定的な理由はないが、より WebDAV に特化した drivee.jp にする事にした。

設定

スクリプトは前回は cadaver を使っていたが 、drivee.jp が利用しているSSLルート証明書の追加の仕方がわからなかったため curl に変更。 2つのスクリプトを用意。

upload.sh

#/bin/sh 
user_id=userid 
password=password 
org_mobile_directory=org-mobile-directory # org-mobile-directory のディレクトリを指定 
destination_url=https://$user_id:$password@$user_id.drivee.jp/org/ 
cd $org_mobile_directory # org-mobile-directory のディレクトリを指定 
curl -v --upload checksums.dat $destination_url 
find *.org -exec curl -v --upload {} $destination_url ;

download.sh

#!/bin/sh
user_id=userid
password=password
org_mobile_directory=org-mobile-directory # org-mobile-directory のディレクトリを指定
base_url=https://$user_id:$password@$user_id.drivee.jp/org
rm -rf $org_mobile_directory/*

curl $base_url/mobileorg.org > $org_mobile_directory/mobileorg.org
curl $base_url/index.org > $org_mobile_directory/index.org
curl $base_url/agendas.org > $org_mobile_directory/agendas.org
curl $base_url/checksums.dat > $org_mobile_directory/checksums.dat
curl $base_url/tasks.org > $org_mobile_directory/tasks.org # アジェンダファイル毎に以下追加

init.el 側の設定

あとはこのスクリプトを org-mobile-push と org-mobile-pull にそれぞれ advice させて自動実行。

;; my-org-pull-from-server-command
;; my-org-push-from-server-command  それぞれに ShellScript のパスをセットしておく
(defadvice org-mobile-pull (before org-mobile-download activate)
  (if (=   (shell-command my-org-pull-from-server-command) 0)
    (progn (kill-buffer "*Shell Command Output*")
           (delete-other-windows)))
  )
(defadvice org-mobile-push (after org-mobile-upload activate)
  (if (=   (shell-command my-org-push-to-server-command) 0)
      (progn (kill-buffer "*Shell Command Output*")
             (delete-other-windows))))

まとめ

Dropbox などを利用するよりも、こうやってシンプルな仕組み (特定のベンダアプリケーションに依存しない) で動かしたほうが安心な面はあると思った。

とゆーか github の issues を今さら見てみたけど Dropbox のアカウントと再リンクすれば動くみたいなことが書いてあった。 まあもういいか。