gnomevfs to gio.File

GIO tutorial: File operations ? Johannes Sasongko’s blog

こんな Blog を見つけた。
そうか、こうやれば gio.File からファイルタイプが取得できるんだ。

これでやっと gnomevfs の呪縛から逃れられそうだ。
もうすぐというか GNOME 3.0 から使えなくなるはず。

PyGObject Reference Manual
gio Constants#gio-file-attribute-constants

上記を見れば名前空間は何を指定すればいいか解るね。
standard::type 指定だと GFileType が戻ってくるので standard::content-type かな。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import gio

s = sys.argv[1]
f = gio.File(s)
info = f.query_info("standard::content-type")

print "name: {0}\ntype: {1}".format(s, info.get_content_type())

おぉ、これで拡張子が無くても content_type が取得できる!
MIME Type とずっと書いていたけど content_type であったみたい…

沢山の info を query するにはコンマ区切りで書くかワイルドカードを使う。
ただしコンマの前後にスペースを入れると上手くいかないのは何故だろう。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import gio

s = sys.argv[1]
f = gio.File(s)

# Not Space
info = f.query_info("standard::type,standard::size,standard::content-type")
#info = f.query_info("*")

print info.get_file_type()
print info.get_size()
print info.get_content_type()

ついでに GStreamer から得られる uri も gio で変換できるようだ。

uri = self.player.get_property("uri")
#t = urllib.unquote(uri)[7:]
t = gio.File(uri).get_parse_name()

意図的に日本語ファイル名にしても問題なく変換できた。
というより gio.File() ってフルパスでも uri でもどっちでもいいんだね。
とにかくこれなら urllib モジュールもいらないな、gio スゲェ便利。

ということで Y901x 0.3.4 公開。

そうそう、0.3.3 で dbus を取っ払ったんで本体は gtk.Window 派生に変更した。
多重起動防止はなくなったけどやっと普通な PyGtk アプリになった感じ。
追加機能はほとんどやらずにこんなことばかりやっていていいものか…