From 99c3f83db7196ded36b236e21a9b5071e606bdde Mon Sep 17 00:00:00 2001 From: Stefan Brand Date: Sat, 1 Feb 2014 12:59:39 +0100 Subject: [PATCH] Added Import / Export Dialog Page --- harbour-sailotp.pro | 3 +- qml/pages/ExportPage.qml | 98 ++++++++++++++++++++++++++++++++++++++++ qml/pages/MainView.qml | 4 ++ src/harbour-sailotp.cpp | 2 +- 4 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 qml/pages/ExportPage.qml diff --git a/harbour-sailotp.pro b/harbour-sailotp.pro index fd985d8..8203703 100644 --- a/harbour-sailotp.pro +++ b/harbour-sailotp.pro @@ -27,7 +27,8 @@ OTHER_FILES += qml/harbour-sailotp.qml \ qml/lib/storage.js \ qml/lib/crypto.js \ qml/lib/sha.js \ - qml/sailotp.png + qml/sailotp.png \ + qml/pages/ExportPage.qml HEADERS += \ src/fileio.h diff --git a/qml/pages/ExportPage.qml b/qml/pages/ExportPage.qml new file mode 100644 index 0000000..1853f7e --- /dev/null +++ b/qml/pages/ExportPage.qml @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2013, Stefan Brand + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The names of the contributors may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +import QtQuick 2.0 +import Sailfish.Silica 1.0 +import harbour.sailotp.FileIO 1.0 // Import FileIO Class +import "../lib/storage.js" as DB // Import the storage library for Config-Access + +// Define Layout of the Export / Import Page +Dialog { + id: exportPage + + property string mode: "export" + + // FileIO Object for reading / writing files + FileIO { + id: exportFile + source: fileName.text + onError: console.log(msg) + } + + SilicaFlickable { + id: exportFlickable + anchors.fill: parent + + VerticalScrollDecorator {} + + Column { + anchors.fill: parent + DialogHeader { + acceptText: mode == "export" ? "Export" : "Import" + } + + ComboBox { + id: modeSel + label: "Mode: " + menu: ContextMenu { + MenuItem { text: "Export"; onClicked: { mode = "export" } } + MenuItem { text: "Import"; onClicked: { mode = "import" } } + } + } + TextField { + id: fileName + width: parent.width + label: "Filename" + placeholderText: "File to Export / Import" + focus: true + horizontalAlignment: TextInput.AlignLeft + } + TextField { + id: filePassword + width: parent.width + label: "Password" + placeholderText: "Password for the Export" + echoMode: TextInput.Password + focus: true + horizontalAlignment: TextInput.AlignLeft + } + } + } + + // Check if we can continue + canAccept: fileName.text.length > 0 && filePassword.text.length > 0 ? true : false + + // Do the DB-Export / Import + onDone: { + if (result == DialogResult.Accepted) { + // TODO + } + } +} diff --git a/qml/pages/MainView.qml b/qml/pages/MainView.qml index 0077d37..0880d22 100644 --- a/qml/pages/MainView.qml +++ b/qml/pages/MainView.qml @@ -111,6 +111,10 @@ Page { text: "About" onClicked: pageStack.push(Qt.resolvedUrl("About.qml")) } + MenuItem { + text: "Export / Import DB" + onClicked: pageStack.push(Qt.resolvedUrl("ExportPage.qml")) + } MenuItem { text: "Add OTP" onClicked: pageStack.push(Qt.resolvedUrl("AddOTP.qml"), {parentPage: mainPage}) diff --git a/src/harbour-sailotp.cpp b/src/harbour-sailotp.cpp index 1b68ccc..5e680dc 100644 --- a/src/harbour-sailotp.cpp +++ b/src/harbour-sailotp.cpp @@ -45,7 +45,7 @@ int main(int argc, char *argv[]) app->setApplicationName("harbour-sailotp"); app->setApplicationVersion(APP_VERSION); - qmlRegisterType("FileIO", 1, 0, "FileIO"); + qmlRegisterType("harbour.sailotp.FileIO", 1, 0, "FileIO"); view->setSource(SailfishApp::pathTo("qml/harbour-sailotp.qml")); view->show();