cryptomator / integrations-linux

Linux-specific implemenations of the integrations-api
GNU Affero General Public License v3.0
11 stars 4 forks source link

Feature: Implementation of Quick Access API for KDE Dolphin #85

Closed infeo closed 4 months ago

infeo commented 4 months ago

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. grafik

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.

coderabbitai[bot] commented 4 months ago

Walkthrough

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.

Changes

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.

Poem

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?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
infeo commented 4 months ago

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.

infeo commented 4 months ago

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.xmlto validate the file against a dtd to orderly regex the document afterwards. Safes me also some sleepless nights reading xml standards and api docs.