1
0
mirror of https://github.com/QRouland/UTPass.git synced 2025-01-24 07:36:39 +00:00

Fix style command

This commit is contained in:
Quentin Rouland 2025-01-10 15:28:42 +01:00
parent 365e530efc
commit 399173b776
30 changed files with 462 additions and 402 deletions

View File

@ -5,8 +5,7 @@ suffix=none
--align-reference=name --align-reference=name
--convert-tabs --convert-tabs
--attach-namespaces --attach-namespaces
--max-code-length=100 --max-code-length=120
--max-instatement-indent=120
--pad-header --pad-header
--pad-oper --pad-oper
--lineend=linux --lineend=linux

View File

@ -4,9 +4,10 @@ kill: UTPass
scripts: scripts:
style: >- style: >-
echo 'Astyle :' && astyle --options=.astylerc main.cpp && astyle echo 'Astyle :' && astyle --options=.astylerc main.cpp && astyle --options=.astylerc --recursive 'plugins/*.cpp,*.h' && echo 'Running QmlFormat' && find . -name "*.qml" -exec qmlformat -i {} \; && echo 'Success'
--options=.astylerc --recursive 'plugins/*.cpp,*.h' && echo 'QmlFmt :' &&
qmlfmt -l tests && qmlfmt -w tests && qmlfmt -l qml && qmlfmt -w qml
dependencies_target: dependencies_target:
- libgpgmepp-dev - libgpgmepp-dev

View File

@ -13,7 +13,8 @@ LibGit::LibGit()
git_libgit2_init(); git_libgit2_init();
} }
LibGit::~LibGit() { LibGit::~LibGit()
{
git_libgit2_shutdown(); git_libgit2_shutdown();
} }
@ -38,7 +39,8 @@ int LibGit::credentials_cb(git_cred **out, const char *url, const char *username
return GIT_EUSER; return GIT_EUSER;
} }
bool LibGit::clone(QString url, QString path) { bool LibGit::clone(QString url, QString path)
{
git_repository *repo = NULL; git_repository *repo = NULL;
git_clone_options opts = GIT_CLONE_OPTIONS_INIT; git_clone_options opts = GIT_CLONE_OPTIONS_INIT;
opts.fetch_opts.callbacks.credentials = *credentials_cb; opts.fetch_opts.callbacks.credentials = *credentials_cb;

View File

@ -63,7 +63,8 @@ QString Gpg::initGpgHome()
} }
QString Gpg::findCommandPath(const QString &command) { QString Gpg::findCommandPath(const QString &command)
{
// Retrieve the PATH environment variable // Retrieve the PATH environment variable
QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString pathEnv = env.value("PATH"); QString pathEnv = env.value("PATH");

View File

@ -23,7 +23,10 @@ public:
Pass(); Pass();
~Pass() override = default; ~Pass() override = default;
QString password_store() const { return m_password_store; } QString password_store() const
{
return m_password_store;
}
Q_INVOKABLE void init(QObject *window); Q_INVOKABLE void init(QObject *window);
Q_INVOKABLE void decrypt(QUrl url); Q_INVOKABLE void decrypt(QUrl url);

View File

@ -1,49 +1,46 @@
import QtQuick 2.4
import QtQuick.Layouts 1.1
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import Pass 1.0 import Pass 1.0
import QtQuick 2.4
import QtQuick.Layouts 1.1
import "dialogs" import "dialogs"
MainView { MainView {
id: root id: root
objectName: "mainView"
applicationName: "utpass.qrouland"
automaticOrientation: false
width: units.gu(48)
height: units.gu(80)
signal responsePassphraseDialog(bool canceled, string passphrase) signal responsePassphraseDialog(bool canceled, string passphrase)
function initPass(rootView) { function initPass(rootView) {
Pass.init(rootView) Pass.init(rootView);
pageStack.push(Qt.resolvedUrl("pages/PasswordList.qml")); pageStack.push(Qt.resolvedUrl("pages/PasswordList.qml"));
} }
function callPassphraseDialog(useridHint, description, previousWasBad) { function callPassphraseDialog(useridHint, description, previousWasBad) {
//TODO use parameters to impove passphrase dialog //TODO use parameters to impove passphrase dialog
var passphraseDialog = PopupUtils.open( var passphraseDialog = PopupUtils.open(Qt.resolvedUrl("dialogs/PassphraseDialog.qml"));
Qt.resolvedUrl("dialogs/PassphraseDialog.qml")) passphraseDialog.activateFocus();
passphraseDialog.activateFocus() var validated = function validated(passphrase) {
responsePassphraseDialog(false, passphrase);
var validated = function (passphrase) { };
responsePassphraseDialog(false, passphrase) var canceled = function canceled() {
responsePassphraseDialog(true, "");
};
passphraseDialog.validated.connect(validated);
passphraseDialog.canceled.connect(canceled);
} }
var canceled = function () { objectName: "mainView"
responsePassphraseDialog(true, "") applicationName: "utpass.qrouland"
} automaticOrientation: false
width: units.gu(48)
passphraseDialog.validated.connect(validated) height: units.gu(80)
passphraseDialog.canceled.connect(canceled)
}
PageStack { PageStack {
id: pageStack id: pageStack
anchors.fill: parent
Component.onCompleted: {} anchors.fill: parent
Component.onCompleted: {
} }
} }
}

View File

@ -1,11 +1,11 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import "../styles" import "../styles"
import Lomiri.Components 1.3
import QtQuick 2.4
Item { Item {
id: copyText id: copyText
property string text
property string text
property bool commonBorder: true property bool commonBorder: true
property int lBorderwidth: 0 property int lBorderwidth: 0
property int rBorderwidth: 0 property int rBorderwidth: 0
@ -39,20 +39,21 @@ Item {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onPressed: { onPressed: {
parent.color = LomiriColors.warmGrey parent.color = LomiriColors.warmGrey;
} }
onClicked: { onClicked: {
var mimeData = Clipboard.newData() var mimeData = Clipboard.newData();
mimeData.text = copyText.text mimeData.text = copyText.text;
Clipboard.push(mimeData) Clipboard.push(mimeData);
} }
onReleased: { onReleased: {
parent.color = theme.palette.normal.background parent.color = theme.palette.normal.background;
} }
} }
CustomBorder { CustomBorder {
id: cb id: cb
commonBorder: copyText.commonBorder commonBorder: copyText.commonBorder
lBorderwidth: copyText.lBorderwidth lBorderwidth: copyText.lBorderwidth
rBorderwidth: copyText.rBorderwidth rBorderwidth: copyText.rBorderwidth
@ -60,5 +61,7 @@ Item {
bBorderwidth: copyText.bBorderwidth bBorderwidth: copyText.bBorderwidth
borderColor: copyText.borderColor borderColor: copyText.borderColor
} }
} }
} }

View File

@ -1,13 +1,12 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import "../styles" import "../styles"
import Lomiri.Components 1.3
import QtQuick 2.4
Item { Item {
id: externalLink id: externalLink
property string url property string url
property string text property string text
property bool commonBorder: true property bool commonBorder: true
property int lBorderwidth: 0 property int lBorderwidth: 0
property int rBorderwidth: 0 property int rBorderwidth: 0
@ -42,12 +41,13 @@ Item {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
Qt.openUrlExternally(externalLink.url) Qt.openUrlExternally(externalLink.url);
} }
} }
CustomBorder { CustomBorder {
id: cb id: cb
commonBorder: externalLink.commonBorder commonBorder: externalLink.commonBorder
lBorderwidth: externalLink.lBorderwidth lBorderwidth: externalLink.lBorderwidth
rBorderwidth: externalLink.rBorderwidth rBorderwidth: externalLink.rBorderwidth
@ -55,5 +55,7 @@ Item {
bBorderwidth: externalLink.bBorderwidth bBorderwidth: externalLink.bBorderwidth
borderColor: externalLink.borderColor borderColor: externalLink.borderColor
} }
} }
} }

View File

@ -1,13 +1,14 @@
import QtQuick 2.4 import "../dialogs"
import "../styles"
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import Pass 1.0 import Pass 1.0
import "../styles" import QtQuick 2.4
import "../dialogs"
Component { Component {
Rectangle { Rectangle {
id: fileDir id: fileDir
property string activePasswordName property string activePasswordName
anchors.right: parent.right anchors.right: parent.right
@ -34,24 +35,20 @@ Component {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
if (fileIsDir) { if (fileIsDir) {
folderModel.folder = folderModel.folder + "/" + fileName folderModel.folder = folderModel.folder + "/" + fileName;
backAction.visible = true backAction.visible = true;
} else { } else {
fileDir.activePasswordName = fileBaseName fileDir.activePasswordName = fileBaseName;
Pass.onDecrypted.connect(function(text) { Pass.onDecrypted.connect(function(text) {
pageStack.push(Qt.resolvedUrl("../pages/Password.qml"), pageStack.push(Qt.resolvedUrl("../pages/Password.qml"), {
{
"plainText": text, "plainText": text,
"title": fileDir.activePasswordName "title": fileDir.activePasswordName
}) });
}) });
Pass.onDecryptFailed.connect(function() { Pass.onDecryptFailed.connect(function() {
PopupUtils.open(passwordPageDecryptError) PopupUtils.open(passwordPageDecryptError);
}) });
Pass.decrypt(folderModel.folder + "/" + fileName);
Pass.decrypt(folderModel.folder + "/" + fileName)
} }
} }
} }
@ -67,9 +64,13 @@ Component {
Component { Component {
id: passwordPageDecryptError id: passwordPageDecryptError
ErrorDialog { ErrorDialog {
textError: i18n.tr("Decryption failed !") textError: i18n.tr("Decryption failed !")
} }
} }
} }
} }

View File

@ -1,16 +1,14 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import "../styles" import "../styles"
import Lomiri.Components 1.3
import QtQuick 2.4
Item { Item {
id: pageStackLink id: pageStackLink
property string page property string page
property var params: { property var params: {
} }
property string text property string text
property bool commonBorder: true property bool commonBorder: true
property int lBorderwidth: 0 property int lBorderwidth: 0
property int rBorderwidth: 0 property int rBorderwidth: 0
@ -45,12 +43,13 @@ Item {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
pageStack.push(page, params) pageStack.push(page, params);
} }
} }
CustomBorder { CustomBorder {
id: cb id: cb
commonBorder: pageStackLink.commonBorder commonBorder: pageStackLink.commonBorder
lBorderwidth: pageStackLink.lBorderwidth lBorderwidth: pageStackLink.lBorderwidth
rBorderwidth: pageStackLink.rBorderwidth rBorderwidth: pageStackLink.rBorderwidth
@ -58,5 +57,7 @@ Item {
bBorderwidth: pageStackLink.bBorderwidth bBorderwidth: pageStackLink.bBorderwidth
borderColor: pageStackLink.borderColor borderColor: pageStackLink.borderColor
} }
} }
} }

View File

@ -1,6 +1,6 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
Dialog { Dialog {
id: doubleValidationDialog id: doubleValidationDialog
@ -9,8 +9,8 @@ Dialog {
property string text1 property string text1
property string text2 property string text2
signal doubleValidated signal doubleValidated()
signal canceled signal canceled()
Text { Text {
visible: nb_validation == 0 visible: nb_validation == 0
@ -27,26 +27,27 @@ Dialog {
Button { Button {
text: i18n.tr("Ok") text: i18n.tr("Ok")
color: LomiriColors.green color: LomiriColors.green
onClicked: { onClicked: {
if (nb_validation == 1) { if (nb_validation == 1) {
nb_validation = 0 nb_validation = 0;
doubleValidated() doubleValidated();
PopupUtils.close(doubleValidationDialog) PopupUtils.close(doubleValidationDialog);
} else { } else {
nb_validation += 1 nb_validation += 1;
} }
} }
} }
Button { Button {
id: cancelButton id: cancelButton
text: i18n.tr("Cancel") text: i18n.tr("Cancel")
color: LomiriColors.red color: LomiriColors.red
onClicked: { onClicked: {
nb_validation = 0 nb_validation = 0;
canceled() canceled();
PopupUtils.close(doubleValidationDialog) PopupUtils.close(doubleValidationDialog);
} }
} }
} }

View File

@ -1,22 +1,24 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
Dialog { Dialog {
id: dialogError id: dialogError
property string textError property string textError
signal dialogClosed signal dialogClosed()
title: i18n.tr("Error !") title: i18n.tr("Error !")
text: textError text: textError
Button { Button {
text: i18n.tr("Close") text: i18n.tr("Close")
color: LomiriColors.red color: LomiriColors.red
onClicked: function() { onClicked: function() {
dialogClosed() dialogClosed();
PopupUtils.close(dialogError) PopupUtils.close(dialogError);
} }
} }
} }

View File

@ -1,25 +1,25 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
Dialog { Dialog {
id: passphraseProvider id: passphraseProvider
title: i18n.tr("Authentication required")
text: i18n.tr("Enter passphrase:")
signal validated(string passphrase) signal validated(string passphrase)
signal canceled signal canceled()
function activateFocus() { function activateFocus() {
passphraseField.forceActiveFocus() passphraseField.forceActiveFocus();
} }
title: i18n.tr("Authentication required")
text: i18n.tr("Enter passphrase:")
TextField { TextField {
id: passphraseField id: passphraseField
placeholderText: i18n.tr("passphrase") placeholderText: i18n.tr("passphrase")
echoMode: TextInput.Password echoMode: TextInput.Password
onAccepted: okButton.clicked(text) onAccepted: okButton.clicked(text)
} }
@ -28,23 +28,22 @@ Dialog {
text: i18n.tr("Ok") text: i18n.tr("Ok")
color: LomiriColors.green color: LomiriColors.green
onClicked: { onClicked: {
validated(passphraseField.text) validated(passphraseField.text);
passphraseField.text = "" passphraseField.text = "";
PopupUtils.close(passphraseProvider) PopupUtils.close(passphraseProvider);
} }
} }
Button { Button {
id: cancelButton id: cancelButton
text: i18n.tr("Cancel") text: i18n.tr("Cancel")
color: LomiriColors.red color: LomiriColors.red
onClicked: { onClicked: {
canceled() canceled();
PopupUtils.close(passphraseProvider) PopupUtils.close(passphraseProvider);
} }
} }
} }

View File

@ -1,14 +1,14 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
Dialog { Dialog {
id: doubleValidationDialog id: doubleValidationDialog
property string text property string text
signal validated signal validated()
signal canceled signal canceled()
Text { Text {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
@ -18,20 +18,21 @@ Dialog {
Button { Button {
text: i18n.tr("Ok") text: i18n.tr("Ok")
color: LomiriColors.green color: LomiriColors.green
onClicked: { onClicked: {
validated() validated();
PopupUtils.close(doubleValidationDialog) PopupUtils.close(doubleValidationDialog);
} }
} }
Button { Button {
id: cancelButton id: cancelButton
text: i18n.tr("Cancel") text: i18n.tr("Cancel")
color: LomiriColors.red color: LomiriColors.red
onClicked: { onClicked: {
canceled() canceled();
PopupUtils.close(doubleValidationDialog) PopupUtils.close(doubleValidationDialog);
} }
} }
} }

View File

@ -1,22 +1,24 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
Dialog { Dialog {
id: dialogSuccess id: dialogSuccess
property string textSuccess property string textSuccess
signal dialogClosed signal dialogClosed()
title: i18n.tr("Success !") title: i18n.tr("Success !")
text: textSuccess text: textSuccess
Button { Button {
text: i18n.tr("OK") text: i18n.tr("OK")
color: LomiriColors.green color: LomiriColors.green
onClicked: function() { onClicked: function() {
dialogClosed() dialogClosed();
PopupUtils.close(dialogSuccess) PopupUtils.close(dialogSuccess);
} }
} }
} }

View File

@ -1,14 +1,19 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import "headers"
import "../components" import "../components"
import Lomiri.Components 1.3
import QtQuick 2.4
import "headers"
Page { Page {
id: infoPage id: infoPage
header: StackHeader { Component.onCompleted: {
id: infoHeader var xhr = new XMLHttpRequest();
title: i18n.tr('Info') xhr.open("GET", "../../manifest_.json", false);
xhr.send();
var mJson = JSON.parse(xhr.responseText);
manifestTitle.text = "<b>" + mJson.title + "</b>";
manifestVersion.text = mJson.version + "<br>" + mJson.framework + "@" + mJson.architecture;
manifestMaintener.text = mJson.maintainer;
} }
Flow { Flow {
@ -24,6 +29,7 @@ Page {
Text { Text {
id: manifestTitle id: manifestTitle
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: parent.width width: parent.width
@ -35,12 +41,14 @@ Page {
Rectangle { Rectangle {
width: parent.width width: parent.width
height: units.gu(12) height: units.gu(12)
Image { Image {
source: "../../assets/logo.svg" source: "../../assets/logo.svg"
width: units.gu(12) width: units.gu(12)
height: units.gu(12) height: units.gu(12)
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
} }
Text { Text {
@ -54,6 +62,7 @@ Page {
Text { Text {
id: manifestVersion id: manifestVersion
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
width: parent.width width: parent.width
height: units.gu(4) height: units.gu(4)
@ -72,12 +81,14 @@ Page {
Text { Text {
id: manifestMaintener id: manifestMaintener
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
width: parent.width width: parent.width
height: units.gu(2) height: units.gu(2)
fontSizeMode: Text.Fit fontSizeMode: Text.Fit
font.pixelSize: 72 font.pixelSize: 72
} }
} }
Flow { Flow {
@ -85,14 +96,17 @@ Page {
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
ExternalLink { ExternalLink {
url: "https://github.com/QRouland/UTPass/issues" url: "https://github.com/QRouland/UTPass/issues"
text: i18n.tr("Suggest improvement(s) or report a bug(s)") text: i18n.tr("Suggest improvement(s) or report a bug(s)")
} }
ExternalLink { ExternalLink {
url: "https://github.com/QRouland/UTPass" url: "https://github.com/QRouland/UTPass"
text: i18n.tr("Access to the source code") text: i18n.tr("Access to the source code")
} }
Text { Text {
width: parent.width width: parent.width
height: units.gu(2) height: units.gu(2)
@ -100,17 +114,13 @@ Page {
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
text: i18n.tr("Released under the terms of the GNU GPL v3") text: i18n.tr("Released under the terms of the GNU GPL v3")
} }
} }
Component.onCompleted: { header: StackHeader {
var xhr = new XMLHttpRequest() id: infoHeader
xhr.open("GET", "../../manifest_.json", false)
xhr.send()
var mJson = JSON.parse(xhr.responseText) title: i18n.tr('Info')
}
manifestTitle.text = "<b>" + mJson.title + "</b>"
manifestVersion.text = mJson.version + "<br>" + mJson.framework + "@" + mJson.architecture
manifestMaintener.text = mJson.maintainer
}
} }

View File

@ -1,6 +1,6 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import QtQuick 2.4
import "headers" import "headers"
Page { Page {
@ -10,38 +10,15 @@ Page {
property string plainText property string plainText
property var objects property var objects
header: PageHeader { Component.onCompleted: {
id: passwordPageHeader var text_split = passwordPage.plainText.split('\n');
width: parent.width var component = Qt.createComponent("../components/CopyText.qml");
height: units.gu(6) for (var i = 0; i < text_split.length; i++) {
title: passwordPage.title if (text_split[i]) {
var object = component.createObject(container);
contents: Item { object.text = text_split[i];
height: parent.height
width: parent.width
Label {
id: labelTitle
text: passwordPage.title
anchors.verticalCenter: parent.verticalCenter
} }
} }
leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [
Action {
id: backAction
iconName: "back"
text: "Back"
onTriggered: {
passwordPage.plainText = ""
for (var object in objects) {
object.text = ""
object.destroy()
}
pageStack.pop()
}
}
]
} }
Rectangle { Rectangle {
@ -52,18 +29,49 @@ Page {
Flow { Flow {
id: container id: container
anchors.fill: parent anchors.fill: parent
} }
} }
Component.onCompleted: { header: PageHeader {
var text_split = passwordPage.plainText.split('\n') id: passwordPageHeader
var component = Qt.createComponent("../components/CopyText.qml")
for (var i = 0; i < text_split.length; i++) { width: parent.width
if (text_split[i]) { height: units.gu(6)
var object = component.createObject(container) title: passwordPage.title
object.text = text_split[i] leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [
Action {
id: backAction
iconName: "back"
text: "Back"
onTriggered: {
passwordPage.plainText = "";
for (var object in objects) {
object.text = "";
object.destroy();
}
pageStack.pop();
} }
} }
]
contents: Item {
height: parent.height
width: parent.width
Label {
id: labelTitle
text: passwordPage.title
anchors.verticalCenter: parent.verticalCenter
} }
}
}
} }

View File

@ -1,8 +1,8 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import Qt.labs.folderlistmodel 2.1
import Pass 1.0
import "../components" import "../components"
import Lomiri.Components 1.3
import Pass 1.0
import Qt.labs.folderlistmodel 2.1
import QtQuick 2.4
import "headers" import "headers"
Page { Page {
@ -11,25 +11,8 @@ Page {
property string passwordStorePath property string passwordStorePath
anchors.fill: parent anchors.fill: parent
Component.onCompleted: {
header: MainHeader { passwordStorePath = "file:" + Pass.password_store;
id: passwordListHeader
leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [
Action {
id: backAction
iconName: "back"
text: i18n.tr("Back")
visible: false
onTriggered: {
folderModel.folder = folderModel.parentFolder
if (folderModel.rootFolder === folderModel.folder) {
backAction.visible = false
}
}
}
]
} }
Rectangle { Rectangle {
@ -38,13 +21,14 @@ Page {
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
visible: folderModel.count == 0 visible: folderModel.count == 0
Text { Text {
text: i18n.tr( text: i18n.tr("No password found<br>You can import a password store zip in the settings")
"No password found<br>You can import a password store zip in the settings")
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
} }
} }
ListView { ListView {
@ -56,17 +40,38 @@ Page {
model: FolderListModel { model: FolderListModel {
id: folderModel id: folderModel
nameFilters: ["*.gpg"] nameFilters: ["*.gpg"]
rootFolder: passwordStorePath rootFolder: passwordStorePath
folder: passwordStorePath folder: passwordStorePath
showDirs: true showDirs: true
} }
delegate: FileDir { delegate: FileDir {
id: fileDelegate id: fileDelegate
} }
} }
Component.onCompleted: { header: MainHeader {
passwordStorePath = "file:" + Pass.password_store id: passwordListHeader
leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [
Action {
id: backAction
iconName: "back"
text: i18n.tr("Back")
visible: false
onTriggered: {
folderModel.folder = folderModel.parentFolder;
if (folderModel.rootFolder === folderModel.folder)
backAction.visible = false;
} }
} }
]
}
}

View File

@ -1,40 +1,15 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import QtQuick 2.4
PageHeader { PageHeader {
id: mainHeader id: mainHeader
width: parent.width width: parent.width
height: units.gu(6) height: units.gu(6)
title: i18n.tr("UTPass") title: i18n.tr("UTPass")
contents: Item {
height: parent.height
width: parent.width
Label {
id: labelTitle
text: mainHeader.title
anchors.verticalCenter: parent.verticalCenter
visible: true
}
TextField {
id: searchBar
anchors.right: parent.right
anchors.left: parent.left
placeholderText: i18n.tr("Search")
height: units.gu(4)
visible: false
anchors.verticalCenter: parent.verticalCenter
onFocusChanged: {
}
}
}
trailingActionBar.height: units.gu(4) trailingActionBar.height: units.gu(4)
trailingActionBar.numberOfSlots: 2 trailingActionBar.numberOfSlots: 2
trailingActionBar.actions: [ trailingActionBar.actions: [
/*Action { TODO /*Action { TODO
iconName: "search" iconName: "search"
text: i18n.tr("Search") text: i18n.tr("Search")
@ -50,15 +25,43 @@ PageHeader {
iconName: "settings" iconName: "settings"
text: i18n.tr("Settings") text: i18n.tr("Settings")
onTriggered: { onTriggered: {
pageStack.push(Qt.resolvedUrl("../settings/Settings.qml")) pageStack.push(Qt.resolvedUrl("../settings/Settings.qml"));
} }
}, },
Action { Action {
iconName: "info" iconName: "info"
text: i18n.tr("Info") text: i18n.tr("Info")
onTriggered: { onTriggered: {
pageStack.push(Qt.resolvedUrl("../Info.qml")) pageStack.push(Qt.resolvedUrl("../Info.qml"));
} }
} }
] ]
contents: Item {
height: parent.height
width: parent.width
Label {
id: labelTitle
text: mainHeader.title
anchors.verticalCenter: parent.verticalCenter
visible: true
}
TextField {
id: searchBar
anchors.right: parent.right
anchors.left: parent.left
placeholderText: i18n.tr("Search")
height: units.gu(4)
visible: false
anchors.verticalCenter: parent.verticalCenter
onFocusChanged: {
}
}
}
} }

View File

@ -1,31 +1,36 @@
import QtQuick 2.4
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import QtQuick 2.4
PageHeader { PageHeader {
id: stackHeader id: stackHeader
width: parent.width width: parent.width
height: units.gu(6) height: units.gu(6)
title: i18n.tr("UTPass") title: i18n.tr("UTPass")
contents: Item {
height: parent.height
width: parent.width
Label {
id: labelTitle
text: stackHeader.title
anchors.verticalCenter: parent.verticalCenter
}
}
leadingActionBar.height: units.gu(4) leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [ leadingActionBar.actions: [
Action { Action {
id: backAction id: backAction
iconName: "back" iconName: "back"
text: "Back" text: "Back"
onTriggered: { onTriggered: {
pageStack.pop() pageStack.pop();
} }
} }
] ]
contents: Item {
height: parent.height
width: parent.width
Label {
id: labelTitle
text: stackHeader.title
anchors.verticalCenter: parent.verticalCenter
}
}
} }

View File

@ -1,18 +1,17 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import Git 1.0
import Pass 1.0
import "../headers"
import "../../components" import "../../components"
import "../../dialogs" import "../../dialogs"
import "../headers"
import Git 1.0
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import Pass 1.0
import QtQuick 2.4
Page { Page {
id: importGitClonePage id: importGitClonePage
header: StackHeader { Component.onCompleted: {
id: importGitCloneHeader PopupUtils.open(importGitCloneValidation, importGitClonePage);
title: i18n.tr('Git Clone Import')
} }
Flow { Flow {
@ -30,6 +29,7 @@ Page {
Text { Text {
id: repoUrlLabe id: repoUrlLabe
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: parent.width width: parent.width
@ -38,6 +38,7 @@ Page {
TextField { TextField {
id: textFieldInput id: textFieldInput
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: parent.width width: parent.width
@ -46,51 +47,58 @@ Page {
Button { Button {
id: buttonAdd id: buttonAdd
width: parent.width width: parent.width
text: i18n.tr('Clone') text: i18n.tr('Clone')
onClicked: { onClicked: {
var ret = Git.clone(textFieldInput.text, Pass.password_store) var ret = Git.clone(textFieldInput.text, Pass.password_store);
if(ret) { if (ret)
PopupUtils.open(dialogImportGitCloneSuccess) PopupUtils.open(dialogImportGitCloneSuccess);
} else { else
PopupUtils.open(importGitCloneError, importGitClonePage) PopupUtils.open(importGitCloneError, importGitClonePage);
}
} }
}
}
} }
Component { Component {
id: importGitCloneValidation id: importGitCloneValidation
SimpleValidationDialog { SimpleValidationDialog {
text: i18n.tr( text: i18n.tr("Importing a git repo will delete<br>any existing password store!<br>Continue ?")
"Importing a git repo will delete<br>any existing password store!<br>Continue ?")
onCanceled: { onCanceled: {
pageStack.pop() pageStack.pop();
} }
} }
} }
Component { Component {
id: importGitCloneError id: importGitCloneError
ErrorDialog { ErrorDialog {
textError: i18n.tr("An error occured during git clone !") textError: i18n.tr("An error occured during git clone !")
} }
} }
Component { Component {
id: dialogImportGitCloneSuccess id: dialogImportGitCloneSuccess
SuccessDialog { SuccessDialog {
textSuccess: i18n.tr("Password store sucessfully imported !") textSuccess: i18n.tr("Password store sucessfully imported !")
onDialogClosed: { onDialogClosed: {
pageStack.pop() pageStack.pop();
pageStack.pop() pageStack.pop();
}
} }
} }
Component.onCompleted: {
PopupUtils.open(importGitCloneValidation, importGitClonePage)
} }
header: StackHeader {
id: importGitCloneHeader
title: i18n.tr('Git Clone Import')
}
} }

View File

@ -1,82 +1,80 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import Lomiri.Content 1.3
import Lomiri.Components.Popups 1.3
import Pass 1.0
import Utils 1.0
import "../headers"
import "../../dialogs" import "../../dialogs"
import "../headers"
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import Lomiri.Content 1.3
import Pass 1.0
import QtQuick 2.4
import Utils 1.0
Page { Page {
id: importKeyFilePage id: importKeyFilePage
property var activeTransfer property var activeTransfer
header: StackHeader {
id: importKeyHeader
title: i18n.tr("GPG Key Import")
}
ContentPeerPicker { ContentPeerPicker {
anchors.top: importKeyHeader.bottom anchors.top: importKeyHeader.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.topMargin: importKeyFilePage.header.height anchors.topMargin: importKeyFilePage.header.height
width: parent.width width: parent.width
visible: parent.visible visible: parent.visible
showTitle: false showTitle: false
contentType: ContentType.Text contentType: ContentType.Text
handler: ContentHandler.Source handler: ContentHandler.Source
onPeerSelected: { onPeerSelected: {
peer.selectionType = ContentTransfer.Single peer.selectionType = ContentTransfer.Single;
importKeyFilePage.activeTransfer = peer.request() importKeyFilePage.activeTransfer = peer.request();
importKeyFilePage.activeTransfer.stateChanged.connect(function() { importKeyFilePage.activeTransfer.stateChanged.connect(function() {
if (importKeyFilePage.activeTransfer.state === ContentTransfer.Charged) { if (importKeyFilePage.activeTransfer.state === ContentTransfer.Charged) {
console.log("Charged") console.log("Charged");
console.log(importKeyFilePage.activeTransfer.items[0].url) console.log(importKeyFilePage.activeTransfer.items[0].url);
var status = Pass.gpgImportKeyFromFile(importKeyFilePage.activeTransfer.items[0].url);
var status = Pass.gpgImportKeyFromFile( Utils.rmFile(importKeyFilePage.activeTransfer.items[0].url);
importKeyFilePage.activeTransfer.items[0].url) if (status)
PopupUtils.open(dialogImportKeyPageSucess);
Utils.rmFile(importKeyFilePage.activeTransfer.items[0].url) else
if (status) { PopupUtils.open(dialogImportKeyPageError);
PopupUtils.open(dialogImportKeyPageSucess) importKeyFilePage.activeTransfer = null;
} else {
PopupUtils.open(dialogImportKeyPageError)
} }
importKeyFilePage.activeTransfer = null });
} }
})
}
onCancelPressed: { onCancelPressed: {
pageStack.pop() pageStack.pop();
} }
} }
ContentTransferHint { ContentTransferHint {
id: transferHint id: transferHint
anchors.fill: parent anchors.fill: parent
activeTransfer: importKeyFilePage.activeTransfer activeTransfer: importKeyFilePage.activeTransfer
} }
Component { Component {
id: dialogImportKeyPageError id: dialogImportKeyPageError
ErrorDialog { ErrorDialog {
textError: i18n.tr("Key import failed !") textError: i18n.tr("Key import failed !")
} }
} }
Component { Component {
id: dialogImportKeyPageSucess id: dialogImportKeyPageSucess
SuccessDialog { SuccessDialog {
textSuccess: i18n.tr("Key successfully imported !") textSuccess: i18n.tr("Key successfully imported !")
onDialogClosed: { onDialogClosed: {
pageStack.pop() pageStack.pop();
} }
} }
} }
header: StackHeader {
id: importKeyHeader
title: i18n.tr("GPG Key Import")
}
} }

View File

@ -1,100 +1,97 @@
import QtQuick 2.4
import Lomiri.Components 1.3
import Lomiri.Content 1.3
import Lomiri.Components.Popups 1.3
import Pass 1.0
import Utils 1.0
import "../headers"
import "../../dialogs" import "../../dialogs"
import "../headers"
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import Lomiri.Content 1.3
import Pass 1.0
import QtQuick 2.4
import Utils 1.0
Page { Page {
id: importZipPage id: importZipPage
property var activeTransfer property var activeTransfer
header: StackHeader { Component.onCompleted: {
id: importZipHeader PopupUtils.open(importZipPageImportValidation, importZipPage);
title: i18n.tr("Zip Password Store Import")
} }
ContentPeerPicker { ContentPeerPicker {
anchors.top: importZipHeader.bottom anchors.top: importZipHeader.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.topMargin: importZipPage.header.height anchors.topMargin: importZipPage.header.height
width: parent.width width: parent.width
visible: parent.visible visible: parent.visible
showTitle: false showTitle: false
contentType: ContentType.Text contentType: ContentType.Text
handler: ContentHandler.Source handler: ContentHandler.Source
onPeerSelected: { onPeerSelected: {
peer.selectionType = ContentTransfer.Single peer.selectionType = ContentTransfer.Single;
importZipPage.activeTransfer = peer.request() importZipPage.activeTransfer = peer.request();
importZipPage.activeTransfer.stateChanged.connect(function() { importZipPage.activeTransfer.stateChanged.connect(function() {
if (importZipPage.activeTransfer.state === ContentTransfer.Charged) { if (importZipPage.activeTransfer.state === ContentTransfer.Charged) {
console.log("Charged") console.log("Charged");
console.log(importZipPage.activeTransfer.items[0].url) console.log(importZipPage.activeTransfer.items[0].url);
var status = Utils.unzip(importZipPage.activeTransfer.items[0].url, Pass.getPasswordStore());
var status = Utils.unzip( Utils.rmFile(importZipPage.activeTransfer.items[0].url);
importZipPage.activeTransfer.items[0].url, if (status)
Pass.getPasswordStore()) PopupUtils.open(dialogImportZipPageSuccess);
else
Utils.rmFile(importZipPage.activeTransfer.items[0].url) PopupUtils.open(dialogImportZipPageError);
importZipPage.activeTransfer = null;
if (status) {
PopupUtils.open(dialogImportZipPageSuccess)
} else {
PopupUtils.open(dialogImportZipPageError)
} }
importZipPage.activeTransfer = null });
} }
})
}
onCancelPressed: { onCancelPressed: {
pageStack.pop() pageStack.pop();
} }
} }
ContentTransferHint { ContentTransferHint {
id: transferHint id: transferHint
anchors.fill: parent anchors.fill: parent
activeTransfer: importZipPage.activeTransfer activeTransfer: importZipPage.activeTransfer
} }
Component { Component {
id: importZipPageImportValidation id: importZipPageImportValidation
SimpleValidationDialog { SimpleValidationDialog {
text: i18n.tr( text: i18n.tr("Importing a new zip will delete<br>any existing password store!<br>Continue ?")
"Importing a new zip will delete<br>any existing password store!<br>Continue ?")
onCanceled: { onCanceled: {
pageStack.pop() pageStack.pop();
} }
} }
} }
Component { Component {
id: dialogImportZipPageError id: dialogImportZipPageError
ErrorDialog { ErrorDialog {
textError: i18n.tr("Password store import failed !") textError: i18n.tr("Password store import failed !")
} }
} }
Component { Component {
id: dialogImportZipPageSuccess id: dialogImportZipPageSuccess
SuccessDialog { SuccessDialog {
textSuccess: i18n.tr("Password store sucessfully imported !") textSuccess: i18n.tr("Password store sucessfully imported !")
onDialogClosed: { onDialogClosed: {
pageStack.pop() pageStack.pop();
pageStack.pop() pageStack.pop();
}
} }
} }
Component.onCompleted: {
PopupUtils.open(importZipPageImportValidation, importZipPage)
} }
header: StackHeader {
id: importZipHeader
title: i18n.tr("Zip Password Store Import")
}
} }

View File

@ -1,28 +1,23 @@
import QtQuick 2.4 import "../../components"
import "../../dialogs"
import "../headers"
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3 import Lomiri.Components.Popups 1.3
import Pass 1.0 import Pass 1.0
import "../headers" import QtQuick 2.4
import "../../components"
import "../../dialogs"
Page { Page {
id: infoKeysPage id: infoKeysPage
property string currentKey property string currentKey
header: StackHeader {
id: infoKeysHeader
title: i18n.tr('Info Keys')
}
ListView { ListView {
id: infoKeysListView id: infoKeysListView
anchors.top: infoKeysHeader.bottom anchors.top: infoKeysHeader.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
model: Pass.gpgGetAllKeysModel() model: Pass.gpgGetAllKeysModel()
delegate: Grid { delegate: Grid {
@ -38,6 +33,7 @@ Page {
Text { Text {
id: uidKey id: uidKey
width: parent.width width: parent.width
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@ -46,11 +42,12 @@ Page {
Button { Button {
id: buttonDeleteKey id: buttonDeleteKey
text: i18n.tr("Delete this key") text: i18n.tr("Delete this key")
color: LomiriColors.red color: LomiriColors.red
onClicked: { onClicked: {
infoKeysPage.currentKey = model.modelData.uid infoKeysPage.currentKey = model.modelData.uid;
PopupUtils.open(infoKeysPageDeleteValidation, infoKeysPage) PopupUtils.open(infoKeysPageDeleteValidation, infoKeysPage);
} }
} }
@ -58,43 +55,53 @@ Page {
width: parent.width width: parent.width
height: units.gu(1) height: units.gu(1)
} }
} }
} }
Component { Component {
id: infoKeysPageDeleteValidation id: infoKeysPageDeleteValidation
DoubleValidationDialog { DoubleValidationDialog {
text1: i18n.tr( text1: i18n.tr("You're are about to delete<br>%1<br>Continue ?").arg(infoKeysPage.currentKey)
"You're are about to delete<br>%1<br>Continue ?").arg( text2: i18n.tr("%1<br>will be definitively removed.<br>Continue ?").arg(infoKeysPage.currentKey)
infoKeysPage.currentKey)
text2: i18n.tr(
"%1<br>will be definitively removed.<br>Continue ?").arg(
infoKeysPage.currentKey)
onDoubleValidated: { onDoubleValidated: {
var status = Pass.gpgDeleteKeyId(infoKeysPage.currentKey) var status = Pass.gpgDeleteKeyId(infoKeysPage.currentKey);
if (status) { if (status)
PopupUtils.open(infoKeysPageDeleteSuccess) PopupUtils.open(infoKeysPageDeleteSuccess);
} else { else
PopupUtils.open(infoKeysPageDeleteError) PopupUtils.open(infoKeysPageDeleteError);
}
} }
} }
} }
Component { Component {
id: infoKeysPageDeleteError id: infoKeysPageDeleteError
ErrorDialog { ErrorDialog {
textError: i18n.tr("Key removal failed !") textError: i18n.tr("Key removal failed !")
} }
} }
Component { Component {
id: infoKeysPageDeleteSuccess id: infoKeysPageDeleteSuccess
SuccessDialog { SuccessDialog {
textSuccess: i18n.tr("Key successfully deleted !") textSuccess: i18n.tr("Key successfully deleted !")
onDialogClosed: { onDialogClosed: {
infoKeysListView.model = Pass.gpgGetAllKeysModel() infoKeysListView.model = Pass.gpgGetAllKeysModel();
} }
} }
} }
header: StackHeader {
id: infoKeysHeader
title: i18n.tr('Info Keys')
}
} }

View File

@ -1,19 +1,14 @@
import QtQuick 2.4 import "../../components"
import "../headers"
import Lomiri.Components 1.3 import Lomiri.Components 1.3
import Pass 1.0 import Pass 1.0
import "../headers" import QtQuick 2.4
import "../../components"
Page { Page {
id: settingsPage id: settingsPage
property string gpgKeyId: "" property string gpgKeyId: ""
header: StackHeader {
id: settingsHeader
title: i18n.tr('Settings')
}
Flow { Flow {
anchors.top: settingsHeader.bottom anchors.top: settingsHeader.bottom
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
@ -27,14 +22,17 @@ Page {
height: units.gu(4) height: units.gu(4)
text: i18n.tr('GPG') text: i18n.tr('GPG')
} }
PageStackLink { PageStackLink {
page: Qt.resolvedUrl("ImportKeyFile.qml") page: Qt.resolvedUrl("ImportKeyFile.qml")
text: i18n.tr('Import a GPG key file') text: i18n.tr('Import a GPG key file')
} }
PageStackLink { PageStackLink {
page: Qt.resolvedUrl("InfoKeys.qml") page: Qt.resolvedUrl("InfoKeys.qml")
text: i18n.tr('Show GPG keys') text: i18n.tr('Show GPG keys')
} }
Text { Text {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@ -42,22 +40,32 @@ Page {
height: units.gu(4) height: units.gu(4)
text: i18n.tr('Password Store') text: i18n.tr('Password Store')
} }
PageStackLink { PageStackLink {
page: Qt.resolvedUrl("ImportGitClone.qml") page: Qt.resolvedUrl("ImportGitClone.qml")
text: i18n.tr('Import a Password Store using Git') text: i18n.tr('Import a Password Store using Git')
} }
PageStackLink { PageStackLink {
page: Qt.resolvedUrl("ImportZip.qml") page: Qt.resolvedUrl("ImportZip.qml")
text: i18n.tr('Import a Password Store Zip') text: i18n.tr('Import a Password Store Zip')
} }
Text { Text {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: parent.width width: parent.width
height: units.gu(4) height: units.gu(4)
color: LomiriColors.red color: LomiriColors.red
text: i18n.tr( text: i18n.tr('Warning: importing delete any exiting Password Store')
'Warning: importing delete any exiting Password Store')
} }
} }
header: StackHeader {
id: settingsHeader
title: i18n.tr('Settings')
}
} }

View File

@ -4,18 +4,14 @@ import QtQuick 2.4
Rectangle { Rectangle {
property bool commonBorder: true property bool commonBorder: true
property int lBorderwidth: 1 property int lBorderwidth: 1
property int rBorderwidth: 1 property int rBorderwidth: 1
property int tBorderwidth: 1 property int tBorderwidth: 1
property int bBorderwidth: 1 property int bBorderwidth: 1
property int commonBorderWidth: 1 property int commonBorderWidth: 1
z: -1
property string borderColor: "white" property string borderColor: "white"
z: -1
color: borderColor color: borderColor
anchors { anchors {
@ -23,10 +19,10 @@ Rectangle {
right: parent.right right: parent.right
top: parent.top top: parent.top
bottom: parent.bottom bottom: parent.bottom
topMargin: commonBorder ? -commonBorderWidth : -tBorderwidth topMargin: commonBorder ? -commonBorderWidth : -tBorderwidth
bottomMargin: commonBorder ? -commonBorderWidth : -bBorderwidth bottomMargin: commonBorder ? -commonBorderWidth : -bBorderwidth
leftMargin: commonBorder ? -commonBorderWidth : -lBorderwidth leftMargin: commonBorder ? -commonBorderWidth : -lBorderwidth
rightMargin: commonBorder ? -commonBorderWidth : -rBorderwidth rightMargin: commonBorder ? -commonBorderWidth : -rBorderwidth
} }
} }