Add --db and let the user choose where the database lives
- `kareer --db <path>` works for the GUI and every subcommand, before or after the subcommand name, and creates the file if missing. main() strips it from argv before CLI/GUI routing; every parser declares it so it shows in --help. - Path precedence: --db > KAREER_DB_PATH > the location chosen in the GUI (kareerrc [Database] Path, read at startup for GUI and CLI alike) > $XDG_DATA_HOME/kareer/kareer.sqlite. - First GUI run (nothing forced, no file yet, or the configured file has gone missing): DatabaseSetupDialog offers the default location, a folder of the user's choice, or an existing database used in place. Until then JobsDatabase opens nothing. - Preferences gains a Database section: Move to... (copies, leaves the original), Open Existing..., Use Default Location. Refuses foreign SQLite files and unwritable ones. - Models call JobsDatabase::reopenIfPathChanged() on refresh, so switching databases needs no restart. - Link KF6::ConfigCore; add a QuickDialogs2 configure-time guard; add kconfig to the Arch dependencies and a note to the Flatpak manifest. - README documents --db, the precedence, and the first-run choice, and gains Fedora 44 build dependencies; CONTRIBUTING gets a dev recipe. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01BxDf7HqD1xPnsZP8wt3NTk
This commit is contained in:
@@ -11,6 +11,7 @@ pragma ComponentBehavior: Bound
|
||||
// header, no card/border around them.
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
import QtQuick.Dialogs
|
||||
import QtQuick.Layouts
|
||||
import org.kde.kirigami as Kirigami
|
||||
import io.github.toservetheking.Kareer
|
||||
@@ -75,5 +76,94 @@ Kirigami.ScrollablePage {
|
||||
displayText: AppColorScheme.activeColorSchemeName
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.ListSectionHeader {
|
||||
Layout.fillWidth: true
|
||||
text: i18nc("@title:group", "Database")
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: Kirigami.Units.largeSpacing
|
||||
Layout.rightMargin: Kirigami.Units.largeSpacing
|
||||
Layout.topMargin: Kirigami.Units.smallSpacing
|
||||
Layout.bottomMargin: Kirigami.Units.smallSpacing
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
QQC2.Label {
|
||||
Layout.fillWidth: true
|
||||
text: i18nc("@label", "Location")
|
||||
}
|
||||
QQC2.Label {
|
||||
Layout.fillWidth: true
|
||||
text: DatabaseLocation.path
|
||||
wrapMode: Text.WrapAnywhere
|
||||
opacity: 0.7
|
||||
}
|
||||
|
||||
Kirigami.InlineMessage {
|
||||
Layout.fillWidth: true
|
||||
type: Kirigami.MessageType.Information
|
||||
text: i18nc("@info", "Set by the --db option or the KAREER_DB_PATH environment variable, so it can't be changed here.")
|
||||
visible: DatabaseLocation.overridden
|
||||
}
|
||||
Kirigami.InlineMessage {
|
||||
Layout.fillWidth: true
|
||||
type: Kirigami.MessageType.Error
|
||||
text: DatabaseLocation.lastError
|
||||
visible: text.length > 0
|
||||
}
|
||||
Kirigami.InlineMessage {
|
||||
Layout.fillWidth: true
|
||||
type: Kirigami.MessageType.Positive
|
||||
text: DatabaseLocation.lastNotice
|
||||
visible: text.length > 0
|
||||
}
|
||||
|
||||
Flow {
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
enabled: !DatabaseLocation.overridden
|
||||
|
||||
QQC2.Button {
|
||||
icon.name: "folder-move"
|
||||
text: i18nc("@action:button", "Move to…")
|
||||
QQC2.ToolTip.text: i18nc("@info:tooltip", "Copy the database into another folder and use the copy from now on. The current file is left in place.")
|
||||
QQC2.ToolTip.visible: hovered
|
||||
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
|
||||
onClicked: moveFolderDialog.open()
|
||||
}
|
||||
QQC2.Button {
|
||||
icon.name: "document-open"
|
||||
text: i18nc("@action:button", "Open Existing…")
|
||||
onClicked: openFileDialog.open()
|
||||
}
|
||||
QQC2.Button {
|
||||
icon.name: "edit-reset"
|
||||
text: i18nc("@action:button", "Use Default Location")
|
||||
visible: DatabaseLocation.path !== DatabaseLocation.standardPath
|
||||
QQC2.ToolTip.text: xi18nc("@info:tooltip", "Switch to <filename>%1</filename>. Nothing is copied.", DatabaseLocation.standardPath)
|
||||
QQC2.ToolTip.visible: hovered
|
||||
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
|
||||
onClicked: DatabaseLocation.useDefault()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: DatabaseLocation.clearMessages()
|
||||
|
||||
FolderDialog {
|
||||
id: moveFolderDialog
|
||||
title: i18nc("@title:window", "Move Database To")
|
||||
onAccepted: DatabaseLocation.moveTo(selectedFolder)
|
||||
}
|
||||
|
||||
FileDialog {
|
||||
id: openFileDialog
|
||||
title: i18nc("@title:window", "Open Database")
|
||||
fileMode: FileDialog.OpenFile
|
||||
nameFilters: [i18nc("@item:inlistbox", "Kareer databases (*.sqlite)"), i18nc("@item:inlistbox", "All files (*)")]
|
||||
onAccepted: DatabaseLocation.useFile(selectedFile)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user