mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2026-03-11 08:54:48 +00:00
Enable each KeePassXC instance to write its own container file
({DEVICE_ID}.kdbx) to a shared sync directory while importing from
all other devices' files. This eliminates Syncthing file conflicts
when multiple devices share a group.
When a KeeShare reference path points to a directory instead of a
.kdbx file, per-device mode activates automatically:
- Export writes to {syncDir}/{DEVICE_ID}.kdbx
- Import reads all .kdbx files in the directory except own device
- Classic single-file mode is fully preserved
Changes:
- Add KeeShare_DeviceId config key with auto-detection fallback
- Add Reference::isPerDeviceMode() detection based on path extension
- Extend ShareObserver with QFileSystemWatcher for directory watching
- Add importPerDeviceShares() for multi-file import from sync dirs
- Update EditGroupWidgetKeeShare with directory selection dialog
- Add Device Identity settings field to SettingsWidgetKeeShare
- Add KeeShare/PerDeviceSync custom data support for KeePassDX interop
- Add unit tests for per-device mode path detection
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
200 lines
5.8 KiB
XML
200 lines
5.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<ui version="4.0">
|
|
<class>SettingsWidgetKeeShare</class>
|
|
<widget class="QWidget" name="SettingsWidgetKeeShare">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>0</x>
|
|
<y>0</y>
|
|
<width>425</width>
|
|
<height>251</height>
|
|
</rect>
|
|
</property>
|
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0">
|
|
<property name="leftMargin">
|
|
<number>0</number>
|
|
</property>
|
|
<property name="topMargin">
|
|
<number>0</number>
|
|
</property>
|
|
<property name="rightMargin">
|
|
<number>0</number>
|
|
</property>
|
|
<property name="bottomMargin">
|
|
<number>0</number>
|
|
</property>
|
|
<item>
|
|
<widget class="QGroupBox" name="activeGroupBox">
|
|
<property name="title">
|
|
<string>Active</string>
|
|
</property>
|
|
<layout class="QGridLayout" name="gridLayout">
|
|
<item row="2" column="0">
|
|
<widget class="QCheckBox" name="enableImportCheckBox">
|
|
<property name="toolTip">
|
|
<string>Allow KeeShare imports</string>
|
|
</property>
|
|
<property name="accessibleName">
|
|
<string>Allow KeeShare imports</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Allow import</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="3" column="0">
|
|
<widget class="QCheckBox" name="enableExportCheckBox">
|
|
<property name="toolTip">
|
|
<string>Allow KeeShare exports</string>
|
|
</property>
|
|
<property name="accessibleName">
|
|
<string>Allow KeeShare exports</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Allow export</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="2" column="1">
|
|
<widget class="QCheckBox" name="quietSuccessCheckBox">
|
|
<property name="text">
|
|
<string>Only show warnings and errors</string>
|
|
</property>
|
|
<property name="checked">
|
|
<bool>true</bool>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="QGroupBox" name="deviceIdentityGroupBox">
|
|
<property name="title">
|
|
<string>Device Identity</string>
|
|
</property>
|
|
<layout class="QGridLayout" name="gridLayout_3">
|
|
<item row="0" column="0">
|
|
<widget class="QLabel" name="deviceIdLabel">
|
|
<property name="text">
|
|
<string>Device ID:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="0" column="1">
|
|
<widget class="QLineEdit" name="deviceIdEdit">
|
|
<property name="accessibleName">
|
|
<string>Device ID field</string>
|
|
</property>
|
|
<property name="toolTip">
|
|
<string>Unique identifier for this device in per-device sync mode (alphanumeric only)</string>
|
|
</property>
|
|
<property name="placeholderText">
|
|
<string>Auto-detected from system</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="0" column="2">
|
|
<spacer name="deviceIdSpacer">
|
|
<property name="orientation">
|
|
<enum>Qt::Horizontal</enum>
|
|
</property>
|
|
<property name="sizeHint" stdset="0">
|
|
<size>
|
|
<width>40</width>
|
|
<height>20</height>
|
|
</size>
|
|
</property>
|
|
</spacer>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="QGroupBox" name="ownCertificateGroupBox">
|
|
<property name="title">
|
|
<string>Own certificate</string>
|
|
</property>
|
|
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0">
|
|
<item row="0" column="0">
|
|
<widget class="QLabel" name="ownCertificateSignerLabel">
|
|
<property name="text">
|
|
<string>Signer:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="2" column="1">
|
|
<widget class="QPushButton" name="generateOwnCerticateButton">
|
|
<property name="accessibleName">
|
|
<string>Generate new certificate</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Generate</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="1" column="0">
|
|
<widget class="QLabel" name="ownCertificateFingerprintLabel">
|
|
<property name="text">
|
|
<string>Fingerprint:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="2" column="2">
|
|
<spacer name="horizontalSpacer">
|
|
<property name="orientation">
|
|
<enum>Qt::Horizontal</enum>
|
|
</property>
|
|
<property name="sizeHint" stdset="0">
|
|
<size>
|
|
<width>40</width>
|
|
<height>20</height>
|
|
</size>
|
|
</property>
|
|
</spacer>
|
|
</item>
|
|
<item row="0" column="1" colspan="2">
|
|
<widget class="QLineEdit" name="ownCertificateSignerEdit">
|
|
<property name="accessibleName">
|
|
<string>Signer name field</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item row="1" column="1" colspan="2">
|
|
<widget class="QLineEdit" name="ownCertificateFingerprintEdit">
|
|
<property name="accessibleName">
|
|
<string>Fingerprint</string>
|
|
</property>
|
|
<property name="readOnly">
|
|
<bool>true</bool>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<spacer name="verticalSpacer">
|
|
<property name="orientation">
|
|
<enum>Qt::Vertical</enum>
|
|
</property>
|
|
<property name="sizeHint" stdset="0">
|
|
<size>
|
|
<width>20</width>
|
|
<height>40</height>
|
|
</size>
|
|
</property>
|
|
</spacer>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
<tabstops>
|
|
<tabstop>enableImportCheckBox</tabstop>
|
|
<tabstop>quietSuccessCheckBox</tabstop>
|
|
<tabstop>enableExportCheckBox</tabstop>
|
|
<tabstop>ownCertificateSignerEdit</tabstop>
|
|
<tabstop>ownCertificateFingerprintEdit</tabstop>
|
|
</tabstops>
|
|
<resources/>
|
|
<connections/>
|
|
</ui>
|