|
发表于 2006-2-22 16:16:14
|
显示全部楼层
想清楚了一点:
最开始的想法:
添加tag:
如果用户对文件有写权限
1,使用Extend Attr真正的将tag跟文件绑定
2,同时将tag写入database
如果用户对文件只有读权限:
1,不进行Extend Attr设置,只将tag写入database
如果用户对文件没有任何权限:
1,不要作任何tag,因为你不能访问的资源作了tag也是没有意义的。
使用Inotify监视文件的变化来更新database.
现在的想法:
chipx86不用Extend Attr是有道理的:
使用文件系统的扩展属性,必须在挂载时加上user_xattr选项
1,文件系统不同,这个可能不被支持
2,用户不知道怎么打开这个选项
3,即使加上了这个选项,也不能保证文件内容被覆盖时,tag丢失。
比如:
/tmp/test文件,我通过setxattr("/tmp/test","user.tag","abc",1);
来为他设置一个tag,叫做abc.
如果有一个文件/root/a,拷贝过来覆盖test,那这个EA仍然存在。
虽然使用EA设置TAG可以解决掉文件被移动时tag丢失的问题。
但是,文件被删除时,却需要使用Inotify来监视文件系统,效率不合算,而且,你能同时监视多少文件,Beagle设置了8192个文件。
如果不用Extend Attr,当文件被移动时确实会发生tag丢失的问题,但是,文件被删除时却没有任何影响,只要原始文件不再存在,我只需要Sync一下database就可以了。当文件被覆盖时,使用扩展属性也好,不使用扩展属性也好,效果都是一样的,一样会出现tag跟原始内容不一致的问题。
总不至于每次有写入操作都提示用户这个有tag,有可能造成tag和内容不一致,你要不要更改tag。
另外,如果我要为tag重命名,比如,原来的tag叫做abc,一堆文件已经被做了这个tag,我现在要修改这个tag名为“XXX项目文档”。如果使用了扩展属性,那可就麻烦了,我可能要给一堆文件重新setxattr();
如果使用数据库,Easy,只需要更新一下数据库里面的内容就可以了。
同时,EA的使用也确实无法解决remote resource的问题。
综合以上情况,采用EA的方式其实也没有什么太大的好处。
OK,到这里可以明确一点,简单的事情,简单的解决,还是只使用数据库算了。
我们可以作什么
1,GUI Tag Manager
leaftag为每个tag定义了三个属性:描述,隐藏,图片。
GUI Tag Manager的作用就是管理tag,增加,删除tag,修改Tag名,修改TAG的属性。
2,Tag virtual IO.
在GNOME里面就是gnome-vfs,在KDE里面就是kio.
比如tag://可以在资源管理器里面列出所有的tag(文件名就是tag名,图标就是tag的image属性指定的)
点击每个tag,列出被标记为这个tag的所有文件。
tag://<tagname>可以列出被标记为tagname的所有文件。
3,Quick Acess on FileExpolor ToolBar。
资源管理器工具栏,提供一个可以列出所有tag列表的combo box。
点击其中的某一项,列出属于这个tag的所有文件。
4,Tag Setter。
右击文件->属性,提供一个设置tag的页签。
同样,在这个页签也可以新建tag,然后在设置。
5,Tag Droper。
a,On Screen或者Under Systray的工具,点击后,鼠标改变,然后再点击资源管理器里的任何文件,这个文件将被tag.
b,拖放任何文件到kio_tag://<tagname>,这个文件都将被tag.
c,拖放文件到On Screen或者Under Systray的工具中的某个tag类,这个文件将被tag.
6,Tag Exporter。
a,备份属于某个tag的用户可以备份的所有文件,按照文件系统组织不变的进行备份,这样便于恢复是可以进行同步,而不是造成恢复后tag丢失,同时,备份数据库中的所有信息。
(别人的文件或者网络URL你就不用管了,你只能管好自己的文件,然后保留好自己的tag)
7,Tag Importer。
导入所有文件,并导入数据库。
8,tag Share。
可以将自己的tag库share给其他人使用,这样别人也就不需要自己去建立自己的tag体系。
9,Browser Tag
右击浏览器中的某个页面,可以将这个URL tag到仓库。
10,open/save with tag support.
打开文件对话框可以使用tag支持,来选择某个tag中的某个文件。
保存也一样。
另外,还可以有mail tag,比如在发送Mail时,可以向某个Tag 发送邮件,属于这个tag的所有的Mail地址都可以收到(不过这个还不如address book的Mail组好用)。 |
|