diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 813e519..f1a18a1 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -9,7 +9,6 @@ set(ubcards_SRCS qrcodereader.cpp qrcodegenerator.cpp qrcodeimageprovider.cpp - historymodel.cpp filehelper.cpp cardstorage.cpp cardstoragemodel.cpp diff --git a/app/cardstorage.cpp b/app/cardstorage.cpp index 884c15b..82d5e3a 100644 --- a/app/cardstorage.cpp +++ b/app/cardstorage.cpp @@ -46,16 +46,36 @@ CardStorage::CardStorage(QObject *parent) : m_storageModel = new CardStorageModel(this); + /* No image */ + m_image = QImage(); + m_imageID = ""; + /* TODO add signals/slots */ } +/** + * Prepare an image to save image + * + * When ID is empty string, image for the ID is NOT updated + * + */ +void CardStorage::updateImage(const QString &id, const QImage &image) { + m_image = image; + m_imageID = id; +} + void CardStorage::updateCard(const QString &id, const QString &text, const QString &type, const QString &name, const QString &category) { if (!m_storageModel->setCardById(id, text, type, name, category)) { /* In case of invalid ID, insert a new card */ - QString newId = m_storageModel->add(text, type, name, category, QImage()); + QString newId = m_storageModel->add(text, type, name, category, m_image); } + /* No image - the Image has been already used */ + m_image = QImage(); + m_imageID = ""; + + /* emit signal with added ID */ emit cardUpdated(); } diff --git a/app/cardstorage.h b/app/cardstorage.h index 4fed5c0..0d5c1ba 100644 --- a/app/cardstorage.h +++ b/app/cardstorage.h @@ -40,6 +40,7 @@ class CardStorage : public QObject, public QQuickImageProvider CardStorageModel* storage() const; Q_INVOKABLE void updateCard(const QString &id, const QString &text, const QString &type, const QString &name, const QString &category); + Q_INVOKABLE void updateImage(const QString &id, const QImage &image); public slots: @@ -52,6 +53,9 @@ private slots: QQuickWindow *m_mainWindow; CardStorageModel *m_storageModel; + + QImage m_image; + QString m_imageID; }; diff --git a/app/cardstoragemodel.cpp b/app/cardstoragemodel.cpp index e1b6f96..a9954da 100644 --- a/app/cardstoragemodel.cpp +++ b/app/cardstoragemodel.cpp @@ -41,10 +41,10 @@ int CardStorageModel::rowCount(const QModelIndex &parent) const return m_settings.value("all").toStringList().count(); } -QVariant CardStorageModel::data(const QModelIndex &index, int role) const +QVariant CardStorageModel::dataById(const QString &id, int role) const { QVariant ret; - QString id = m_settings.value("all").toStringList().at(index.row()); + m_settings.beginGroup(id); switch (role) { case RoleText: @@ -63,7 +63,8 @@ QVariant CardStorageModel::data(const QModelIndex &index, int role) const ret = m_settings.value("category"); break; case RoleImageSource: - ret = "image://history/" + id; + //ret = "image://history/" + id; + ret = m_storageLocation + id + ".jpg"; break; case RoleTimestamp: ret = m_settings.value("timestamp").toDateTime().toString(); @@ -74,6 +75,13 @@ QVariant CardStorageModel::data(const QModelIndex &index, int role) const return ret; } +QVariant CardStorageModel::data(const QModelIndex &index, int role) const +{ + QString id = m_settings.value("all").toStringList().at(index.row()); + + return dataById(id, role); +} + QHash CardStorageModel::roleNames() const { diff --git a/app/cardstoragemodel.h b/app/cardstoragemodel.h index e2e4068..0028d8f 100644 --- a/app/cardstoragemodel.h +++ b/app/cardstoragemodel.h @@ -43,6 +43,7 @@ class CardStorageModel: public QAbstractListModel, public QQuickImageProvider int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role) const override; + QVariant dataById(const QString &id, int role) const; QHash roleNames() const override; QString add(const QString &text, const QString &type, const QString &name, const QString &category, const QImage &image); diff --git a/app/historymodel.cpp b/app/historymodel.cpp deleted file mode 100644 index 2979475..0000000 --- a/app/historymodel.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "historymodel.h" -#include -#include -#include -#include -#include -#include - -HistoryModel::HistoryModel(QObject *parent): - QAbstractListModel(parent), - QQuickImageProvider(QQuickImageProvider::Image), - m_storageLocation(QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first() + "/.local/share/ubcards/"), - m_settings(m_storageLocation + "wallet.ini", QSettings::IniFormat) -{ - qDebug() << "History saved in" << m_settings.fileName(); -} - -int HistoryModel::rowCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return m_settings.value("all").toStringList().count(); -} - -QVariant HistoryModel::data(const QModelIndex &index, int role) const -{ - QVariant ret; - QString id = m_settings.value("all").toStringList().at(index.row()); - m_settings.beginGroup(id); - switch (role) { - case RoleText: - ret = m_settings.value("text"); - break; - case RoleType: - ret = m_settings.value("type"); - break; - case RoleUUID: - ret = id; - break; - case RoleName: - ret = m_settings.value("name"); - break; - case RoleCathegory: - ret = m_settings.value("category"); - break; - case RoleImageSource: - ret = "image://history/" + id; - break; - case RoleTimestamp: - ret = m_settings.value("timestamp").toDateTime().toString(); - break; - } - - m_settings.endGroup(); - return ret; -} - -QHash HistoryModel::roleNames() const -{ - QHash roles; - roles.insert(RoleText, "text"); - roles.insert(RoleType, "type"); - roles.insert(RoleName, "name"); - roles.insert(RoleUUID, "uuid"); - roles.insert(RoleCathegory, "category"); - roles.insert(RoleImageSource, "imageSource"); - roles.insert(RoleTimestamp, "timestamp"); - return roles; -} - -void HistoryModel::add(const QString &text, const QString &type, const QString &name, const QString &category, const QImage &image) -{ - QString id = QUuid::createUuid().toString().remove(QRegExp("[{}]")); - image.save(m_storageLocation + id + ".jpg"); - - beginInsertRows(QModelIndex(), 0, 0); - - QStringList all = m_settings.value("all").toStringList(); - all.prepend(id); - m_settings.setValue("all", all); - - m_settings.beginGroup(id); - m_settings.setValue("name", name); - m_settings.setValue("category", category); - m_settings.setValue("text", text); - m_settings.setValue("type", type); - m_settings.setValue("timestamp", QDateTime::currentDateTime()); - m_settings.endGroup(); - endInsertRows(); -} - -void HistoryModel::remove(QString id) -{ - if (!m_settings.value("all").toStringList().contains(id)) { - return; - } - - QStringList all = m_settings.value("all").toStringList(); - - qDebug() << "Removing" << id << ""; - - int i = all.indexOf(id); - all.removeAt(i); - m_settings.remove(id); - m_settings.setValue("all", all); - - QFile f(m_storageLocation + id + ".jpg"); - f.remove(); - endRemoveRows(); -} - -QImage HistoryModel::requestImage(const QString &id, QSize *size, const QSize &requestedSize) -{ - QImage image(m_storageLocation + id + ".jpg"); - if (requestedSize.isValid()) { - image = image.scaled(requestedSize); - size->setWidth(requestedSize.width()); - size->setHeight(requestedSize.height()); - } - return image; -} diff --git a/app/historymodel.h b/app/historymodel.h deleted file mode 100644 index 5fb014a..0000000 --- a/app/historymodel.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef HISTORYMODEL_H -#define HISTORYMODEL_H - -#include -#include -#include - -class HistoryModel: public QAbstractListModel, public QQuickImageProvider -{ - Q_OBJECT -public: - enum Roles { - RoleText, - RoleType, - RoleName, - RoleCathegory, - RoleImageSource, - RoleUUID, - RoleTimestamp - }; - - HistoryModel(QObject *parent = 0); - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role) const override; - QHash roleNames() const override; - - void add(const QString &text, const QString &type, const QString &name, const QString &category, const QImage &image); - Q_INVOKABLE void remove(QString id); - - QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override; - -private: - QString m_storageLocation; - mutable QSettings m_settings; -}; - -#endif diff --git a/app/main.cpp b/app/main.cpp index a6126c4..ca0896b 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -45,7 +45,6 @@ int main(int argc, char *argv[]) FileHelper fh; qmlRegisterType("UBcards", 0, 1, "QRCodeGenerator"); - qmlRegisterUncreatableType("UBcards", 0, 1, "HistoryModel", "use qrCodeReader.history"); CardStorage storage; view.engine()->rootContext()->setContextProperty("cardStorage", &storage); @@ -53,7 +52,6 @@ int main(int argc, char *argv[]) view.engine()->addImageProvider(QStringLiteral("qrcode"), new QRCodeImageProvider); view.engine()->addImageProvider(QStringLiteral("reader"), &reader); - view.engine()->addImageProvider(QStringLiteral("history"), reader.history()); view.engine()->rootContext()->setContextProperty(QStringLiteral("fileHelper"), &fh); diff --git a/app/qml/encoder.js b/app/qml/encoder.js index 2d1a196..b512a86 100644 --- a/app/qml/encoder.js +++ b/app/qml/encoder.js @@ -37,7 +37,7 @@ function stringToBarcode (type, str) { switch (type) { - case undefined: + case undefined:case undefined: case 'CODE-128': if (/^-?\d+$/.test(str)) { /* Numeric-only codes are type C*/ @@ -62,6 +62,9 @@ function stringToBarcode (type, str) case 'CODE-39': return "*" + str.toUpperCase().replace (/[^A-Z\s\d-$%./+]/g, "") + "*"; + + case 'PICTURE': + return ""; } } diff --git a/app/qml/ubcards.qml b/app/qml/ubcards.qml index 03dd628..470dbd4 100644 --- a/app/qml/ubcards.qml +++ b/app/qml/ubcards.qml @@ -137,6 +137,7 @@ MainView { ListElement { name: "EAN-8" ; font: "../fonts/ean13_new.ttf" } ListElement { name: "I2/5" ; font: "../fonts/I2of5_new.ttf" } ListElement { name: "QR-Code" ; font: "" } + ListElement { name: "PICTURE" ; font: "" } } Component { @@ -208,16 +209,15 @@ MainView { onValidChanged: { if (qrCodeReader.valid) { + // A New card has been scanned if (pageStack.depth > 1) { - /* When existing card is modified, the editCard view is already opened, the current depth is 2 */ - /* First, close the old editCartd view */ + /* First, close the old views */ pageStack.pop() - /* Now open the viewCard view for a modified card */ - pageStack.push(editPageComponent, {type: qrCodeReader.type, text: qrCodeReader.text, name: qrCodeReader.name, category: qrCodeReader.category, imageSource: qrCodeReader.imageSource, editable: false, cardID: qrCodeReader.ID}); - } else { - /* When new card is created, editCard view will be opened at depth 2, the current depth is 1 */ - pageStack.push(editPageComponent, {type: qrCodeReader.type, text: qrCodeReader.text, name: qrCodeReader.name, category: qrCodeReader.category, imageSource: qrCodeReader.imageSource, editable: true}); } + + /* Open the editCard view for a new card */ + cardStorage.updateImage("", qrCodeReader.image); + pageStack.push(editPageComponent, {type: qrCodeReader.type, text: qrCodeReader.text, name: qrCodeReader.name, category: qrCodeReader.category, imageSource: qrCodeReader.imageSource, editable: true}); } } } @@ -949,17 +949,20 @@ MainView { } } - /* This should be visible only if code-type generation is not available */ + /* This should be visible only if code-type generation is not available OR PICTURE code type is selected */ Item { width: parent.width - height: (!(hasCodeFont(editPage.type))) ? cardCodeImage.height : 0 - visible: !(hasCodeFont(editPage.type)) + height: (editPage.type === "PICTURE") ? cardCodeImage.height : 0 + visible: (editPage.type === "PICTURE") Image { Layout.fillWidth: true id: cardCodeImage - visible: !(hasCodeFont(editPage.type)) - source: hasCodeFont(editPage.type) ? "" : editPage.imageSource + width: parent.width - units.gu(5) + anchors.margins: units.gu(5) + anchors.centerIn: parent + visible: (editPage.type === "PICTURE") + source: (editPage.type === "PICTURE") ? editPage.imageSource : "" } } diff --git a/app/qrcodereader.cpp b/app/qrcodereader.cpp index 0121a5c..4c76581 100644 --- a/app/qrcodereader.cpp +++ b/app/qrcodereader.cpp @@ -47,8 +47,6 @@ QRCodeReader::QRCodeReader(QObject *parent) : } } - m_historyModel = new HistoryModel(this); - connect(&m_readerThread, &QThread::started, this, &QRCodeReader::scanningChanged); connect(&m_readerThread, &QThread::finished, this, &QRCodeReader::scanningChanged); } @@ -83,11 +81,6 @@ QImage QRCodeReader::image() const return m_image; } -QString QRCodeReader::imageSource() const -{ - return QStringLiteral("image://reader/") + m_imageUuid.toString().remove(QRegExp("[{}]")); -} - QRect QRCodeReader::scanRect() const { return m_scanRect; @@ -146,6 +139,10 @@ void QRCodeReader::processImage(const QUrl &url, const QString &name, const QStr qWarning() << "can't open" << url.path(); return; } + + m_type.clear(); + m_text.clear(); + emit validChanged(); Reader *reader = new Reader; reader->moveToThread(&m_readerThread); @@ -158,18 +155,6 @@ void QRCodeReader::processImage(const QUrl &url, const QString &name, const QStr } -void QRCodeReader::insertData(const QString &text, const QString &type, const QString &name, const QString &category) -{ - Reader *reader = new Reader; - reader->moveToThread(&m_readerThread); - connect(reader, SIGNAL(finished()), reader, SLOT(deleteLater())); - connect(reader, SIGNAL(finished()), &m_readerThread, SLOT(quit())); - connect(reader, SIGNAL(resultReady(QString, QString, QString, QString, QImage)), this, SLOT(handleResults(QString, QString, QString, QString, QImage))); - m_readerThread.start(); - - QMetaObject::invokeMethod(reader, "insertData", Q_ARG(QString, text), Q_ARG(QString, type), Q_ARG(QString, name), Q_ARG(QString, category)); -} - void QRCodeReader::handleResults(const QString &type, const QString &text, const QString &name, const QString &category, const QImage &codeImage) { m_type = type; @@ -179,7 +164,6 @@ void QRCodeReader::handleResults(const QString &type, const QString &text, const m_image = codeImage; m_imageUuid = QUuid::createUuid(); emit validChanged(); - m_historyModel->add(text, type, name, category, codeImage); } void Reader::doWork(const QImage &image, const QString &name, const QString &category, bool invert) @@ -253,14 +237,3 @@ void Reader::doWork(const QImage &image, const QString &name, const QString &cat emit finished(); } -void Reader::insertData(const QString &text, const QString &type, const QString &name, const QString &category) -{ - emit resultReady(type, text, name, category, QImage()); - emit finished(); -} - -HistoryModel *QRCodeReader::history() const -{ - qDebug() << "history model requested..." << m_historyModel->rowCount(QModelIndex()); - return m_historyModel; -} diff --git a/app/qrcodereader.h b/app/qrcodereader.h index 0ce9dab..b3f7456 100644 --- a/app/qrcodereader.h +++ b/app/qrcodereader.h @@ -21,8 +21,6 @@ #ifndef QRCODEREADER_H #define QRCODEREADER_H -#include "historymodel.h" - #include #include #include @@ -38,10 +36,8 @@ class QRCodeReader : public QObject, public QQuickImageProvider Q_PROPERTY(QString name READ name NOTIFY validChanged) Q_PROPERTY(QString category READ category NOTIFY validChanged) Q_PROPERTY(QImage image READ image NOTIFY validChanged) - Q_PROPERTY(QString imageSource READ imageSource NOTIFY validChanged) Q_PROPERTY(QRect scanRect READ scanRect WRITE setScanRect NOTIFY scanRectChanged) Q_PROPERTY(bool scanning READ scanning NOTIFY scanningChanged) - Q_PROPERTY(HistoryModel* history READ history CONSTANT) public: explicit QRCodeReader(QObject *parent = 0); @@ -52,18 +48,15 @@ class QRCodeReader : public QObject, public QQuickImageProvider QString name() const; QString category() const; QImage image() const; - QString imageSource() const; QRect scanRect() const; void setScanRect(const QRect &rect); bool scanning() const; - HistoryModel* history() const; QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize); public slots: void grab(const QString &name, const QString &category); void processImage(const QUrl &url, const QString &name, const QString &category); - void insertData(const QString &text, const QString &type, const QString &name, const QString &category); signals: void validChanged(); @@ -83,7 +76,6 @@ private slots: QImage m_image; QUuid m_imageUuid; QRect m_scanRect; - HistoryModel *m_historyModel; QThread m_readerThread; }; @@ -94,7 +86,6 @@ class Reader : public QObject public slots: void doWork(const QImage &image, const QString &name, const QString &category, bool invert); - void insertData(const QString &text, const QString &type, const QString &name, const QString &category); signals: void resultReady(const QString &type, const QString &text, const QString &name, const QString &category, const QImage &codeImage); diff --git a/po/ubcards.pot b/po/ubcards.pot index 6cc0f22..a9e122e 100644 --- a/po/ubcards.pot +++ b/po/ubcards.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-09 20:44+0000\n" +"POT-Creation-Date: 2024-04-11 22:16+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -116,7 +116,7 @@ msgstr "" msgid "UBcards" msgstr "" -#: ../app/qml/ubcards.qml:316 ../app/qml/ubcards.qml:1146 +#: ../app/qml/ubcards.qml:316 ../app/qml/ubcards.qml:1149 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:306 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1135 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:306 @@ -289,7 +289,7 @@ msgstr "" msgid "Card category:" msgstr "" -#: ../app/qml/ubcards.qml:1020 +#: ../app/qml/ubcards.qml:1023 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1009 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1009 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1000 @@ -297,7 +297,7 @@ msgstr "" msgid "Contact" msgstr "" -#: ../app/qml/ubcards.qml:1056 +#: ../app/qml/ubcards.qml:1059 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1045 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1045 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1036 @@ -305,14 +305,14 @@ msgstr "" msgid "QR code" msgstr "" -#: ../app/qml/ubcards.qml:1087 +#: ../app/qml/ubcards.qml:1090 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1076 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1076 msgid "QR Code" msgstr "" #. TRANSLATORS: Version number -#: ../app/qml/ubcards.qml:1202 +#: ../app/qml/ubcards.qml:1205 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1191 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1191 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1182 @@ -321,7 +321,7 @@ msgstr "" msgid "App Version %1" msgstr "" -#: ../app/qml/ubcards.qml:1213 +#: ../app/qml/ubcards.qml:1216 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1202 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1202 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1193 @@ -329,7 +329,7 @@ msgstr "" msgid "Maintained by" msgstr "" -#: ../app/qml/ubcards.qml:1214 +#: ../app/qml/ubcards.qml:1217 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1203 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1203 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1194 @@ -337,7 +337,7 @@ msgstr "" msgid "Jan Belohoubek" msgstr "" -#: ../app/qml/ubcards.qml:1226 +#: ../app/qml/ubcards.qml:1229 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1215 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1215 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1206 @@ -345,7 +345,7 @@ msgstr "" msgid "Please report bugs to the" msgstr "" -#: ../app/qml/ubcards.qml:1227 +#: ../app/qml/ubcards.qml:1230 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1216 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1216 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1207 @@ -353,7 +353,7 @@ msgstr "" msgid "issue tracker" msgstr "" -#: ../app/qml/ubcards.qml:1235 +#: ../app/qml/ubcards.qml:1238 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1224 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1224 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1215 @@ -361,7 +361,7 @@ msgstr "" msgid "Please support" msgstr "" -#: ../app/qml/ubcards.qml:1236 +#: ../app/qml/ubcards.qml:1239 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1225 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1225 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1216 @@ -369,7 +369,7 @@ msgstr "" msgid "the app development" msgstr "" -#: ../app/qml/ubcards.qml:1252 +#: ../app/qml/ubcards.qml:1255 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1241 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1241 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1232 @@ -377,7 +377,7 @@ msgstr "" msgid "Thanks to" msgstr "" -#: ../app/qml/ubcards.qml:1259 +#: ../app/qml/ubcards.qml:1262 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1248 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1248 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1239 @@ -385,7 +385,7 @@ msgstr "" msgid "Chris Clime, Tagger application:" msgstr "" -#: ../app/qml/ubcards.qml:1267 +#: ../app/qml/ubcards.qml:1270 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1256 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1256 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1247 @@ -393,7 +393,7 @@ msgstr "" msgid "Richard Lee, Card Wallet application:" msgstr "" -#: ../app/qml/ubcards.qml:1275 +#: ../app/qml/ubcards.qml:1278 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1264 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1264 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1255 @@ -401,7 +401,7 @@ msgstr "" msgid "Fonticons, Inc., Font Awesome" msgstr "" -#: ../app/qml/ubcards.qml:1283 +#: ../app/qml/ubcards.qml:1286 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1272 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1272 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1263 @@ -409,7 +409,7 @@ msgstr "" msgid "Sam Hewitt, Suru Icons" msgstr "" -#: ../app/qml/ubcards.qml:1293 +#: ../app/qml/ubcards.qml:1296 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1282 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1282 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1273 @@ -417,7 +417,7 @@ msgstr "" msgid "Released under the terms of the GNU GPLv3" msgstr "" -#: ../app/qml/ubcards.qml:1299 +#: ../app/qml/ubcards.qml:1302 #: ../build/arm-linux-gnueabihf/app/app/qml/ubcards.qml:1288 #: ../build/arm-linux-gnueabihf/app/install/qml/ubcards.qml:1288 #: ../build/x86_64-linux-gnu/app/app/qml/ubcards.qml:1279