Added Options to Hide Tokens and Show Token as QR-Code

pull/32/head
seiichiro 4 years ago
parent 192072e12a
commit bb6c7706f2

1
.gitignore vendored

@ -1,6 +1,7 @@
# User Specific Project Files
*.pro.user
*.pro.user.*
*.autosave
rpm/harbour-sailotp.spec
rpm/harbour-sailotp.spec.*
translations/*.qm

@ -60,6 +60,7 @@ ApplicationWindow
path: "/apps/harbour-sailotp"
property bool showQrDefaultAction: false
property bool hideTokens: false
}
// Add an entry to the list

@ -71,7 +71,19 @@ Dialog {
if (((paramType == "TOTP" || paramType == "TOTP_STEAM") && (otpLabel.text == "" || otpSecret.text == "")) || (paramType == "HOTP" && (otpLabel.text == "" || otpSecret.text == "" || otpCounter.text <= 0))) {
notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
} else {
pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramLabel: otpLabel.text, paramKey: otpSecret.text, paramType: paramType, paramCounter: otpCounter.text, paramLen: otpLen.text});
var otpurl = "";
if (paramType == "TOTP") {
if (otpLabel.text != "" && otpSecret.text != "")
otpurl = "otpauth://totp/"+otpLabel.text+"?secret="+otpSecret.text+"&digits="+otpLen.text;
} else if (paramType == "HOTP") {
if (paramLabel != "" && paramKey != "" && paramCounter > 0)
otpurl = "otpauth://hotp/"+otpLabel.text+"?secret="+otpSecret.text+"&counter="+otpCounter.text+"&digits="+otpLen.text;
}
if (otpurl != "") {
pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otpurl, paramLabel: otpLabel.text, paramQRId = -1});
} else {
notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
}
}
}
}

@ -66,12 +66,12 @@ Page {
var seconds = (curDate.getSeconds() + appWin.listModel.get(i).diff) % 30;
// Only update on full 30 / 60 Seconds or if last run of the Functions is more than 2s in the past (e.g. app was in background)
if (appWin.listModel.get(i).otp === "------" || seconds == 0 || (curDate.getTime() - lastUpdated > 2000)) {
var curOTP = OTP.calcOTP(appWin.listModel.get(i).secret, appWin.listModel.get(i).type, appWin.listModel.get(i).len, appWin.listModel.get(i).diff, 0)
var curOTP = OTP.calcOTP(appWin.listModel.get(i).secret, appWin.listModel.get(i).type, appWin.listModel.get(i).len, appWin.listModel.get(i).diff, 0);
appWin.listModel.setProperty(i, "otp", curOTP);
} else if (appWin.coverType === "HOTP" && (curDate.getTime() - lastUpdated > 2000) && appWin.listModel.get(i).fav === 1) {
// If we are coming back from the CoverPage update OTP value if current favourite is HOTP
appWin.listModel.setProperty(i, "otp", appWin.coverOTP);
}
} else if (appWin.coverType === "HOTP" && (curDate.getTime() - lastUpdated > 2000) && appWin.listModel.get(i).fav === 1) {
// If we are coming back from the CoverPage update OTP value if current favourite is HOTP
appWin.listModel.setProperty(i, "otp", appWin.coverOTP);
}
}
@ -97,7 +97,7 @@ Page {
}
MenuItem {
text: qsTr("Settings")
visible: false
visible: true
onClicked: pageStack.push(Qt.resolvedUrl("Settings.qml"))
}
MenuItem {
@ -170,8 +170,14 @@ Page {
}
onClicked: {
Clipboard.text = otp
notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
if (settings.hideTokens) {
otpValue.visible = !otpValue.visible
} else if (settings.showQrDefaultAction) {
pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otp, paramLabel: title, paramQRId: index});
} else {
Clipboard.text = otp
notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
}
}
ListView.onRemove: animateRemoval()
@ -218,6 +224,7 @@ Page {
text: model.otp
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeLarge
visible: !settings.hideTokens
anchors.horizontalCenter: parent.horizontalCenter
}
}
@ -238,6 +245,19 @@ Page {
Component {
id: otpContextMenu
ContextMenu {
MenuItem {
text: qsTr("Copy to Clipboard")
visible: settings.hideTokens || settings.showQrDefaultAction
onClicked: {
Clipboard.text = otp
notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
}
}
MenuItem {
text: qsTr("Show Token as QR-Code")
visible: !settings.showQrDefaultAction
onClicked: pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otp, paramLabel: title, paramQRId: index});
}
MenuItem {
text: qsTr("Move up")
visible: index > 0 ? true : false;

@ -35,11 +35,19 @@ Page {
allowedOrientations: Orientation.All
property string paramType: ""
property int paramQRId: -1;
property string paramLabel: ""
property string paramKey: ""
property int paramLen: 6
property int paramCounter: 0
property string paramQrsource: ""
Timer {
interval: 1000
// Timer only runs when app is acitive and we have entries
running: Qt.application.active && appWin.listModel.count && paramQRId >= 0
repeat: true
onTriggered: {
qrImage.source = "image://qqrencoder/"+appWin.listModel.get(paramQRId).otp;
}
}
Label {
id: qrLabel
@ -54,24 +62,16 @@ Page {
id: qrImage
anchors.horizontalCenter: parent.horizontalCenter
y: 200
width: Theme.buttonWidthLarge
height: Theme.buttonWidthLarge
cache: false
}
Component.onCompleted: {
var otpurl = "";
if (paramType == "TOTP") {
if (paramLabel != "" && paramKey != "")
otpurl = "otpauth://totp/"+paramLabel+"?secret="+paramKey+"&digits="+paramLen;
} else if (paramType == "HOTP") {
if (paramLabel != "" && paramKey != "" && paramCounter > 0)
otpurl = "otpauth://hotp/"+paramLabel+"?secret="+paramKey+"&counter="+paramCounter+"&digits="+paramLen;
}
if (otpurl != "") {
qrImage.source = "image://qqrencoder/"+otpurl;
if (paramQrsource !== "") {
qrImage.source = "image://qqrencoder/"+paramQrsource;
} else {
notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
notify.show(qsTr("Can't create QR-Code from an empty String"), 4000);
}
}
}

@ -77,12 +77,7 @@ Page {
flash.mode: Camera.FlashOff
captureMode: Camera.CaptureStillImage
focus.focusMode: Camera.FocusContinuous
imageCapture {
onImageSaved: {
decoder.decodeImageFromFile(XDG_CACHE_DIR + "/qrscan.jpg");
}
}
imageCapture.onImageSaved: { decoder.decodeImageFromFile(path); }
}
QZXing {
@ -92,17 +87,17 @@ Page {
var ret = URL.decode(tag);
var len = 6
scanning = false
if (ret && ret.type != "" && ret.title != "" && ret.secret != "" && (ret.counter != "" || ret.type == "TOTP")) {
if (ret.digits != "") {
if (ret && ret.type !== "" && ret.title !== "" && ret.secret !== "" && (ret.counter !== "" || ret.type === "TOTP")) {
if (ret.digits !== "") {
len = ret.digits
}
pageStack.replace(Qt.resolvedUrl("AddOTP.qml"), {parentPage: parentPage, paramLabel: ret.title, paramKey: ret.secret, paramType: ret.type, paramCounter: ret.counter, paramLen: len, paramNew: true})
pageStack.replace(Qt.resolvedUrl("AddOTP.qml"), {parentPage: parentPage, paramLabel: ret.title, paramKey: ret.secret.toUpperCase(), paramType: ret.type, paramCounter: ret.counter, paramLen: len, paramNew: true})
} else {
notify.show(qsTr("No valid Token data found."), 3000);
}
}
onDecodingFinished: if (succeeded==false && scanning) scanTimer.start();
onDecodingFinished: { if (succeeded==false && scanning) scanTimer.start(); }
}
FileIO {

@ -51,12 +51,31 @@ Page {
SectionHeader { text: qsTr("Behaviour") }
TextSwitch {
id: showQrDefault
id: showQrDefaultAction
checked: settings.showQrDefaultAction
text: qsTr("Show Token as QRCode on Tap")
onClicked: settings.showQrDefaultAction = !settings.showQrDefaultAction
text: qsTr("Show Token as QR on Tap")
onClicked: {
settings.showQrDefaultAction = !settings.showQrDefaultAction;
console.log(settings.showQrDefaultAction);
if (settings.showQrDefaultAction) {
settings.hideTokens = false;
hideTokens.checked = settings.hideTokens
}
}
}
TextSwitch {
id: hideTokens
checked: settings.hideTokens
text: qsTr("Hide Tokens and Reveal on Tap")
onClicked: {
settings.hideTokens = !settings.hideTokens;
console.log(settings.hideTokens);
if (settings.hideTokens) {
settings.showQrDefaultAction = false;
showQrDefaultAction.checked = settings.showQrDefaultAction
}
}
}
}
VerticalScrollDecorator { }
}

@ -38,95 +38,6 @@ Lizenz: BSD (3-Klausel)</translation>
<translation>Übersetzer:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
<message>
<location filename="../qml/pages/AddOTP.qml" line="69"/>
<source>Show QR-Code</source>
<translation>QR-Code anzeigen</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="72"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>Ein QR-Code kann nur mit vollständigen Einstellungen erzeugt werden!</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Add</source>
<translation>Hinzufügen</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="91"/>
<source>Type</source>
<translation>Typ</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="93"/>
<source>Time-based (TOTP)</source>
<translation>Zeitbasiert (TOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="94"/>
<source>Counter-based (HOTP)</source>
<translation>Zählerbasiert (HOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="95"/>
<source>Steam Guard</source>
<translation>Steam Guard</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="101"/>
<source>Title</source>
<translation>Titel</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="102"/>
<source>Title for the OTP</source>
<translation>Titel für das Token</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="114"/>
<source>Secret (at least 16 characters)</source>
<translation>Schlüssel (mindestens 16 Zeichen)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="116"/>
<source>Secret OTP Key</source>
<translation>Geheimer Schlüssel</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="130"/>
<source>Length</source>
<translation>Länge</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="132"/>
<source>Length of the Token</source>
<translation>Länge des Tokens</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="144"/>
<location filename="../qml/pages/AddOTP.qml" line="146"/>
<source>Time Derivation (Seconds)</source>
<translation>Zeitabweichung (Sekunden)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="158"/>
<source>Next Counter Value</source>
<translation>Nächster Zählerwert</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="160"/>
<source>Next Value of the Counter</source>
<translation>Nächster Wert für den Zähler</translation>
</message>
</context>
<context>
<name>ExportPage</name>
<message>
@ -252,75 +163,87 @@ Lizenz: BSD (3-Klausel)</translation>
<message>
<location filename="../qml/pages/MainView.qml" line="95"/>
<source>About</source>
<translation>Über</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="99"/>
<source>Settings</source>
<translation>Einstellungen</translation>
<translation type="unfinished">Einstellungen</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>Export / Import</source>
<translation>Export / Import</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Add Token</source>
<translation>Token hinzufügen</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="122"/>
<source>Nothing here</source>
<translation>Hier ist nichts</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="123"/>
<source>Pull down to add a OTP</source>
<translation>Nach unten ziehen zum hinzufügen</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="158"/>
<source>Deleting</source>
<translation>Lösche</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source>Token for </source>
<translation>Token für </translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source> copied to clipboard</source>
<translation> kopiert</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="249"/>
<source>Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="257"/>
<source>Show Token as QR-Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="262"/>
<source>Move up</source>
<translation>Nach oben</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="247"/>
<location filename="../qml/pages/MainView.qml" line="267"/>
<source>Move down</source>
<translation>Nach unten</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="252"/>
<location filename="../qml/pages/MainView.qml" line="272"/>
<source>Edit</source>
<translation>Bearbeiten</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="258"/>
<location filename="../qml/pages/MainView.qml" line="278"/>
<source>Delete</source>
<translation>Löschen</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QRPage</name>
<message>
<location filename="../qml/pages/QRPage.qml" line="74"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>Ein QR-Code kann nur mit vollständigen Einstellungen erzeugt werden!</translation>
<source>Can&apos;t create QR-Code from an empty String</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -346,12 +269,12 @@ Lizenz: BSD (3-Klausel)</translation>
<translation>scanne...</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="101"/>
<location filename="../qml/pages/ScanOTP.qml" line="96"/>
<source>No valid Token data found.</source>
<translation>Kein gültiges Token gefunden.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="142"/>
<location filename="../qml/pages/ScanOTP.qml" line="137"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Vorschau antippen um den Scan zu starten / zu stoppen. Nach unten ziehen um manuell hinzu zu fügen.</translation>
</message>
@ -361,17 +284,22 @@ Lizenz: BSD (3-Klausel)</translation>
<message>
<location filename="../qml/pages/Settings.qml" line="50"/>
<source>Settings</source>
<translation>Einstellungen</translation>
<translation type="unfinished">Einstellungen</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="52"/>
<source>Behaviour</source>
<translation>Verhalten</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="56"/>
<source>Show Token as QRCode on Tap</source>
<translation>Token bei antippen als QR-Code zeigen</translation>
<source>Show Token as QR on Tap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="69"/>
<source>Hide Tokens and Reveal on Tap</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

@ -38,95 +38,6 @@ Licencia: BSD (de 3 cláusulas)</translation>
<translation>Traductores:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
<message>
<location filename="../qml/pages/AddOTP.qml" line="69"/>
<source>Show QR-Code</source>
<translation>Mostrar código QR</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="72"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>¡No se puede crear el código QR a partir de una configuración incompleta!</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Save</source>
<translation>Guardar</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Add</source>
<translation>Añadir</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="91"/>
<source>Type</source>
<translation>Tipo</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="93"/>
<source>Time-based (TOTP)</source>
<translation>Basado en tiempo (TOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="94"/>
<source>Counter-based (HOTP)</source>
<translation>Basado en contador (HOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="95"/>
<source>Steam Guard</source>
<translation>Steam Guard</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="101"/>
<source>Title</source>
<translation>Título</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="102"/>
<source>Title for the OTP</source>
<translation>Nombre para el OTP</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="114"/>
<source>Secret (at least 16 characters)</source>
<translation>Cadena secreta (al menos 16 caracteres)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="116"/>
<source>Secret OTP Key</source>
<translation>Llave secreta OTP</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="130"/>
<source>Length</source>
<translation>Longitud</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="132"/>
<source>Length of the Token</source>
<translation>Longitud del token</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="144"/>
<location filename="../qml/pages/AddOTP.qml" line="146"/>
<source>Time Derivation (Seconds)</source>
<translation>Derivación de tiempo (segundos)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="158"/>
<source>Next Counter Value</source>
<translation>Siguiente Contador</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="160"/>
<source>Next Value of the Counter</source>
<translation>Siguiente valor del contador</translation>
</message>
</context>
<context>
<name>ExportPage</name>
<message>
@ -252,75 +163,87 @@ Licencia: BSD (de 3 cláusulas)</translation>
<message>
<location filename="../qml/pages/MainView.qml" line="95"/>
<source>About</source>
<translation>Acerca de</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="99"/>
<source>Settings</source>
<translation>Configuración</translation>
<translation type="unfinished">Configuración</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>Export / Import</source>
<translation>Exportar/Importar</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Add Token</source>
<translation>Añadir Token</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="122"/>
<source>Nothing here</source>
<translation>Nada aquí</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="123"/>
<source>Pull down to add a OTP</source>
<translation>Tire hacia abajo para añadir tokens OTP</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="158"/>
<source>Deleting</source>
<translation>Borrando</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source>Token for </source>
<translation>Token para </translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source> copied to clipboard</source>
<translation> copiado al portapapeles</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="249"/>
<source>Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="257"/>
<source>Show Token as QR-Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="262"/>
<source>Move up</source>
<translation>Ascender</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="247"/>
<location filename="../qml/pages/MainView.qml" line="267"/>
<source>Move down</source>
<translation>Descender</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="252"/>
<location filename="../qml/pages/MainView.qml" line="272"/>
<source>Edit</source>
<translation>Editar</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="258"/>
<location filename="../qml/pages/MainView.qml" line="278"/>
<source>Delete</source>
<translation>Borrar</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QRPage</name>
<message>
<location filename="../qml/pages/QRPage.qml" line="74"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>¡No se puede crear el código QR a partir de una configuración incompleta!</translation>
<source>Can&apos;t create QR-Code from an empty String</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -346,12 +269,12 @@ Licencia: BSD (de 3 cláusulas)</translation>
<translation>Escaneando...</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="101"/>
<location filename="../qml/pages/ScanOTP.qml" line="96"/>
<source>No valid Token data found.</source>
<translation>No se han encontrado datos válidos</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="142"/>
<location filename="../qml/pages/ScanOTP.qml" line="137"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Toque la imagen para comenzar/parar el escaneo. Tire hacia abajo para una configuración manual.</translation>
</message>
@ -361,7 +284,7 @@ Licencia: BSD (de 3 cláusulas)</translation>
<message>
<location filename="../qml/pages/Settings.qml" line="50"/>
<source>Settings</source>
<translation>Configuración</translation>
<translation type="unfinished">Configuración</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="52"/>
@ -370,8 +293,13 @@ Licencia: BSD (de 3 cláusulas)</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="56"/>
<source>Show Token as QRCode on Tap</source>
<translation>Mostrar el token como código QR al tocar</translation>
<source>Show Token as QR on Tap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="69"/>
<source>Hide Tokens and Reveal on Tap</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

@ -38,95 +38,6 @@ Lisenssi: BSD (3-clause)</translation>
<translation>Kääntäjät:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
<message>
<location filename="../qml/pages/AddOTP.qml" line="69"/>
<source>Show QR-Code</source>
<translation>Näytä QR-koodi</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="72"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>QR-koodin luonti epäonnistui puutteellisten asetuksien takia!</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Save</source>
<translation>Tallenna</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Add</source>
<translation>Lisää</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="91"/>
<source>Type</source>
<translation>Tyyppi</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="93"/>
<source>Time-based (TOTP)</source>
<translation>Aikapohjainen (TOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="94"/>
<source>Counter-based (HOTP)</source>
<translation>Laskentapohjainen (HOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="95"/>
<source>Steam Guard</source>
<translation>Steam Guard</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="101"/>
<source>Title</source>
<translation>Nimi</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="102"/>
<source>Title for the OTP</source>
<translation>OTP:n nimi</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="114"/>
<source>Secret (at least 16 characters)</source>
<translation>Salaisuus (vähintään 16 merkkiä)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="116"/>
<source>Secret OTP Key</source>
<translation>Salainen OTP-avain</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="130"/>
<source>Length</source>
<translation>Pituus</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="132"/>
<source>Length of the Token</source>
<translation>Tunnuksen pituus</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="144"/>
<location filename="../qml/pages/AddOTP.qml" line="146"/>
<source>Time Derivation (Seconds)</source>
<translation>Aikapoikkeama (sekunneissa)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="158"/>
<source>Next Counter Value</source>
<translation>Seuraava laskenta-arvo</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="160"/>
<source>Next Value of the Counter</source>
<translation>Laskurin seuraava arvo</translation>
</message>
</context>
<context>
<name>ExportPage</name>
<message>
@ -253,76 +164,87 @@ Lisenssi: BSD (3-clause)</translation>
<message>
<location filename="../qml/pages/MainView.qml" line="95"/>
<source>About</source>
<translation>Tietoja</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="99"/>
<source>Settings</source>
<translatorcomment>Translated using Google Translate</translatorcomment>
<translation>Asetukset</translation>
<translation type="unfinished">Asetukset</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>Export / Import</source>
<translation>Eksportoi / Importoi</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Add Token</source>
<translation>Lisää tunnus</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="122"/>
<source>Nothing here</source>
<translation>Tyhjä</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="123"/>
<source>Pull down to add a OTP</source>
<translation>Vedä alaspäin lisääksesi OTP:n</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="158"/>
<source>Deleting</source>
<translation>Poistaa</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source>Token for </source>
<translation>Tunnus </translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source> copied to clipboard</source>
<translation> kopioitu leikepöydälle</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="249"/>
<source>Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="257"/>
<source>Show Token as QR-Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="262"/>
<source>Move up</source>
<translation>Siirrä ylös</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="247"/>
<location filename="../qml/pages/MainView.qml" line="267"/>
<source>Move down</source>
<translation>Siirrä alas</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="252"/>
<location filename="../qml/pages/MainView.qml" line="272"/>
<source>Edit</source>
<translation>Muokkaa</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="258"/>
<location filename="../qml/pages/MainView.qml" line="278"/>
<source>Delete</source>
<translation>Poista</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QRPage</name>
<message>
<location filename="../qml/pages/QRPage.qml" line="74"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>QR-koodin luonti ei onnistu puutteellisten asetusten takia!</translation>
<source>Can&apos;t create QR-Code from an empty String</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -348,12 +270,12 @@ Lisenssi: BSD (3-clause)</translation>
<translation>Skannataan...</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="101"/>
<location filename="../qml/pages/ScanOTP.qml" line="96"/>
<source>No valid Token data found.</source>
<translation>Voimassa olevaa tunnustietoa ei löytynyt.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="142"/>
<location filename="../qml/pages/ScanOTP.qml" line="137"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Käynnistä / lopeta skannaus painamalla kuvaa. Vedä alaspäin lisääksesi tunnuksen käsin.</translation>
</message>
@ -363,19 +285,22 @@ Lisenssi: BSD (3-clause)</translation>
<message>
<location filename="../qml/pages/Settings.qml" line="50"/>
<source>Settings</source>
<translation>Asetukset</translation>
<translation type="unfinished">Asetukset</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="52"/>
<source>Behaviour</source>
<translatorcomment>Translated using Google Translate</translatorcomment>
<translation>Käytös</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="56"/>
<source>Show Token as QRCode on Tap</source>
<translatorcomment>Translated using Google Translate</translatorcomment>
<translation>Kosketa tokenä QR-koodina</translation>
<source>Show Token as QR on Tap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="69"/>
<source>Hide Tokens and Reveal on Tap</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

@ -37,95 +37,6 @@ Licence : BSD (3 clauses)</translation>
<translation>Traducteurs :</translation>
</message>
</context>
<context>
<name>AddOTP</name>
<message>
<location filename="../qml/pages/AddOTP.qml" line="69"/>
<source>Show QR-Code</source>
<translation>Afficher le code QR</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="72"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>Impossible de créer un code QR avec des paramètres incomplets !</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Add</source>
<translation>Ajouter</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="86"/>
<source>Save</source>
<translation>Enregistrer</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="91"/>
<source>Type</source>
<translation>Type</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="93"/>
<source>Time-based (TOTP)</source>
<translation>Basé sur le temps (TOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="94"/>
<source>Counter-based (HOTP)</source>
<translation>Basé sur un compteur (HOTP)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="95"/>
<source>Steam Guard</source>
<translation>Steam Guard</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="101"/>
<source>Title</source>
<translation>Titre</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="102"/>
<source>Title for the OTP</source>
<translation>Titre de l&apos;OTP</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="114"/>
<source>Secret (at least 16 characters)</source>
<translation>Secret (au moins 16 caractètres)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="116"/>
<source>Secret OTP Key</source>
<translation>Clé secrète OTP</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="130"/>
<source>Length</source>
<translation>Longueur</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="132"/>
<source>Length of the Token</source>
<translation>Longueur du jeton</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="144"/>
<location filename="../qml/pages/AddOTP.qml" line="146"/>
<source>Time Derivation (Seconds)</source>
<translation>Dérivation de temps (secondes)</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="158"/>
<source>Next Counter Value</source>
<translation>Prochaine valeur du compteur</translation>
</message>
<message>
<location filename="../qml/pages/AddOTP.qml" line="160"/>
<source>Next Value of the Counter</source>
<translation>Prochaine valeur du compteur</translation>
</message>
</context>
<context>
<name>ExportPage</name>
<message>
@ -252,76 +163,87 @@ Licence : BSD (3 clauses)</translation>
<message>
<location filename="../qml/pages/MainView.qml" line="95"/>
<source>About</source>
<translation>À propos</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="99"/>
<source>Settings</source>
<translatorcomment>Translated using Google Translate</translatorcomment>
<translation>Paramètres</translation>
<translation type="unfinished">Paramètres</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>Export / Import</source>
<translation>Exporter / Importer</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Add Token</source>
<translation>Ajouter un OTP</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="122"/>
<source>Nothing here</source>
<translation>Aucun mot de passe</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="123"/>
<source>Pull down to add a OTP</source>
<translation>Glissez vers le bas pour ajouter un OTP</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="158"/>
<source>Deleting</source>
<translation>Suppression</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source>Token for </source>
<translation>OTP pour </translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="174"/>
<location filename="../qml/pages/MainView.qml" line="179"/>
<location filename="../qml/pages/MainView.qml" line="253"/>
<source> copied to clipboard</source>
<translation> copié dans le presse-papier</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="249"/>
<source>Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="257"/>
<source>Show Token as QR-Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="262"/>
<source>Move up</source>
<translation>Déplacer vers le haut</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="247"/>
<location filename="../qml/pages/MainView.qml" line="267"/>
<source>Move down</source>
<translation>Déplacer vers le bas</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="252"/>
<location filename="../qml/pages/MainView.qml" line="272"/>
<source>Edit</source>
<translation>Modifier</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="258"/>
<location filename="../qml/pages/MainView.qml" line="278"/>
<source>Delete</source>
<translation>Supprimer</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QRPage</name>
<message>
<location filename="../qml/pages/QRPage.qml" line="74"/>
<source>Can&apos;t create QR-Code from incomplete settings!</source>
<translation>Impossible de créer un code QR avec des paramètres incomplets !</translation>
<source>Can&apos;t create QR-Code from an empty String</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -347,12 +269,12 @@ Licence : BSD (3 clauses)</translation>
<translation>Balayer un code</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="101"/>
<location filename="../qml/pages/ScanOTP.qml" line="96"/>
<source>No valid Token data found.</source>
<translation>Pas d&apos;information valide trouvée.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="142"/>
<location filename="../qml/pages/ScanOTP.qml" line="137"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Appuyez sur l&apos;image pour démarrer / arréter le balayage. Glissez vers le bas pour entrer les paramètres manuellement.</translation>
</message>
@ -362,19 +284,22 @@ Licence : BSD (3 clauses)</translation>
<message>
<location filename="../qml/pages/Settings.qml" line="50"/>
<source>Settings</source>
<translation>Paramètres</translation>
<translation type="unfinished">Paramètres</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="52"/>
<source>Behaviour</source>
<translatorcomment>Translated using Google Translate</translatorcomment>
<translation>Comportement</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location