Closed infeo closed 4 months ago
The updates introduce the DolphinPlaces
class in the org.cryptomator.linux.quickaccess
package, integrating with the Dolphin file browser on KDE. This class implements the QuickAccessService
, enabling users to add and remove quick access entries efficiently. Additionally, the XML Bookmarks Exchange Language (XBEL) schema and DTD are included to define the structure for bookmarks. Tests have been added to ensure the functionality operates correctly.
File Path | Summary |
---|---|
src/main/java/org/cryptomator/linux/... |
Added DolphinPlaces class to implement quick access entries functionality in KDE Dolphin. |
src/main/resources/xbel-1.0.dtd |
Introduced XBEL version 1.0 DTD defining the structure and constraints for bookmark data. |
src/main/resources/xbel-1.0.xsd |
Introduced XBEL version 1.0 schema for organizing bookmarks with various attributes. |
src/test/java/org/cryptomator/linux/... |
Added tests for DolphinPlaces class, verifying initialization and sidebar integration. |
src/test/resources/user-places.xbel |
Introduced an XML document following the XBEL schema with bookmarks for various directories. |
In KDE's embrace, Dolphin finds its place,
Quick access entries, now a seamless chase.
With XML's grace and bookmarks arrayed,
Organize your world, precisely displayed.
Tests validate, ensuring it's bright,
For users to navigate, a joyful flight.
🌟🔖🐇
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
our temp file is not guarded against concurrent modifications. This is fine for now, but will cause problems if we ever switch to a multi-process architecture.
The temp file does not have to be guarded against concurrent modifications. It is a temporary file of Cryptomator (even indicated as such due to the file ending) and lives normally only for a very short time. We can safely assume, that users or processes do not edit randomly some forgein file.
Regarding multiprocess architecture: My current vision is, that a vault process only contains the mounting. Any additional/convenience action will still reside in Cryptomator. An there will be only one Cryptomator instance.
What happens if the application crashes?
If an entry is present in the XBEL file, it stays there. But the user can remove the entry by himself over the Dolphin UI. So there is no need of "automatic" cleanup.
What are src/main/resources/xbel-1.0.dtd and src/test/resources/user-places.xbel used for?
xbel-1.0.dtd
is the original definition. I converted it with the IDE into a xsd file, but wanted to keep the source. src/test/resources/user-places.xbel
was intended for testing, but is obsolete now.
Since you rely on javax.xml already for validation, why not just parse the whole tree and use XPath expressions to modify the contents?
I tried this (against better knowledge I'd like to say). Honestly, the API to read and transform is vey clunky and far from readable. And the result is not the original document but a little bit different (e.g. the dtd node gets lost). And lastly, before getting into the API and account for every pitfall, i'll stayed with regex.
With my approach we just use java.xml
to validate the file against a dtd to orderly regex the document afterwards. Safes me also some sleepless nights reading xml standards and api docs.
This PR adds an implementation of the Quick Access API for KDE Dolphin.
This implementation defines the quick access area as Dolphin places section. The section allows a custom label and icon for the bookmark.
To add an entry, an xml object is added to the file
~/.local/share/user-places.xbel
is added. The file format is XBEL. Before editing the file, it is validated against the XBEL schema definition. The entry is removed by editing the user-places.xbel file. To ensure data consistency, the file is never edited directly. Instead a copy is made and then with an atomic_move the original file overriden. Additionally, only one thread at a time can either add or remove an entry.