项目作者: shomeier
项目描述 :
Mount CMIS repository as Filesystem
高级语言: Objective-C
项目地址: git://github.com/shomeier/cmis-drive.git
Cmis Drive [EXPERIMENTAL]
Mount a CMIS repository into Finder.
This is work in progress about how to mount a CMIS repository as FUSE Filesystem and using the FinderSync API to add context menus.
Currently only Mac OS X supported.
Prerequisites:
FUSE installed
For now the FinderSync extension to add context menus need to be started manually from the Xcode project
Techniques used:
javafs to mount an java.nio.Filesystem as FUSE drive (uses JNR for native calls)
liferay-nativity to add context menus to finder
Projects:
“sho.cmis.fs” contains the CMIS Filesystem which is an implementation of java.nio.file.FileSystem (and its Provider).
“sho.cmis.drive” mount the CMIS Filesystem with javafs and initializes Nativity
Difficulties
- Finder wants to create thumbnails for specific file types (I guess for those we have a Quicklook Plugin registered ?)
This results in READ requests to those files (e.g. JPGs), which in turn results to a CMIS call “getContent”. This can lower the performance significantly (e.g. if we have very many big image files in a directory).
- We can turn off icon previews by selecting the CMIS Mount and pressing ‘CMD+J’ -> Uncheck ‘Show icon preview’. This needs to be done by the user manually!
- We can store the files in a cache folder so that they only need to be downloaded once. In this case we need to handle TTL, Max Cache Size, etc
- I am not sure but I heard that the .DS_Store file maybe can handle/control icon previews of a folder. If so we could create a .DS_store file for the folders automatically (needs research in .DS_Store file format)
- Multi-Thread access to CMIS Filesystem via FUSE: Calls to the CMIS Java Filesystem implementation are done often from multiple different threads. In order that these calls do not always result in a remote call we need to have a thread-safe cache implementation which encapsulates and protects from remote calls. It is also possible to start FUSE in a single-thread mode (parameter ‘-s’).
- TypeDefinitionCache?
Screenshots

