diff --git a/core/language/de.json b/core/language/de.json index de9060c8..4ac4bbd1 100644 --- a/core/language/de.json +++ b/core/language/de.json @@ -209,7 +209,11 @@ "exp4": "Bitte wählen Sie eine Brieftasche aus, um den privaten Hauptschlüssel zu sichern.", "core": "Core-Einstellungen starten", "qappNotification1": "Q-App Benachrichtigungen", - "selectnode": "Bitte wählen Sie eine Option" + "selectnode": "Bitte wählen Sie eine Option", + "arrr1": "ARRR-Wallet nicht initialisiert!", + "arrr2": "Bitte gehen Sie zur Registerkarte „Wallet“ und initialisieren Sie zuerst Ihre arrr-Wallet.", + "arrr3": "Core-Update erforderlich!", + "arrr4": "Um den privaten Schlüssel Ihrer arrr-Wallet zu speichern, benötigen Sie zuerst ein Core-Update!" }, "appinfo": { "blockheight": "Blockhöhe", @@ -605,7 +609,8 @@ "schange39": "Öffnen", "schange40": "Vorschau", "schange41": "Wird heruntergeladen, bitte warten...", - "schange42": "Heruntergeladene Dateien" + "schange42": "Heruntergeladene Dateien", + "schange43": "Alle versuchten Downloads werden im Hintergrund fortgesetzt. Bitte versuchen Sie es nach einer Weile erneut." }, "tubespage": { "schange1": "Q-Tubes durchsuchen", @@ -729,7 +734,12 @@ "bchange46": "Geben Sie dieser Anwendung die Erlaubnis, die folgende Datei zu speichern?", "bchange47": "Sofortige Veröffentlichung – erforderlich", "bchange48": "Erteilen Sie dieser Anwendung die Berechtigung, Ihnen Benachrichtigungen zu senden?", - "bchange49": "Erteilen Sie dieser Anwendung die Erlaubnis, Ihr Wallet-Informationen abzurufen?" + "bchange49": "Erteilen Sie dieser Anwendung die Erlaubnis, Ihr Wallet-Informationen abzurufen?", + "bchange50": "Diese App hat eine Änderung Ihres öffentlichen Profils angefordert. Eigenschaft:", + "bchange51": "Um die Änderungen zu übermitteln, vergessen Sie nicht, auf ‚Profil aktualisieren‘ zu klicken", + "bchange52": "Erteilen Sie dieser Anwendung die Berechtigung, Ihre Wallet-Informationen abzurufen?", + "bchange53": "Erlaube immer, dass deine Freundesliste automatisch von allen Apps abgerufen wird", + "bchange54": "Erteilen Sie dieser Anwendung die Berechtigung, auf Ihre Freundesliste zuzugreifen?" }, "datapage": { "dchange1": "Datenmanagement", @@ -1214,5 +1224,33 @@ "saving2": "Nichts zu speichern", "saving3": "Speichern Sie nicht gespeicherte Änderungen", "saving4": "Veränderungen rückgängig machen" + }, + "profile": { + "profile1": "Sie haben keinen Namen", + "profile2": "Gehe zur Namensregistrierung", + "profile3": "Profil aktualisieren", + "profile4": "Slogan", + "profile5": "Bio", + "profile6": "Wallet-Adressen", + "profile7": "Von der Benutzeroberfläche ausfüllen", + "profile8": "Benutzerdefinierte Eigenschaft hinzufügen", + "profile9": "Eigenschaftsname", + "profile10": "Felder", + "profile11": "Feld hinzufügen", + "profile12": "Feldname", + "profile13": "Feldwert", + "profile14": "Aktivität", + "profile15": "Kein Wert", + "profile16": "Dieser Name hat kein Profil", + "profile17": "Profil konnte nicht abgerufen werden", + "profile18": "Profil öffnen", + "profile19": "Profil kann nicht abgerufen werden", + "profile20": "Name registrieren", + "profile21": "Adresse aus der Benutzeroberfläche einfügen", + "profile22": "Erfolg", + "profile23": "verschlüsselt", + "profile24": "Sie müssen sowohl den Feldnamen als auch den Feldwert ausfüllen, um eine benutzerdefinierte Eigenschaft hinzuzufügen", + "profile25": "Ist dein Freund", + "profile26": "Als Freund hinzufügen" } -} \ No newline at end of file +} diff --git a/core/language/es.json b/core/language/es.json index 3d1aff4f..74b9df22 100644 --- a/core/language/es.json +++ b/core/language/es.json @@ -209,7 +209,11 @@ "exp4": "Elija una billetera para hacer una copia de seguridad de la clave maestra privada.", "core": "Iniciar configuración básica", "qappNotification1": "Notificaciones de Q-App", - "selectnode": "Por favor seleccione una opción" + "selectnode": "Por favor seleccione una opción", + "arrr1": "¡Cartera ARRR no inicializada!", + "arrr2": "Por favor, vaya a la pestaña de billetera e inicialice su billetera arrr primero.", + "arrr3": "¡Necesita actualización principal!", + "arrr4": "¡Para guardar la clave privada de tu billetera arrr, primero necesitas una actualización básica!" }, "appinfo": { "blockheight": "Altura del Bloque", @@ -605,7 +609,8 @@ "schange39": "Abrir", "schange40": "Vista previa", "schange41": "Descargando por favor espere...", - "schange42": "Archivos descargados" + "schange42": "Archivos descargados", + "schange43": "Cualquier intento de descarga continuará en segundo plano; inténtelo de nuevo después de un tiempo." }, "tubespage": { "schange1": "Explorar Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "¿Le das permiso a esta aplicación para guardar el siguiente archivo?", "bchange47": "Publicación instantánea - requiere", "bchange48": "¿Le das permiso a esta aplicación para enviarte notificaciones?", - "bchange49": "¿Le das permiso a esta aplicación para obtener la información de tu billetera?" + "bchange49": "¿Le das permiso a esta aplicación para obtener la información de tu billetera?", + "bchange50": "Esta aplicación ha solicitado un cambio en tu perfil público. Propiedad: ", + "bchange51": "Para enviar los cambios no olvides hacer clic en 'Actualizar perfil'", + "bchange52": "¿Le das permiso a esta aplicación para obtener la información de tu billetera?", + "bchange53": "Permitir siempre que todas las aplicaciones recuperen automáticamente tu lista de amigos", + "bchange54": "¿Le das permiso a esta aplicación para acceder a tu lista de amigos?" }, "datapage": { "dchange1": "Gestión de datos", @@ -1214,5 +1224,33 @@ "saving2": "Nada que salvar", "saving3": "Guardar cambios no guardados", "saving4": "Deshacer cambios" + }, + "profile": { + "profile1": "No tienes nombre", + "profile2": "Ir al registro de nombre", + "profile3": "Actualizar perfil", + "profile4": "Lema", + "perfil5": "Biografía", + "profile6": "Direcciones de billetera", + "profile7": "Rellenar desde la interfaz de usuario", + "profile8": "Agregar propiedad personalizada", + "profile9": "Nombre de propiedad", + "profile10": "Campos", + "profile11": "Agregar campo", + "profile12": "Nombre de campo", + "profile13": "Valor de campo", + "profile14": "Actividad", + "profile15": "Sin valor", + "profile16": "Este nombre no tiene perfil", + "profile17": "No se puede recuperar el perfil", + "profile18": "Abrir perfil", + "profile19": "No se puede recuperar el perfil", + "profile20": "Nombre del registro", + "profile21": "Insertar dirección desde la UI", + "profile22": "Éxito", + "profile23": "cifrado", + "profile24": "Debes completar tanto el nombre del campo como el valor del campo para agregar una propiedad personalizada", + "profile25": "Es tu amigo", + "profile26": "Agregar como amigo" } -} \ No newline at end of file +} diff --git a/core/language/et.json b/core/language/et.json index e087ce20..7d70c6ef 100644 --- a/core/language/et.json +++ b/core/language/et.json @@ -209,7 +209,11 @@ "exp4": "Palun vali rahakott privaatse üldvõtme varundamiseks.", "core": "Tuuma käivitamise seaded", "qappNotification1": "Q-App märguanded", - "selectnode": "Palun tehke valik" + "selectnode": "Palun tehke valik", + "arrr1": "ARRR rahakott pole initsialiseeritud!", + "arrr2": "Minge rahakoti vahekaardile ja lähtestage esmalt oma arrr rahakott.", + "arrr3": "Vaja põhivärskendust!", + "arrr4": "Oma arrr rahakoti privaatvõtme salvestamiseks vajate esmalt põhivärskendust!" }, "appinfo": { "blockheight": "Ploki kõrgus", @@ -605,7 +609,8 @@ "schange39": "Ava", "schange40": "Kuva", "schange41": "Allalaadimine, palun oodake...", - "schange42": "Alla laetud failid" + "schange42": "Alla laetud failid", + "schange43": "Kõik allalaadimiskatsed jätkuvad taustal, proovige mõne aja pärast uuesti." }, "tubespage": { "schange1": "Sirvi Q-Tube", @@ -729,7 +734,12 @@ "bchange46": "Kas annad sellele rakendusele loa salvestada järgnev fail", "bchange47": "Kiire avaldamine - nõuab", "bchange48": "Kas annate sellele rakendusele loa teile teateid saata", - "bchange49": "Kas annad sellele rakendusele loa näha oma rahakoti teabe?" + "bchange49": "Kas annad sellele rakendusele loa näha oma rahakoti teabe?", + "bchange50": "See rakendus taotles teie avaliku profiili muutmist. Atribuut: ", + "bchange51": "Muudatuste esitamiseks ärge unustage klõpsata Uuenda profiili", + "bchange52": "Kas annate sellele rakendusele loa oma rahakoti teabe hankimiseks?", + "bchange53": "Luba alati oma sõprade loendit kõikidel rakendustel automaatselt laadida", + "bchange54": "Kas annate sellele rakendusele loa juurdepääsuks oma sõbraloendile?" }, "datapage": { "dchange1": "Andmete haldamine", @@ -1214,5 +1224,33 @@ "saving2": "Pole midagi päästa", "saving3": "Salvestage salvestamata muudatused", "saving4": "Võta muudatused tagasi" + }, + "profile": { + "profile1": "Teil pole nime", + "profile2": "Ava nime registreerimine", + "profile3": "Värskenda profiili", + "profile4": "Tutvustustekst", + "profile5": "Bio", + "profile6": "Rahakoti aadressid", + "profile7": "Täida kasutajaliidesest", + "profile8": "Lisa kohandatud atribuut", + "profile9": "Atribuudi nimi", + "profile10": "Väljad", + "profile11": "Lisa väli", + "profile12": "Välja nimi", + "profile13": "Välja väärtus", + "profile14": "Tegevus", + "profile15": "Väärtust pole", + "profile16": "Sellel nimel pole profiili", + "profile17": "Profiili ei saa tuua", + "profile18": "Ava profiil", + "profile19": "Profiili ei saa tuua", + "profile20": "Registreeri nimi", + "profile21": "Sisesta kasutajaliidese aadress", + "profile22": "Edu", + "profile23": "krüpteeritud", + "profile24": "Kohandatud atribuudi lisamiseks peate täitma nii välja nime kui ka väärtuse", + "profile25": "Kas su sõber", + "profile26": "Lisa sõbraks" } -} \ No newline at end of file +} diff --git a/core/language/fr.json b/core/language/fr.json index cdd83cb8..b81d4972 100644 --- a/core/language/fr.json +++ b/core/language/fr.json @@ -209,7 +209,11 @@ "exp4": "Veuillez choisir un portefeuille pour sauvegarder la clé principale privée.", "core": "Démarrer les paramètres du noyau", "qappNotification1": "Notifications Q-App", - "selectnode": "Veuillez sélectionner une option" + "selectnode": "Veuillez sélectionner une option", + "arrr1": "Portefeuille ARRR non initialisé !", + "arrr2": "Veuillez aller dans l'onglet Portefeuille et initialiser d'abord votre portefeuille arrr.", + "arrr3": "Besoin d'une mise à jour principale !", + "arrr4": "Pour sauvegarder la clé privée de votre portefeuille arrr, vous avez d'abord besoin d'une mise à jour principale !" }, "appinfo": { "blockheight": "Hauteur de bloc", @@ -605,7 +609,8 @@ "schange39": "Ouvrir", "schange40": "Aperçu", "schange41": "Téléchargement, veuillez patienter...", - "schange42": "Fichiers téléchargés" + "schange42": "Fichiers téléchargés", + "schange43": "Toutes les tentatives de téléchargement continueront en arrière-plan, veuillez réessayer après un certain temps." }, "tubespage": { "schange1": "Parcourir Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Autorisez-vous cette application à enregistrer le fichier suivant", "bchange47": "Publication instantanée - nécessite", "bchange48": "Autorisez-vous cette application à vous envoyer des notifications", - "bchange49": "Autorisez-vous cette application à récupérer les informations de votre portefeuille ?" + "bchange49": "Autorisez-vous cette application à récupérer les informations de votre portefeuille ?", + "bchange50": "Cette application a demandé une modification de votre profil public. Propriété : ", + "bchange51": "Pour soumettre les modifications n'oubliez pas de cliquer sur 'Mettre à jour le profil'", + "bchange52": "Autorisez-vous cette application à obtenir les informations de votre portefeuille ?", + "bchange53": "Toujours autoriser la récupération automatique de votre liste d'amis par toutes les applications", + "bchange54": "Autorisez-vous cette application à accéder à votre liste d'amis ?" }, "datapage": { "dchange1": "Gestion de données", @@ -1214,5 +1224,33 @@ "saving2": "Rien à sauver", "saving3": "Enregistrer les modifications non enregistrées", "saving4": "Annuler les changements" + }, + "profile": { + "profile1": "Vous n'avez pas de nom", + "profile2": "Aller à l'enregistrement du nom", + "profile3": "Mettre à jour le profil", + "profile4": "Slogan", + "profile5": "Biographie", + "profile6": "Adresses du portefeuille", + "profile7": "Remplir depuis l'interface utilisateur", + "profile8": "Ajouter une propriété personnalisée", + "profile9": "Nom de la propriété", + "profile10": "Champs", + "profile11": "Ajouter un champ", + "profile12": "Nom du champ", + "profile13": "Valeur du champ", + "profile14": "Activité", + "profile15": "Aucune valeur", + "profile16": "Ce nom n'a pas de profil", + "profile17": "Impossible de récupérer le profil", + "profile18": "Ouvrir le profil", + "profile19": "Impossible de récupérer le profil", + "profile20": "Nom du registre", + "profile21": "Insérer l'adresse depuis l'interface utilisateur", + "profile22": "Succès", + "profile23": "crypté", + "profile24": "Vous devez remplir à la fois le nom et la valeur du champ pour ajouter une propriété personnalisée", + "profile25": "Est-ce que ton ami", + "profile26": "Ajouter comme ami" } -} \ No newline at end of file +} diff --git a/core/language/hindi.json b/core/language/hindi.json index f2834588..9cf5e99f 100644 --- a/core/language/hindi.json +++ b/core/language/hindi.json @@ -209,7 +209,11 @@ "exp4": "निजी मास्टर कुंजी का बैकअप लेने के लिए कृपया एक वॉलेट चुनें।", "core": "कोर सेटिंग प्रारंभ करें", "qappNotification1": "क्यू-ऐप अधिसूचनाएँ", - "selectnode": "कृपया एक विकल्प चुनें" + "selectnode": "कृपया एक विकल्प चुनें", + "arrr1": "ARRR वॉलेट प्रारंभ नहीं हुआ!", + "arrr2": "कृपया वॉलेट टैब पर जाएं और पहले अपना Arrr वॉलेट प्रारंभ करें।", + "arrr3": "मुख्य अद्यतन की आवश्यकता है!", + "arrr4": "अपने Arrr वॉलेट की निजी कुंजी को सहेजने के लिए आपको पहले एक कोर अपडेट की आवश्यकता है!" }, "appinfo": { "blockheight": "ब्लॉक ऊँचाई", @@ -605,7 +609,8 @@ "schange39": "खोलें", "schange40": "पूर्वावलोकन", "schange41": "डाउनलोड हो रहा है कृपया प्रतीक्षा करें...", - "schange42": "फ़ाइलें डाउनलोड की गईं" + "schange42": "फ़ाइलें डाउनलोड की गईं", + "schange43": "कोई भी डाउनलोड करने का प्रयास पृष्ठभूमि में जारी रहेगा, कृपया थोड़ी देर बाद पुनः प्रयास करें।" }, "tubespage": { "schange1": "क्यू-ट्यूब ब्राउज़ करें", @@ -729,7 +734,12 @@ "bchange46": "क्या आप इस एप्लिकेशन को निम्न फ़ाइल सहेजने की अनुमति देते हैं", "bchange47": "तत्काल प्रकाशन - आवश्यक है", "bchange48": "क्या आप इस एप्लिकेशन को आपको सूचनाएं भेजने की अनुमति देते हैं", - "bchange49": "क्या आप इस एप्लिकेशन को अपने वॉलेट की जानकारी प्राप्त करने की अनुमति देते हैं?" + "bchange49": "क्या आप इस एप्लिकेशन को अपने वॉलेट की जानकारी प्राप्त करने की अनुमति देते हैं?", + "bchange50": "इस ऐप ने आपकी सार्वजनिक प्रोफ़ाइल में बदलाव का अनुरोध किया है। संपत्ति: ", + "bchange51": "परिवर्तन सबमिट करने के लिए 'अपडेट प्रोफ़ाइल' पर क्लिक करना न भूलें", + "bchange52": "क्या आप इस एप्लिकेशन को अपने वॉलेट की जानकारी प्राप्त करने की अनुमति देते हैं?", + "bchange53": "हमेशा अपनी मित्र सूची को सभी ऐप्स द्वारा स्वचालित रूप से पुनर्प्राप्त करने की अनुमति दें", + "bchange54": "क्या आप इस एप्लिकेशन को अपनी मित्र सूची तक पहुंचने की अनुमति देते हैं?" }, "datapage": { "dchange1": "डाटा प्रबंधन", @@ -1214,5 +1224,33 @@ "saving2": "बचाने के लिए कुछ भी नहीं", "saving3": "सहेजे न गए परिवर्तन सहेजें", "saving4": "परिवर्तन पूर्ववत करें" + }, + "profile": { + "profile1": "आपका कोई नाम नहीं है", + "profile2": "नाम पंजीकरण पर जाएँ", + "profile3": "प्रोफ़ाइल अपडेट करें", + "profile4": "टैगलाइन", + "profile5": "जैव", + "profile6": "वॉलेट पते", + "profile7": "यूआई से भरें", + "profile8": "कस्टम प्रॉपर्टी जोड़ें", + "profile9": "संपत्ति का नाम", + "profile10": "फ़ील्ड्स", + "profile11": "फ़ील्ड जोड़ें", + "profile12": "फ़ील्ड का नाम", + "profile13": "फ़ील्ड मान", + "profile14": "गतिविधि", + "profile15": "कोई मूल्य नहीं", + "profile16": "इस नाम की कोई प्रोफ़ाइल नहीं है", + "profile17": "प्रोफ़ाइल लाने में असमर्थ", + "profile18": "प्रोफ़ाइल खोलें", + "profile19": "प्रोफ़ाइल नहीं लाया जा सकता", + "profile20": "नाम पंजीकृत करें", + "profile21": "यूआई से पता डालें", + "profile22": "सफलता", + "profile23": "एन्क्रिप्टेड", + "profile24": "कस्टम प्रॉपर्टी जोड़ने के लिए आपको फ़ील्ड नाम और फ़ील्ड मान दोनों भरने होंगे", + "profile25": "क्या आपका मित्र है", + "profile26": "मित्र के रूप में जोड़ें" } -} \ No newline at end of file +} diff --git a/core/language/hr.json b/core/language/hr.json index f11aaf4c..0d99fc94 100644 --- a/core/language/hr.json +++ b/core/language/hr.json @@ -209,7 +209,11 @@ "exp4": "Odaberite novčanik za sigurnosnu kopiju privatnog glavnog ključa.", "core": "Pokreni osnovne postavke", "qappNotification1": "Obavijesti Q-App", - "selectnode": "Molimo odaberite opciju" + "selectnode": "Molimo odaberite opciju", + "arrr1": "Novčanik ARRR nije inicijaliziran!", + "arrr2": "Idite na karticu novčanika i prvo inicijalizirajte svoj arrr novčanik.", + "arrr3": "Potrebno je ažuriranje jezgre!", + "arrr4": "Da biste spremili privatni ključ vašeg arrr novčanika, prvo trebate ažurirati jezgru!" }, "appinfo": { "blockheight": "Visina bloka", @@ -605,7 +609,8 @@ "schange39": "Otvori", "schange40": "Pregled", "schange41": "Preuzimanje, molimo pričekajte...", - "schange42": "Preuzete datoteke" + "schange42": "Preuzete datoteke", + "schange43": "Svaka pokušaja preuzimanja nastavit će se u pozadini, pokušajte ponovno nakon nekog vremena." }, "tubespage": { "schange1": "Pregledaj Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Dajete li ovoj aplikaciji dopuštenje za spremanje sljedeće datoteke", "bchange47": "Trenutno objavljivanje - zahtijeva", "bchange48": "Dajete li ovoj aplikaciji dopuštenje da vam šalje obavijesti", - "bchange49": "Dajete li ovoj aplikaciji dopuštenje da dobije podatke o vašem novčaniku?" + "bchange49": "Dajete li ovoj aplikaciji dopuštenje da dobije podatke o vašem novčaniku?", + "bchange50": "Ova aplikacija je zatražila promjenu vašeg javnog profila. Svojstvo: ", + "bchange51": "Za slanje promjena ne zaboravite kliknuti 'Ažuriraj profil'", + "bchange52": "Dajete li ovoj aplikaciji dopuštenje da dobije podatke o vašem novčaniku?", + "bchange53": "Uvijek dopusti da sve aplikacije automatski dohvate tvoj popis prijatelja", + "bchange54": "Dajete li ovoj aplikaciji dopuštenje za pristup vašem popisu prijatelja?" }, "datapage": { "dchange1": "Upravljanje podacima", @@ -1214,5 +1224,33 @@ "saving2": "Ništa za spasiti", "saving3": "Spremi nespremljene promjene", "saving4": "Poništi promjene" + }, + "profile": { + "profile1": "Nemate ime", + "profile2": "Idi na registraciju imena", + "profile3": "Ažuriraj profil", + "profile4": "Slogan", + "profile5": "Bio", + "profile6": "Adrese novčanika", + "profile7": "Ispunite iz korisničkog sučelja", + "profile8": "Dodaj prilagođeno svojstvo", + "profile9": "Naziv svojstva", + "profile10": "Polja", + "profile11": "Dodaj polje", + "profile12": "Naziv polja", + "profile13": "Vrijednost polja", + "profile14": "Aktivnost", + "profile15": "Nema vrijednosti", + "profile16": "Ovo ime nema profil", + "profile17": "Nije moguće dohvatiti profil", + "profile18": "Otvori profil", + "profile19": "Ne mogu dohvatiti profil", + "profile20": "Registriraj ime", + "profile21": "Umetni adresu iz korisničkog sučelja", + "profile22": "Uspjeh", + "profile23": "šifrirano", + "profile24": "Morate ispuniti i naziv polja i vrijednost polja da biste dodali prilagođeno svojstvo", + "profile25": "Je li vaš prijatelj", + "profile26": "Dodaj kao prijatelja" } -} \ No newline at end of file +} diff --git a/core/language/hu.json b/core/language/hu.json index a6c465dd..00123278 100644 --- a/core/language/hu.json +++ b/core/language/hu.json @@ -209,7 +209,11 @@ "exp4": "Kérjük, válasszon egy tárcát a privát főkulcs biztonsági mentéséhez.", "core": "Alapbeállítások indítása", "qappNotification1": "Q-App értesítések", - "selectnode": "Kérjük, válasszon egy lehetőséget" + "selectnode": "Kérjük, válasszon egy lehetőséget", + "arrr1": "ARRR Wallet nincs inicializálva!", + "arrr2": "Kérjük, lépjen a Wallet fülre, és először inicializálja arrr pénztárcáját.", + "arrr3": "Alapfrissítésre van szükség!", + "arrr4": "Az arrr pénztárca privát kulcsának mentéséhez először egy alapvető frissítésre van szükség!" }, "appinfo": { "blockheight": "Blokk Magassága", @@ -605,7 +609,8 @@ "schange39": "Nyitva", "schange40": "Előnézet", "schange41": "Letöltés, kérem várjon...", - "schange42": "Fájlok letöltve" + "schange42": "Fájlok letöltve", + "schange43": "Minden letöltési kísérlet a háttérben folytatódik. Kérjük, próbálja újra egy idő után." }, "tubespage": { "schange1": "Tallózás a Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Engedélyezi ennek az alkalmazásnak a következő fájl mentését", "bchange47": "Azonnali közzététel – szükséges", "bchange48": "Engedélyezi ennek az alkalmazásnak, hogy értesítéseket küldjön Önnek", - "bchange49": "Engedélyt ad ennek az alkalmazásnak, hogy megszerezze a pénztárca adatait?" + "bchange49": "Engedélyt ad ennek az alkalmazásnak, hogy megszerezze a pénztárca adatait?", + "bchange50": "Ez az alkalmazás módosítást kért nyilvános profiljában. Tulajdonság: ", + "bchange51": "A módosítások elküldéséhez ne felejtsen el a 'Profil frissítése' gombra kattintani", + "bchange52": "Engedélyt ad ennek az alkalmazásnak a pénztárca adatainak lekérésére?", + "bchange53": "Mindig engedélyezze, hogy az összes alkalmazás automatikusan lekérje a barátlistáját", + "bchange54": "Engedélyt ad ennek az alkalmazásnak, hogy hozzáférjen a barátlistájához?" }, "datapage": { "dchange1": "Adatkezelés", @@ -1214,5 +1224,33 @@ "saving2": "Nincs mit menteni", "saving3": "Mentse a nem mentett változtatásokat", "saving4": "Változtatások visszavonása" + }, + "profile": { + "profile1": "Nincs neved", + "profile2": "Ugrás a névregisztrációhoz", + "profile3": "Profil frissítése", + "profile4": "Tagline", + "profile5": "Életrajz", + "profile6": "pénztárca címei", + "profile7": "Kitöltés a felhasználói felületről", + "profile8": "Egyéni tulajdonság hozzáadása", + "profile9": "Tulajdon neve", + "profile10": "Mezők", + "profile11": "Mező hozzáadása", + "profile12": "Mező neve", + "profile13": "Mező értéke", + "profile14": "Tevékenység", + "profile15": "Nincs érték", + "profile16": "Ennek a névnek nincs profilja", + "profile17": "Nem sikerült lekérni a profilt", + "profile18": "Profil megnyitása", + "profile19": "Nem sikerült lekérni a profilt", + "profile20": "Regisztrációs név", + "profile21": "Cím beszúrása a felhasználói felületről", + "profile22": "Siker", + "profile23": "titkosított", + "profile24": "Egyéni tulajdonság hozzáadásához ki kell töltenie a mező nevét és értékét egyaránt", + "profile25": "A barátod", + "profile26": "Hozzáadás ismerősként" } -} \ No newline at end of file +} diff --git a/core/language/it.json b/core/language/it.json index c10fe199..111f5732 100644 --- a/core/language/it.json +++ b/core/language/it.json @@ -209,7 +209,11 @@ "exp4": "Scegli un portafoglio per il backup della chiave master privata.", "core": "Avvia impostazioni principali", "qappNotification1": "Notifiche Q-App", - "selectnode": "Seleziona un'opzione" + "selectnode": "Seleziona un'opzione", + "arrr1": "Portafoglio ARRR non inizializzato!", + "arrr2": "Vai alla scheda Portafoglio e inizializza prima il tuo portafoglio arrr.", + "arrr3": "È necessario l'aggiornamento del core!", + "arrr4": "Per salvare la chiave privata del tuo portafoglio arrr devi prima aggiornare il core!" }, "appinfo": { "blockheight": "Altezza blocco", @@ -605,7 +609,8 @@ "schange39": "Apri", "schange40": "Anteprima", "schange41": "Download in corso, attendere...", - "schange42": "File scaricati" + "schange42": "File scaricati", + "schange43": "Qualsiasi tentativo di download continuerà in background, riprova dopo un po." }, "tubespage": { "schange1": "Sfoglia Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Concedi a questa applicazione il permesso di salvare il seguente file", "bchange47": "Pubblicazione istantanea - richiede", "bchange48": "Concedi a questa applicazione il permesso di inviarti notifiche", - "bchange49": "Concedi a questa applicazione il permesso di ottenere informazioni sul tuo portafoglio?" + "bchange49": "Concedi a questa applicazione il permesso di ottenere informazioni sul tuo portafoglio?", + "bchange50": "Questa app ha richiesto una modifica al tuo profilo pubblico. Proprietà: ", + "bchange51": "Per inviare le modifiche non dimenticare di fare clic su 'Aggiorna profilo'", + "bchange52": "Concedi a questa applicazione il permesso di ottenere informazioni sul tuo portafoglio?", + "bchange53": "Consenti sempre che la tua lista amici venga recuperata automaticamente da tutte le app", + "bchange54": "Concedi a questa applicazione il permesso di accedere alla tua lista di amici?" }, "datapage": { "dchange1": "Gestione dati", @@ -1214,5 +1224,33 @@ "saving2": "Niente da salvare", "saving3": "Salva le modifiche non salvate", "saving4": "Cancella i cambiamenti" + }, + "profile": { + "profile1": "Non hai un nome", + "profile2": "Vai alla registrazione del nome", + "profile3": "Aggiorna profilo", + "profile4": "Slogan", + "profile5": "Biografia", + "profile6": "Indirizzi del portafoglio", + "profile7": "Compila dall'interfaccia utente", + "profile8": "Aggiungi proprietà personalizzata", + "profile9": "Nome della struttura", + "profile10": "Campi", + "profile11": "Aggiungi campo", + "profile12": "Nome campo", + "profile13": "Valore del campo", + "profile14": "Attività", + "profile15": "Nessun valore", + "profile16": "Questo nome non ha profilo", + "profile17": "Impossibile recuperare il profilo", + "profile18": "Apri profilo", + "profile19": "Impossibile recuperare il profilo", + "profile20": "Nome registrato", + "profile21": "Inserisci indirizzo dall'interfaccia utente", + "profile22": "Successo", + "profile23": "crittografato", + "profile24": "Devi compilare sia il nome del campo che il valore del campo per aggiungere una proprietà personalizzata", + "profile25": "È tuo amico", + "profile26": "Aggiungi come amico" } -} \ No newline at end of file +} diff --git a/core/language/jp.json b/core/language/jp.json index beb6ebcd..069efd6c 100644 --- a/core/language/jp.json +++ b/core/language/jp.json @@ -209,7 +209,11 @@ "exp4": "秘密マスターキーをバックアップするウォレットを選択してください。", "core": "Core設定を開始", "qappNotification1": "Q-App 通知", - "selectnode": "オプションを選択してください" + "selectnode": "オプションを選択してください", + "arrr1": "ARRR ウォレットが初期化されていません!", + "arrr2": "ウォレットタブに移動して、まずarrrウォレットを初期化してください。", + "arrr3": "コアのアップデートが必要です!", + "arrr4": "arrr ウォレットの秘密キーを保存するには、まずコアのアップデートが必要です!" }, "appinfo": { "blockheight": "ブロック高", @@ -605,7 +609,8 @@ "schange39": "開く", "schange40": "プレビュー", "schange41": "ダウンロード中です。しばらくお待ちください...", - "schange42": "ダウンロードしたファイル" + "schange42": "ダウンロードしたファイル", + "schange43": "ダウンロードの試行はバックグラウンドで続行されます。しばらくしてからもう一度お試しください。" }, "tubespage": { "schange1": "Q-Tubeを閲覧", @@ -729,7 +734,12 @@ "bchange46": "このアプリケーションに次のファイルを保存する事を許可しますか?", "bchange47": "インスタント公開 - が必要です", "bchange48": "このアプリケーションに通知を送信する権限を与えますか?", - "bchange49": "ウォレット情報を取得する許可をこのアプリケーションに与えますか?" + "bchange49": "ウォレット情報を取得する許可をこのアプリケーションに与えますか?", + "bchange50": "このアプリはあなたの公開プロフィールの変更をリクエストしました。プロパティ: ", + "bchange51": "変更を送信するには、[プロフィールを更新] をクリックすることを忘れないでください。", + "bchange52": "ウォレット情報を取得する許可をこのアプリケーションに与えますか?", + "bchange53": "すべてのアプリによる友達リストの自動取得を常に許可します", + "bchange54": "このアプリケーションに友達リストへのアクセスを許可しますか?" }, "datapage": { "dchange1": "データ管理", @@ -1214,5 +1224,33 @@ "saving2": "保存するものは何もありません", "saving3": "未保存の変更を保存する", "saving4": "変更を元に戻します" + }, + "profile": { + "profile1": "名前がありません", + "profile2": "名前の登録へ", + "profile3": "プロファイルを更新", + "profile4": "キャッチフレーズ", + "profile5": "略歴", + "profile6": "ウォレットアドレス", + "profile7": "UI から入力", + "profile8": "カスタム プロパティを追加", + "profile9": "プロパティ名", + "profile10": "フィールド", + "profile11": "フィールドを追加", + "profile12": "フィールド名", + "profile13": "フィールド値", + "profile14": "アクティビティ", + "profile15": "値なし", + "profile16": "この名前にはプロフィールがありません", + "profile17": "プロファイルを取得できません", + "profile18": "プロファイルを開く", + "profile19": "プロファイルを取得できません", + "profile20": "登録名", + "profile21": "UI からアドレスを挿入", + "profile22": "成功", + "profile23": "暗号化", + "profile24": "カスタム プロパティを追加するには、フィールド名とフィールド値の両方を入力する必要があります", + "profile25": "あなたの友人です", + "profile26": "友達として追加" } -} \ No newline at end of file +} diff --git a/core/language/ko.json b/core/language/ko.json index 14d005a3..76c8a105 100644 --- a/core/language/ko.json +++ b/core/language/ko.json @@ -209,7 +209,11 @@ "exp4": "개인 마스터 키를 백업할 지갑을 선택하세요.", "core": "코어 설정 시작", "qappNotification1": "Q-App 알림", - "selectnode": "옵션을 선택하세요" + "selectnode": "옵션을 선택하세요", + "arrr1": "ARRR 지갑이 초기화되지 않았습니다!", + "arrr2": "지갑 탭으로 이동하여 먼저 arrr 지갑을 초기화하세요.", + "arrr3": "핵심 업데이트가 필요합니다!", + "arrr4": "arrr 지갑의 개인 키를 저장하려면 먼저 핵심 업데이트가 필요합니다!" }, "appinfo": { "blockheight": "블록 높이", @@ -605,7 +609,8 @@ "schange39": "열기", "schange40": "미리보기", "schange41": "다운로드 중입니다...", - "schange42": "다운로드된 파일" + "schange42": "다운로드된 파일", + "schange43": "모든 다운로드 시도는 백그라운드에서 계속됩니다. 잠시 후에 다시 시도하십시오." }, "tubespage": { "schange1": "Q-Tubes 둘러보기", @@ -729,7 +734,12 @@ "bchange46": "이 응용 프로그램에 다음 파일을 저장할 권한을 부여하시겠습니까?", "bchange47": "즉시 게시 - 필요", "bchange48": "이 애플리케이션에 알림을 보낼 수 있는 권한을 부여하시겠습니까?", - "bchange49": "이 애플리케이션에 지갑 정보를 얻을 수 있는 권한을 부여하시겠습니까?" + "bchange49": "이 애플리케이션에 지갑 정보를 얻을 수 있는 권한을 부여하시겠습니까?", + "bchange50": "이 앱이 당신의 공개 프로필 변경을 요청했습니다. 속성: ", + "bchange51": "변경 사항을 제출하려면 '프로필 업데이트'를 클릭하는 것을 잊지 마세요.", + "bchange52": "이 애플리케이션에 지갑 정보를 얻을 수 있는 권한을 부여하시겠습니까?", + "bchange53": "항상 모든 앱에서 친구 목록을 자동으로 검색하도록 허용", + "bchange54": "이 애플리케이션에 친구 목록에 접근할 수 있는 권한을 부여하시겠습니까?" }, "datapage": { "dchange1": "데이터 관리", @@ -1214,5 +1224,33 @@ "saving2": "저장할 항목이 없습니다.", "saving3": "저장되지 않은 변경사항 저장", "saving4": "변경사항 취소" + }, + "profile": { + "profile1": "당신은 이름이 없습니다", + "profile2": "이름 등록으로 이동", + "profile3": "프로필 업데이트", + "profile4": "태그라인", + "profile5": "소개", + "profile6": "지갑 주소", + "profile7": "UI에서 채우기", + "profile8": "사용자 정의 속성 추가", + "profile9": "속성 이름", + "profile10": "필드", + "profile11": "필드 추가", + "profile12": "필드 이름", + "profile13": "필드 값", + "profile14": "활동", + "profile15": "값 없음", + "profile16": "이 이름에는 프로필이 없습니다", + "profile17": "프로필을 가져올 수 없습니다", + "profile18": "프로필 열기", + "profile19": "프로필을 가져올 수 없습니다", + "profile20": "등록 이름", + "profile21": "UI에서 주소를 삽입하세요", + "profile22": "성공", + "profile23": "암호화됨", + "profile24": "사용자 정의 속성을 추가하려면 필드 이름과 필드 값을 모두 입력해야 합니다", + "profile25": "당신의 친구입니까?", + "profile26": "친구로 추가" } -} \ No newline at end of file +} diff --git a/core/language/nl.json b/core/language/nl.json index 9fc69fd9..a46952fb 100644 --- a/core/language/nl.json +++ b/core/language/nl.json @@ -609,7 +609,8 @@ "schange39": "Openen", "schange40": "Voorbeeld", "schange41": "Download bezig; Even geduld...", - "schange42": "Bestanden die werden gedownload" + "schange42": "Bestanden die werden gedownload", + "schange43": "Elke downloadpoging gaat door op de achtergrond, probeer het na een tijdje opnieuw." }, "tubespage": { "schange1": "Overzicht Q-Tubes", diff --git a/core/language/no.json b/core/language/no.json index 75945672..c658e7b7 100644 --- a/core/language/no.json +++ b/core/language/no.json @@ -209,7 +209,11 @@ "exp4": "Velg en lommebok for å sikkerhetskopiere den private hovednøkkelen.", "core": "Start kjerneinnstillinger", "qappNotification1": "Q-App varsler", - "selectnode": "Vennligst velg et alternativ" + "selectnode": "Vennligst velg et alternativ", + "arrr1": "ARRR-lommebok ikke initialisert !", + "arrr2": "Vennligst gå til lommebok-fanen og initialiser arrr-lommeboken først.", + "arrr3": "Trenger kjerneoppdatering!", + "arrr4": "For å lagre den private nøkkelen til arrr-lommeboken din trenger du en kjerneoppdatering først!" }, "appinfo": { "blockheight": "Blokkhøyde", @@ -605,7 +609,8 @@ "schange39": "Åpne", "schange40": "Forhåndsvisning", "schange41": "Laster ned, vennligst vent...", - "schange42": "Filer lastet ned" + "schange42": "Filer lastet ned", + "schange43": "Alle forsøk på nedlasting vil fortsette i bakgrunnen, prøv igjen etter en stund." }, "tubespage": { "schange1": "Bla gjennom Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Gir du dette programmet tillatelse til å lagre følgende fil", "bchange47": "Øyeblikkelig publisering - krever", "bchange48": "Gir du denne applikasjonen tillatelse til å sende deg varsler", - "bchange49": "Gir du dette programmet tillatelse til å få lommebokinformasjonen din?" + "bchange49": "Gir du dette programmet tillatelse til å få lommebokinformasjonen din?", + "bchange50": "Denne appen har bedt om en endring av din offentlige profil. Eiendom: ", + "bchange51": "For å sende inn endringene, ikke glem å klikke på 'Oppdater profil'", + "bchange52": "Gir du dette programmet tillatelse til å få lommebokinformasjon?", + "bchange53": "La alltid vennelisten din hentes automatisk av alle apper", + "bchange54": "Gir du dette programmet tillatelse til å få tilgang til vennelisten din?" }, "datapage": { "dchange1": "Data-administrasjon", @@ -1214,5 +1224,33 @@ "saving2": "Ingenting å spare", "saving3": "Lagre ulagrede endringer", "saving4": "Angre endringer" + }, + "profile": { + "profile1": "Du har ikke noe navn", + "profile2": "Gå til navneregistrering", + "profile3": "Oppdater profil", + "profile4": "Tagline", + "profile5": "Bio", + "profile6": "Lommebokadresser", + "profile7": "Fyll fra brukergrensesnitt", + "profile8": "Legg til egendefinert egenskap", + "profile9": "Eiendomsnavn", + "profile10": "Felter", + "profile11": "Legg til felt", + "profile12": "Feltnavn", + "profile13": "Feltverdi", + "profile14": "Aktivitet", + "profile15": "Ingen verdi", + "profile16": "Dette navnet har ingen profil", + "profile17": "Kan ikke hente profil", + "profile18": "Åpne profil", + "profile19": "Kan ikke hente profil", + "profile20": "Registrer navn", + "profile21": "Sett inn adresse fra brukergrensesnittet", + "profile22": "Suksess", + "profile23": "kryptert", + "profile24": "Du må fylle ut både feltnavn og feltverdi for å legge til en egendefinert egenskap", + "profile25": "Er din venn", + "profile26": "Legg til som venn" } -} \ No newline at end of file +} diff --git a/core/language/pl.json b/core/language/pl.json index 1adebbca..307e1435 100644 --- a/core/language/pl.json +++ b/core/language/pl.json @@ -209,7 +209,11 @@ "exp4": "Wybierz portfel do wykonania kopii zapasowej prywatnego klucza głównego.", "core": "Uruchom podstawowe ustawienia", "qappNotification1": "Powiadomienia Q-App", - "selectnode": "Proszę wybrać opcję" + "selectnode": "Proszę wybrać opcję", + "arrr1": "Portfel ARRR nie został zainicjowany!", + "arrr2": "Przejdź do zakładki portfela i najpierw zainicjalizuj swój portfel arrr.", + "arrr3": "Potrzebujesz aktualizacji rdzenia!", + "arrr4": "Aby zapisać klucz prywatny swojego portfela arrr, potrzebujesz najpierw aktualizacji rdzenia!" }, "appinfo": { "blockheight": "Wysokość bloku", @@ -605,7 +609,8 @@ "schange39": "Otwórz", "schange40": "Podgląd", "schange41": "Pobieranie, proszę czekać...", - "schange42": "Pliki pobrane" + "schange42": "Pliki pobrane", + "schange43": "Wszelkie próby pobierania będą kontynuowane w tle. Spróbuj ponownie za chwilę." }, "tubespage": { "schange1": "Przeglądaj Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Czy zezwalasz tej aplikacji na zapisanie następującego pliku", "bchange47": "Błyskawiczna publikacja - wymaga", "bchange48": "Czy dajesz tej aplikacji pozwolenie na wysyłanie Ci powiadomień", - "bchange49": "Czy dajesz tej aplikacji pozwolenie na uzyskanie informacji o Twoim portfelu?" + "bchange49": "Czy dajesz tej aplikacji pozwolenie na uzyskanie informacji o Twoim portfelu?", + "bchange50": "Ta aplikacja zażądała zmiany w Twoim profilu publicznym. Właściwość: ", + "bchange51": "Aby przesłać zmiany, nie zapomnij kliknąć 'Aktualizuj profil'", + "bchange52": "Czy dajesz tej aplikacji pozwolenie na uzyskanie informacji o Twoim portfelu?", + "bchange53": "Zawsze zezwalaj na automatyczne pobieranie listy znajomych przez wszystkie aplikacje", + "bchange54": "Czy dajesz tej aplikacji uprawnienia dostępu do listy znajomych?" }, "datapage": { "dchange1": "Zarządzanie danymi", @@ -1214,5 +1224,33 @@ "saving2": "Nic do uratowania", "saving3": "Zapisz niezapisane zmiany", "saving4": "Cofnij zmiany" + }, + "profile": { + "profile1": "Nie masz imienia", + "profile2": "Przejdź do rejestracji nazwy", + "profile3": "Aktualizuj profil", + "profile4": "Slogan", + "profil5": "Bio", + "profile6": "Adresy portfeli", + "profile7": "Wypełnij z interfejsu użytkownika", + "profile8": "Dodaj niestandardową właściwość", + "profile9": "Nazwa właściwości", + "profile10": "Pola", + "profile11": "Dodaj pole", + "profile12": "Nazwa pola", + "profile13": "Wartość pola", + "profile14": "Aktywność", + "profile15": "Brak wartości", + "profile16": "Ta nazwa nie ma profilu", + "profile17": "Nie można pobrać profilu", + "profile18": "Otwórz profil", + "profile19": "Nie można pobrać profilu", + "profile20": "Zarejestruj nazwę", + "profile21": "Wstaw adres z interfejsu użytkownika", + "profile22": "Sukces", + "profile23": "zaszyfrowane", + "profile24": "Musisz wypełnić zarówno nazwę pola, jak i wartość pola, aby dodać niestandardową właściwość", + "profile25": "Jest Twoim przyjacielem", + "profile26": "Dodaj jako znajomego" } -} \ No newline at end of file +} diff --git a/core/language/pt.json b/core/language/pt.json index f96947cb..4d893599 100644 --- a/core/language/pt.json +++ b/core/language/pt.json @@ -209,7 +209,11 @@ "exp4": "Por favor, escolha uma carteira para fazer backup da chave mestra privada.", "core": "Iniciar configurações do núcleo", "qappNotification1": "Notificações de Q-App", - "selectnode": "Por favor selecione uma opção" + "selectnode": "Por favor selecione uma opção", + "arrr1": "Carteira ARRR não inicializada!", + "arrr2": "Por favor, vá para a aba carteira e inicialize sua carteira arrr primeiro.", + "arrr3": "Precisa de atualização principal!", + "arrr4": "Para salvar a chave privada da sua carteira arrr você precisa primeiro de uma atualização principal!" }, "appinfo": { "blockheight": "Altura do Bloco", @@ -605,7 +609,8 @@ "schange39": "Abrir", "schange40": "Pré-visualização", "schange41": "Baixando, por favor, aguarde...", - "schange42": "Arquivos baixados" + "schange42": "Arquivos baixados", + "schange43": "Qualquer tentativa de download continuará em segundo plano, tente novamente depois de um tempo." }, "tubespage": { "schange1": "Navegar Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Você concede permissão a este aplicativo para salvar o seguinte arquivo", "bchange47": "Publicação instantânea - requer", "bchange48": "Você dá permissão a este aplicativo para enviar notificações para você?", - "bchange49": "Você dá permissão a este aplicativo para obter informações da sua carteira?" + "bchange49": "Você dá permissão a este aplicativo para obter informações da sua carteira?", + "bchange50": "Este aplicativo solicitou uma alteração em seu perfil público. Propriedade: ", + "bchange51": "Para enviar as alterações não esqueça de clicar em 'Atualizar perfil'", + "bchange52": "Você dá permissão a este aplicativo para obter informações da sua carteira?", + "bchange53": "Sempre permita que sua lista de amigos seja recuperada automaticamente por todos os aplicativos", + "bchange54": "Você dá permissão a este aplicativo para acessar sua lista de amigos?" }, "datapage": { "dchange1": "Gerenciamento de Dados", @@ -1214,5 +1224,33 @@ "saving2": "Nada para salvar", "saving3": "Salvar alterações não salvas", "saving4": "Desfazer mudanças" + }, + "profile": { + "profile1": "Você não tem nome", + "profile2": "Ir para registro de nome", + "profile3": "Atualizar perfil", + "profile4": "Slogan", + "perfile5": "Bio", + "profile6": "Endereços da carteira", + "profile7": "Preencher a partir da UI", + "profile8": "Adicionar propriedade personalizada", + "profile9": "Nome da propriedade", + "perfile10": "Campos", + "profile11": "Adicionar campo", + "profile12": "Nome do campo", + "profile13": "Valor do campo", + "profile14": "Atividade", + "profile15": "Sem valor", + "profile16": "Este nome não tem perfil", + "profile17": "Não foi possível buscar o perfil", + "profile18": "Abrir perfil", + "profile19": "Não foi possível buscar o perfil", + "profile20": "Registrar nome", + "profile21": "Inserir endereço da UI", + "profile22": "Sucesso", + "profile23": "criptografado", + "profile24": "Você deve preencher o nome e o valor do campo para adicionar uma propriedade personalizada", + "profile25": "É seu amigo", + "profile26": "Adicionar como amigo" } -} \ No newline at end of file +} diff --git a/core/language/ro.json b/core/language/ro.json index b06f6abd..d71277b5 100644 --- a/core/language/ro.json +++ b/core/language/ro.json @@ -209,7 +209,11 @@ "exp4": "Vă rugăm să alegeți un portofel pentru a face backup cheii master private.", "core": "Porniți setările de bază", "qappNotification1": "Notificări Q-App", - "selectnode": "Vă rugăm să selectați o opțiune" + "selectnode": "Vă rugăm să selectați o opțiune", + "arrr1": "Portoletul ARRR nu este inițializat !", + "arrr2": "Vă rugăm să accesați fila Portofel și să inițializați mai întâi portofelul arrr.", + "arrr3": "Am nevoie de actualizare de bază !", + "arrr4": "Pentru a salva cheia privată a portofelului dvs. arrr, aveți nevoie mai întâi de o actualizare de bază !" }, "appinfo": { "blockheight": "Dimensiunea blocului", @@ -605,7 +609,8 @@ "schange39": "Deschide", "schange40": "Previzualizare", "schange41": "Se descarcă, așteptați...", - "schange42": "Fișiere descărcate" + "schange42": "Fișiere descărcate", + "schange43": "Orice încercare de descărcare va continua în fundal, vă rugăm să încercați din nou după un timp." }, "tubespage": { "schange1": "Răsfoiți Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Dați această aplicație permisiunea de a salva următorul fișier", "bchange47": "Publicare instantanee - necesită", "bchange48": "Acordați acestei aplicații permisiunea de a vă trimite notificări", - "bchange49": "Oferiți acestei aplicații permisiunea de a obține informațiile despre portofel?" + "bchange49": "Oferiți acestei aplicații permisiunea de a obține informațiile despre portofel?", + "bchange50": "Această aplicație a solicitat o modificare a profilului dvs. public. Proprietate: ", + "bchange51": "Pentru a trimite modificările nu uitați să faceți clic pe Actualizați profilul", + "bchange52": "Dați această aplicație permisiunea de a obține informațiile despre portofel?", + "bchange53": "Permiteți întotdeauna ca lista de prieteni să fie preluată automat de toate aplicațiile", + "bchange54": "Acordați acestei aplicații permisiunea de a vă accesa lista de prieteni?" }, "datapage": { "dchange1": "Gestionare date", @@ -1214,5 +1224,33 @@ "saving2": "Nimic de salvat", "saving3": "Salvați modificările nesalvate", "saving4": "Anulează modificările" + }, + "profile": { + "profile1": "Nu aveți un nume", + "profile2": "Mergeți la înregistrarea numelui", + "profile3": "Actualizează profilul", + "profile4": "Slogan", + "profile5": "Biografie", + "profile6": "Adrese portofel", + "profile7": "Umpleți din UI", + "profile8": "Adăugați o proprietate personalizată", + "profile9": "Numele proprietății", + "profile10": "Câmpuri", + "profile11": "Adăugați câmp", + "profile12": "Numele câmpului", + "profile13": "Valoarea câmpului", + "profile14": "Activitate", + "profile15": "Fără valoare", + "profile16": "Acest nume nu are profil", + "profile17": "Nu se poate prelua profilul", + "profile18": "Deschide profilul", + "profile19": "Nu se poate prelua profilul", + "profile20": "Înregistrați numele", + "profile21": "Inserați adresa din interfața de utilizare", + "profile22": "Succes", + "profile23": "criptat", + "profile24": "Trebuie să completați atât numele câmpului, cât și valoarea câmpului pentru a adăuga o proprietate personalizată", + "profile25": "Este prietenul tău", + "profile26": "Adaugă ca prieten" } -} \ No newline at end of file +} diff --git a/core/language/rs.json b/core/language/rs.json index 47577810..88852b30 100644 --- a/core/language/rs.json +++ b/core/language/rs.json @@ -209,7 +209,11 @@ "exp4": "Molimo izaberite novčanik za rezervnu kopiju privatnog glavnog ključa.", "core": "Pokreni podešavanja jezgra", "qappNotification1": "Obaveštenja o Q-App", - "selectnode": "Izaberite opciju" + "selectnode": "Izaberite opciju", + "arrr1": "ARRR novčanik nije inicijalizovan!", + "arrr2": "Molim vas idite na karticu Novčanik i prvo inicijalizujte svoj arrr novčanik.", + "arrr3": "Potrebno je ažuriranje jezgra!", + "arrr4": "Da biste sačuvali privatni ključ vašeg arrr novčanika, prvo vam je potrebno ažuriranje jezgra!" }, "appinfo": { "blockheight": "Visina Bloka", @@ -605,7 +609,8 @@ "schange39": "Otvori", "schange40": "Pregled", "schange41": "Preuzimanje molim sačekajte...", - "schange42": "Preuzete datoteke" + "schange42": "Preuzete datoteke", + "schange43": "Svaki pokušaj preuzimanja će se nastaviti u pozadini, pokušajte ponovo nakon nekog vremena." }, "tubespage": { "schange1": "Pregledaj Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Da li ovoj aplikaciji dajete dozvolu da sačuva sledeću datoteku", "bchange47": "Trenutno objavljivanje - zahteva", "bchange48": "Da li ovoj aplikaciji dajete dozvolu da vam šalje obaveštenja", - "bchange49": "Da li ovoj aplikaciji dajete dozvolu da dobije informacije o vašem novčaniku?" + "bchange49": "Da li ovoj aplikaciji dajete dozvolu da dobije informacije o vašem novčaniku?", + "bchange50": "Ova aplikacija je zahtevala promenu vašeg javnog profila. Svojstvo: ", + "bchange51": "Da biste podneli promene, ne zaboravite da kliknete na 'Ažuriraj profil'", + "bchange52": "Da li ovoj aplikaciji dajete dozvolu da dobije informacije o vašem novčaniku?", + "bchange53": "Uvek dozvoli da sve aplikacije automatski preuzimaju listu prijatelja", + "bchange54": "Da li ovoj aplikaciji dajete dozvolu da pristupi vašoj listi prijatelja?" }, "datapage": { "dchange1": "Upravljanje podacima", @@ -1214,5 +1224,33 @@ "saving2": "Nema šta da se spase", "saving3": "Sačuvajte nesačuvane promene", "saving4": "Poništi promene" + }, + "profile": { + "profile1": "Nemate ime", + "profile2": "Idi na registraciju imena", + "profile3": "Ažuriraj profil", + "profile4": "Tagline", + "profile5": "Bio", + "profile6": "Adrese novčanika", + "profile7": "Popuni iz korisničkog interfejsa", + "profile8": "Dodaj prilagođeno svojstvo", + "profile9": "Naziv svojstva", + "profile10": "Polja", + "profile11": "Dodaj polje", + "profile12": "Naziv polja", + "profile13": "Vrednost polja", + "profile14": "Aktivnost", + "profile15": "Nema vrednosti", + "profile16": "Ovo ime nema profil", + "profile17": "Nije moguće preuzeti profil", + "profile18": "Otvori profil", + "profile19": "Ne mogu da preuzmem profil", + "profile20": "Ime registra", + "profile21": "Ubaci adresu iz korisničkog interfejsa", + "profile22": "Uspeh", + "profile23": "šifrovano", + "profile24": "Morate da popunite i ime polja i vrednost polja da biste dodali prilagođeno svojstvo", + "profile25": "Da li je tvoj prijatelj", + "profile26": "Dodaj kao prijatelja" } -} \ No newline at end of file +} diff --git a/core/language/ru.json b/core/language/ru.json index 0a461651..86bfd8df 100644 --- a/core/language/ru.json +++ b/core/language/ru.json @@ -209,7 +209,11 @@ "exp4": "Пожалуйста, выберите кошелек для резервного копирования приватного главного ключа.", "core": "Начать основные настройки", "qappNotification1": "Уведомления Q-App", - "selectnode": "Пожалуйста, выберите вариант" + "selectnode": "Пожалуйста, выберите вариант", + "arrr1": "Кошелек ARRR не инициализирован!", + "arrr2": "Пожалуйста, перейдите на вкладку кошелька и сначала инициализируйте свой кошелек arrr.", + "arrr3": "Требуется обновление ядра!", + "arrr4": "Чтобы сохранить закрытый ключ вашего кошелька arrr, вам сначала необходимо обновить ядро!" }, "appinfo": { "blockheight": "Высота блока", @@ -605,7 +609,8 @@ "schange39": "Открыть", "schange40": "Предварительный просмотр", "schange41": "Идет загрузка, подождите...", - "schange42": "Файлы загружены" + "schange42": "Файлы загружены", + "schange43": "Любые попытки загрузки будут продолжаться в фоновом режиме, повторите попытку через некоторое время." }, "tubespage": { "schange1": "Просмотреть Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "Даете ли вы этому приложению разрешение на сохранение следующего файла?", "bchange47": "Мгновенная публикация - требуется", "bchange48": "Разрешаете ли вы этому приложению отправлять вам уведомления?", - "bchange49": "Разрешаете ли вы этому приложению получать информацию о вашем кошельке?" + "bchange49": "Разрешаете ли вы этому приложению получать информацию о вашем кошельке?", + "bchange50": "Это приложение запросило изменение вашего общедоступного профиля. Свойство: ", + "bchange51": "Чтобы отправить изменения, не забудьте нажать Обновить профиль", + "bchange52": "Разрешаете ли вы этому приложению получать информацию о вашем кошельке?", + "bchange53": "Всегда разрешайте всем приложениям автоматически получать список друзей", + "bchange54": "Разрешаете ли вы этому приложению доступ к вашему списку друзей?" }, "datapage": { "dchange1": "Управление данными", @@ -1214,5 +1224,33 @@ "saving2": "Нечего сохранять", "saving3": "Сохранить несохраненные изменения", "saving4": "Отменить изменения" + }, + "profile": { + "profile1": "У вас нет имени", + "profile2": "Перейти к регистрации имени", + "profile3": "Обновить профиль", + "profile4": "Слоган", + "profile5": "Биография", + "profile6": "Адреса кошелька", + "profile7": "Заполнить из пользовательского интерфейса", + "profile8": "Добавить пользовательское свойство", + "profile9": "Имя свойства", + "profile10": "Поля", + "profile11": "Добавить поле", + "profile12": "Имя поля", + "profile13": "Значение поля", + "profile14": "Активность", + "profile15": "Нет значения", + "profile16": "У этого имени нет профиля", + "profile17": "Невозможно получить профиль", + "profile18": "Открыть профиль", + "profile19": "Невозможно получить профиль", + "profile20": "Зарегистрировать имя", + "profile21": "Вставить адрес из пользовательского интерфейса", + "profile22": "Успех", + "profile23": "зашифровано", + "profile24": "Чтобы добавить пользовательское свойство, вам необходимо заполнить имя и значение поля", + "profile25": "Твой друг", + "profile26": "Добавить в друзья" } -} \ No newline at end of file +} diff --git a/core/language/us.json b/core/language/us.json index 6e22363d..f1f5c7d3 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -609,7 +609,8 @@ "schange39": "Open", "schange40": "Preview", "schange41": "Downloading please wait...", - "schange42": "Files downloaded" + "schange42": "Files downloaded", + "schange43": "Any attempted downloads will continue in the background, please try again after a while." }, "tubespage": { "schange1": "Browse Q-Tubes", @@ -739,7 +740,6 @@ "bchange52": "Do you give this application permission to get your wallet information?", "bchange53": "Always allow your friends list to be retrieved automatically by all apps", "bchange54": "Do you give this application permission to access your friends list?" - }, "datapage": { "dchange1": "Data Management", diff --git a/core/language/zhc.json b/core/language/zhc.json index e512029a..4066d91e 100644 --- a/core/language/zhc.json +++ b/core/language/zhc.json @@ -209,7 +209,11 @@ "exp4": "请选择一个钱包来备份私钥。", "core": "开始核心设置", "qappNotification1": "Q-App 通知", - "selectnode": "请选择一个选项" + "selectnode": "请选择一个选项", + "arrr1": "ARRR 钱包未初始化!", + "arrr2": "请先进入钱包选项卡并初始化您的arrr钱包。", + "arrr3": "需要核心更新!", + "arrr4": "要保存你的 arr 钱包的私钥,你需要先进行核心更新!" }, "appinfo": { "blockheight": "区块高度", @@ -605,7 +609,8 @@ "schange39": "打开", "schange40": "预览", "schange41": "下载中请稍候...", - "schange42": "文件已下载" + "schange42": "文件已下载", + "schange43": "任何尝试的下载都将在后台继续,请稍后重试。" }, "tubespage": { "schange1": "浏览 Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "您是否授予此应用程序保存以下文件的权限", "bchange47": "即时发布 - 需要", "bchange48": "您是否授予此应用程序向您发送通知的权限", - "bchange49": "您是否授予此应用程序获取您的钱包信息的权限?" + "bchange49": "您是否授予此应用程序获取您的钱包信息的权限?", + "bchange50": "此应用已请求更改您的公开个人资料。属性:", + "bchange51": "要提交更改,请不要忘记单击“更新个人资料”", + "bchange52": "您是否授予此应用程序获取您的钱包信息的权限?", + "bchange53": "始终允许所有应用自动检索您的好友列表", + "bchange54": "您是否授予此应用程序访问您的好友列表的权限?" }, "datapage": { "dchange1": "资料管理", @@ -1214,5 +1224,33 @@ "saving2": "没有什么可保存的", "saving3": "保存未保存的更改", "saving4": "取消更改" + }, + "profile": { + "profile1": "你没有名字", + "profile2": "前往姓名注册", + "profile3": "更新个人资料", + "profile4": "标语", + "profile5": "个人简介", + "profile6": "钱包地址", + "profile7": "从用户界面填写", + "profile8": "添加自定义属性", + "profile9": "属性名称", + "profile10": "字段", + "profile11": "添加字段", + "profile12": "字段名称", + "profile13": "字段值", + "profile14": "活动", + "profile15": "无值", + "profile16": "该名字没有个人资料", + "profile17": "无法获取个人资料", + "profile18": "打开个人资料", + "profile19": "无法获取个人资料", + "profile20": "注册名称", + "profile21": "从 UI 插入地址", + "profile22": "成功", + "profile23": "加密", + "profile24": "您必须填写字段名称和字段值才能添加自定义属性", + "profile25": "是你的朋友", + "profile26": "添加为好友" } -} \ No newline at end of file +} diff --git a/core/language/zht.json b/core/language/zht.json index f4853ee5..8370f7f2 100644 --- a/core/language/zht.json +++ b/core/language/zht.json @@ -209,7 +209,11 @@ "exp4": "請選擇一個錢包來備份私鑰。", "core": "開始核心設置", "qappNotification1": "Q-App 通知", - "selectnode": "請選擇一個選項" + "selectnode": "請選擇一個選項", + "arrr1": "ARRR 錢包未初始化!", + "arrr2": "請先進入錢包標籤並初始化您的arrr錢包。", + "arrr3": "需要核心更新!", + "arrr4": "要儲存你的 arr 錢包的私鑰,你需要先進行核心更新!" }, "appinfo": { "blockheight": "區塊高度", @@ -605,7 +609,8 @@ "schange39": "打開", "schange40": "預覽", "schange41": "下載中請稍候...", - "schange42": "文件已下載" + "schange42": "文件已下載", + "schange43": "任何嘗試的下載都會在背景繼續,請稍後重試。" }, "tubespage": { "schange1": "瀏覽 Q-Tubes", @@ -729,7 +734,12 @@ "bchange46": "您是否授予此應用程序保存以下文件的權限", "bchange47": "即時發布 - 需要", "bchange48": "您是否授予此應用程式向您發送通知的權限", - "bchange49": "您是否授予此應用程式以取得您的錢包資訊的權限?" + "bchange49": "您是否授予此應用程式以取得您的錢包資訊的權限?", + "bchange50": "此應用程式已要求更改您的公開個人資料。屬性:", + "bchange51": "要提交更改,請不要忘記點擊「更新個人資料」", + "bchange52": "您是否授予此應用程式取得您的錢包資訊的權限?", + "bchange53": "始終允許所有應用程式自動檢索您的好友清單", + "bchange54": "您是否授予此應用程式存取您的好友清單的權限?" }, "datapage": { "dchange1": "資料管理", @@ -1214,5 +1224,33 @@ "saving2": "沒有什麼可保存的", "saving3": "儲存未儲存的更改", "saving4": "取消更改" + }, + "profile": { + "profile1": "你沒有名字", + "profile2": "前往姓名註冊", + "profile3": "更新個人資料", + "profile4": "標語", + "profile5": "個人簡介", + "profile6": "錢包位址", + "profile7": "從使用者介面填寫", + "profile8": "新增自訂屬性", + "profile9": "屬性名稱", + "profile10": "字段", + "profile11": "新增欄位", + "profile12": "欄位名稱", + "profile13": "字段值", + "profile14": "活動", + "profile15": "無值", + "profile16": "該名字沒有個人資料", + "profile17": "無法取得個人資料", + "profile18": "開啟個人資料", + "profile19": "無法取得個人資料", + "profile20": "註冊名稱", + "profile21": "從 UI 插入位址", + "profile22": "成功", + "profile23": "加密", + "profile24": "您必須填入欄位名稱和欄位值才能新增自訂屬性", + "profile25": "是你的朋友", + "profile26": "新增為好友" } -} \ No newline at end of file +} diff --git a/core/src/components/friends-view/core-sync-status.js b/core/src/components/friends-view/core-sync-status.js index 7fe7d3df..f8f2190b 100644 --- a/core/src/components/friends-view/core-sync-status.js +++ b/core/src/components/friends-view/core-sync-status.js @@ -93,6 +93,7 @@ class CoreSyncStatus extends connect(store)(LitElement) { }, 60000) } + async getCoreInfos() { const corInfo = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] const coreInfoUrl = corInfo.protocol + '://' + corInfo.domain + ':' + corInfo.port @@ -101,12 +102,11 @@ class CoreSyncStatus extends connect(store)(LitElement) { return response.json() }).then(data => { this.coreInfos = data - }).catch(err => { }) } renderSyncStatusIcon() { - if (this.nodeStatus.isSynchronizing === true) { + if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.syncPercent === 99) { return html`
@@ -120,7 +120,7 @@ class CoreSyncStatus extends connect(store)(LitElement) {
` - } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === false) { + } else if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.isMintingPossible === false && this.nodeStatus.syncPercent === 100) { return html`
@@ -134,7 +134,21 @@ class CoreSyncStatus extends connect(store)(LitElement) {
` - } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === true) { + } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === false && this.nodeStatus.syncPercent === 100) { + return html` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("walletprofile.wp4")} ${translate("walletprofile.wp2")}

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` + } else if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.isMintingPossible === true && this.nodeStatus.syncPercent === 100) { return html`
@@ -148,6 +162,34 @@ class CoreSyncStatus extends connect(store)(LitElement) {
` + } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === true && this.nodeStatus.syncPercent === 100) { + return html` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("walletprofile.wp4")} ( ${translate("walletprofile.wp1")} )

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` + } else { + return html` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("appinfo.synchronizing")}... ${this.nodeStatus.syncPercent !== undefined ? this.nodeStatus.syncPercent + '%' : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` } } @@ -157,4 +199,4 @@ class CoreSyncStatus extends connect(store)(LitElement) { } -customElements.define('core-sync-status', CoreSyncStatus) +customElements.define('core-sync-status', CoreSyncStatus) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 85a16421..6408f735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "qortal-ui", - "version": "4.4.1", + "version": "4.4.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qortal-ui", - "version": "4.4.1", + "version": "4.4.2", "license": "GPL-3.0", "dependencies": { "@hapi/hapi": "21.3.2", @@ -99,13 +99,13 @@ "@vaadin/icons": "24.2.3", "@vaadin/password-field": "24.2.3", "@vaadin/tooltip": "24.2.3", - "@zip.js/zip.js": "2.7.30", - "axios": "1.6.1", - "electron": "27.0.4", + "@zip.js/zip.js": "2.7.31", + "axios": "1.6.2", + "electron": "27.1.0", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", - "eslint": "8.53.0", + "eslint": "8.54.0", "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", @@ -118,7 +118,7 @@ "pwa-helpers": "0.9.1", "redux": "4.2.1", "redux-thunk": "2.4.2", - "rollup": "4.4.0", + "rollup": "4.5.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", @@ -838,9 +838,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3006,9 +3006,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.4.0.tgz", - "integrity": "sha512-AD30wtT58hZZsXIeiksytR6Gm2gofUxn5KqrDBdyzekgxXB9bXN9dqWIEcPfYo9lA9MVRm0lC42LuYGsscRxiA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", + "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", "cpu": [ "arm" ], @@ -3019,9 +3019,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.4.0.tgz", - "integrity": "sha512-PlqvhzFxy5FRTB3wLSsGgPhiakv9jrgfu8tjSojLJFP0CdhfZSRDOFvQ2emWLUEBOSCnjpL63XSuFVMwg59ZtA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", + "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", "cpu": [ "arm64" ], @@ -3032,9 +3032,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.4.0.tgz", - "integrity": "sha512-BYmhn1Hebmkmdyn5mBFy7HptowyjtMALyTpywNSNZYigWwyv4L8WQVr0XvOQE7eE6WoKrupSVxtIcGZW8MgZUA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", + "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", "cpu": [ "arm64" ], @@ -3045,9 +3045,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.4.0.tgz", - "integrity": "sha512-7GXsMiX/giTDBMs/gL3rePLBRC6gV7DT7JQ0lNqoNDe5hm+Gm4NEWky9fwEmer64fIUbOsTiLUsyQ5fDXUbXPA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", + "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", "cpu": [ "x64" ], @@ -3058,9 +3058,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.4.0.tgz", - "integrity": "sha512-kavnkaV50Gu6vESlOAwUad92wYY9mUrcaPmhzOQZKlNFnzWAUYyD/uhHmWvY7Z2chtwhWlng0LvCRBF5QiPO7w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", + "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", "cpu": [ "arm" ], @@ -3071,9 +3071,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.4.0.tgz", - "integrity": "sha512-2hBHEtCjnBTeuLvDAlHRCqsuFQSyAhTQs9vbZEVBTV8ap35pDI1ukPbIVFFCWNvL/KE7xRor5YZFvfyGCfvLnA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", + "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", "cpu": [ "arm64" ], @@ -3084,9 +3084,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.4.0.tgz", - "integrity": "sha512-u7zy0Ygzl7O5Gvr9TSNSQj+DBzvMJC7rXfyQNgZ13KwkhgJ8z0z+gt2AO4RPd01rZioMQ2/TA24XGGg4xqhd0Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", + "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", "cpu": [ "arm64" ], @@ -3097,9 +3097,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.4.0.tgz", - "integrity": "sha512-VvpAdh5SgewmWo8sa5QPYG8aSKH9hU2Kr5+3of0GzBI/8n8PBqhLyvF0DbO+zDW8j5IM8NDebv82MpHrZaD0Cw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", + "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", "cpu": [ "x64" ], @@ -3110,9 +3110,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.4.0.tgz", - "integrity": "sha512-3g6jaXxXVFaDnFoMn2+E3ludGcXFfEr6lDn+S1lh9Qe0JcL9sPt1wGh0g2cKIlb6OakNOFopZqJ5Yub9F7gQlA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", + "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", "cpu": [ "x64" ], @@ -3123,9 +3123,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.4.0.tgz", - "integrity": "sha512-jnoDRkg5Ve6Y1qx2m1+ehouOLQ4ddc15/iQSfFjcDUL6bqLdJJ5c4CKfUy/C6W1oCU4la+hMkveE9GG7ECN7dg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", + "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", "cpu": [ "arm64" ], @@ -3136,9 +3136,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.4.0.tgz", - "integrity": "sha512-SoLQmJanozFow8o50ul2a3R+J7nk4pEhrp83PzTSXs5OzOmIZbPSp5kihtQ3f6ypo4MCbmh0V8Ev0bJIEp4Azw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", + "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", "cpu": [ "ia32" ], @@ -3149,9 +3149,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.0.tgz", - "integrity": "sha512-Zaz6itfQ5sQF5Cia49YDW1ZTr+YfIKzTSb9npLyvQn346n7ulRDOv2J7GnL0zcOJ3cqW7HzG/ZisyO6fH43J9g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", + "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", "cpu": [ "x64" ], @@ -3612,9 +3612,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.18.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", - "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "version": "18.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.10.tgz", + "integrity": "sha512-luANqZxPmjTll8bduz4ACs/lNTCLuWssCyjqTY9yLdsv1xnViQp3ISKwsEWOIecO13JWUqjVdig/Vjjc09o8uA==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" @@ -4002,9 +4002,9 @@ } }, "node_modules/@zip.js/zip.js": { - "version": "2.7.30", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.30.tgz", - "integrity": "sha512-nhMvQCj+TF1ATBqYzFds7v+yxPBhdDYHh8J341KtC1D2UrVBUIYcYK4Jy1/GiTsxOXEiKOXSUxvPG/XR+7jMqw==", + "version": "2.7.31", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.31.tgz", + "integrity": "sha512-Q4XWZO0IXLEzHB580LUgca/KpwX9/KdtDTvfhqKqiirYL5hHvOmWjD+gyqRhv+Muk7I+LpVZvx9E+WsPv5G4Sw==", "dev": true, "engines": { "bun": ">=0.7.0", @@ -4336,9 +4336,9 @@ } }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -4714,9 +4714,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "version": "1.0.30001563", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", "dev": true, "funding": [ { @@ -5466,9 +5466,9 @@ } }, "node_modules/electron": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-27.0.4.tgz", - "integrity": "sha512-ob29rN1mtiyAXzF8HsHd5jh8bYKd9OQDakfdOExi0F7epU97gXPHaj6JPjbBJ/vpki5d32SyKVePW4vxeNZk1A==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-27.1.0.tgz", + "integrity": "sha512-XPdJiO475QJ8cx59/goWNNWnlV0vab+Ut3occymos7VDxkHV5mFrlW6tcGi+M3bW6gBfwpJocWMng8tw542vww==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -5904,9 +5904,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.581", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", - "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", + "version": "1.4.588", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", + "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", "dev": true }, "node_modules/electron-updater": { @@ -6090,15 +6090,15 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -7263,9 +7263,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -8760,9 +8760,9 @@ } }, "node_modules/prosemirror-inputrules": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.2.1.tgz", - "integrity": "sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.3.0.tgz", + "integrity": "sha512-z1GRP2vhh5CihYMQYsJSa1cOwXb3SYxALXOIfAkX8nZserARtl9LiL+CEl+T+OFIsXc3mJIHKhbsmRzC0HDAXA==", "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" @@ -9305,9 +9305,9 @@ } }, "node_modules/rollup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.4.0.tgz", - "integrity": "sha512-3L67ubCc1Qm49wUodsQ72FM6JmJ9M37d63rGPjxbcKrzNJrwFipl+lDNHeWd6BId09S6Tb9KiBgYKbWhIuqVyg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", + "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -9317,18 +9317,18 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.4.0", - "@rollup/rollup-android-arm64": "4.4.0", - "@rollup/rollup-darwin-arm64": "4.4.0", - "@rollup/rollup-darwin-x64": "4.4.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.4.0", - "@rollup/rollup-linux-arm64-gnu": "4.4.0", - "@rollup/rollup-linux-arm64-musl": "4.4.0", - "@rollup/rollup-linux-x64-gnu": "4.4.0", - "@rollup/rollup-linux-x64-musl": "4.4.0", - "@rollup/rollup-win32-arm64-msvc": "4.4.0", - "@rollup/rollup-win32-ia32-msvc": "4.4.0", - "@rollup/rollup-win32-x64-msvc": "4.4.0", + "@rollup/rollup-android-arm-eabi": "4.5.0", + "@rollup/rollup-android-arm64": "4.5.0", + "@rollup/rollup-darwin-arm64": "4.5.0", + "@rollup/rollup-darwin-x64": "4.5.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", + "@rollup/rollup-linux-arm64-gnu": "4.5.0", + "@rollup/rollup-linux-arm64-musl": "4.5.0", + "@rollup/rollup-linux-x64-gnu": "4.5.0", + "@rollup/rollup-linux-x64-musl": "4.5.0", + "@rollup/rollup-win32-arm64-msvc": "4.5.0", + "@rollup/rollup-win32-ia32-msvc": "4.5.0", + "@rollup/rollup-win32-x64-msvc": "4.5.0", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index 60cfeef0..88ce0093 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "qortal-ui", - "version": "4.4.1", + "version": "4.4.2", "description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet", "keywords": [ "QORT", @@ -121,13 +121,13 @@ "@vaadin/icons": "24.2.3", "@vaadin/password-field": "24.2.3", "@vaadin/tooltip": "24.2.3", - "@zip.js/zip.js": "2.7.30", - "axios": "1.6.1", - "electron": "27.0.4", + "@zip.js/zip.js": "2.7.31", + "axios": "1.6.2", + "electron": "27.1.0", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", - "eslint": "8.53.0", + "eslint": "8.54.0", "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", @@ -140,7 +140,7 @@ "pwa-helpers": "0.9.1", "redux": "4.2.1", "redux-thunk": "2.4.2", - "rollup": "4.4.0", + "rollup": "4.5.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", diff --git a/plugins/plugins/core/components/ChatScroller.js b/plugins/plugins/core/components/ChatScroller.js index 1c2a249a..299339fc 100644 --- a/plugins/plugins/core/components/ChatScroller.js +++ b/plugins/plugins/core/components/ChatScroller.js @@ -50,19 +50,20 @@ const extractComponents = async (url) => { } url = url.replace(/^(qortal:\/\/)/, ''); + if (url.startsWith('use-')) { - // Handle the new 'use' format - let parts = url.split('/'); - const type = parts[0].split('-')[1]; // e.g., 'group' from 'use-group' - parts.shift(); - const action = parts.length > 0 ? parts[0].split('-')[1] : null; // e.g., 'invite' from 'action-invite' - parts.shift(); - const idPrefix = parts.length > 0 ? parts[0].split('-')[0] : null; // e.g., 'groupid' from 'groupid-321' - const id = parts.length > 0 ? parts[0].split('-')[1] : null; // e.g., '321' from 'groupid-321' - return { - type: type, - action: action, - [idPrefix]: id + // Handle the new 'use' format + let parts = url.split('/'); + const type = parts[0].split('-')[1]; // e.g., 'group' from 'use-group' + parts.shift(); + const action = parts.length > 0 ? parts[0].split('-')[1] : null; // e.g., 'invite' from 'action-invite' + parts.shift(); + const idPrefix = parts.length > 0 ? parts[0].split('-')[0] : null; // e.g., 'groupid' from 'groupid-321' + const id = parts.length > 0 ? parts[0].split('-')[1] : null; // e.g., '321' from 'groupid-321' + return { + type: type, + action: action, + [idPrefix]: id } } else if (url.includes('/')) { let parts = url.split('/'); @@ -101,15 +102,13 @@ const extractComponents = async (url) => { }; function processText(input) { - const linkRegex = /(qortal:\/\/\S+)/g; + const linkRegex = /(qortal:\/\/S+)/g; function processNode(node) { if (node.nodeType === Node.TEXT_NODE) { const parts = node.textContent.split(linkRegex); - - if (parts.length > 1) { + if (parts.length > 0) { const fragment = document.createDocumentFragment(); - parts.forEach((part) => { if (part.startsWith('qortal://')) { const link = document.createElement('span'); @@ -2536,4 +2535,4 @@ class ChatMenu extends LitElement { } } -window.customElements.define('chat-menu', ChatMenu); +window.customElements.define('chat-menu', ChatMenu); \ No newline at end of file diff --git a/plugins/plugins/core/q-app/q-apps.src.js b/plugins/plugins/core/q-app/q-apps.src.js index c3136d2c..5e184ecf 100644 --- a/plugins/plugins/core/q-app/q-apps.src.js +++ b/plugins/plugins/core/q-app/q-apps.src.js @@ -4,16 +4,12 @@ import {Epml} from '../../../epml.js' import {get, registerTranslateConfig, translate, use} from 'lit-translate' import isElectron from 'is-electron' import '@polymer/paper-spinner/paper-spinner-lite.js' -import '@material/mwc-dialog' +import '@polymer/paper-dialog/paper-dialog.js' +import '@polymer/paper-icon-button/paper-icon-button.js' +import '@polymer/iron-icons/iron-icons.js' import '@material/mwc-icon' import '@material/mwc-button' import '@material/mwc-tab-bar' -import '@material/mwc-textfield' -import '@polymer/paper-dialog/paper-dialog.js' -import '@vaadin/button' -import '@vaadin/grid' -import '@vaadin/icon' -import '@vaadin/icons' import '@vaadin/text-field' registerTranslateConfig({ @@ -25,25 +21,29 @@ const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class QApps extends LitElement { static get properties() { return { - service: { type: String }, - identifier: { type: String }, - loading: { type: Boolean }, - resources: { type: Array }, - pageRes: { type: Array }, + selectedAddress: { type: Object }, + appsArray: { type: Array }, followedNames: { type: Array }, blockedNames: { type: Array }, - relayMode: { type: Boolean }, - btnDisabled: { type: Boolean }, - selectedAddress: { type: Object }, - searchName: { type: String }, searchResources: { type: Array }, followedResources: { type: Array }, blockedResources: { type: Array }, + isLoading: {type: Boolean}, + relayMode: { type: Boolean }, + service: { type: String }, + identifier: { type: String }, + searchName: { type: String }, textStatus: { type: String }, textProgress: { type: String }, - theme: { type: String, reflect: true }, - hasInitiallyFetched: {type:Boolean}, - isLoading: {type: Boolean} + appIconUrl: { type: String }, + appTitle: { type: String }, + appPublisher: { type: String }, + appDescription: { type: String }, + appTags: { type: String }, + appStatus: { type: String }, + appFollow: { type: String }, + appBlock: { type: String }, + theme: { type: String, reflect: true } } } @@ -53,15 +53,6 @@ class QApps extends LitElement { --mdc-theme-primary: rgb(3, 169, 244); --mdc-button-disabled-fill-color: rgba(3, 169, 244, 0.5); --mdc-theme-surface: var(--white); - --mdc-text-field-outlined-idle-border-color: var(--txtfieldborder); - --mdc-text-field-outlined-hover-border-color: var(--txtfieldhoverborder); - --mdc-text-field-label-ink-color: var(--black); - --mdc-text-field-ink-color: var(--black); - --mdc-dialog-content-ink-color: var(--black); - --mdc-dialog-shape-radius: 25px; - --mdc-dialog-min-width: 300px; - --mdc-dialog-max-width: auto; - --mdc-dialog-max-height: 700px; --paper-input-container-focus-color: var(--mdc-theme-primary); --lumo-primary-text-color: rgb(0, 167, 245); --lumo-primary-color-50pct: rgba(0, 167, 245, 0.5); @@ -75,13 +66,58 @@ class QApps extends LitElement { --_lumo-grid-secondary-border-color: var(--border2); } + [hidden] { + display: hidden !important; + visibility: none !important; + } + + h2 { + margin: 0; + } + + h3 { + margin: 10px 0; + } + + h4 { + margin: 0; + } + + h5 { + margin: 5px 0; + font-size: 14px; + } + + h6 { + margin: 5px 0; + text-transform: uppercase; + color: var(--black); + font-weight: 600; + } + + h2, h3, h4, h5 { + color: var(--black); + font-weight: 400; + } + + p { + font-size: 14px; + line-height: 21px; + color: var(--black); + } + + span { + font-size: 14px; + word-break: break-all; + } + #tabs-1 { - --mdc-tab-height: 50px; + --mdc-tab-height: 50px; } #tabs-1-content { - height: 100%; - padding-bottom: 10px; + height: 100%; + padding-bottom: 10px; } mwc-tab-bar { @@ -90,59 +126,32 @@ class QApps extends LitElement { --mdc-tab-text-label-color-default: var(--black); } - #pages { - display: flex; - flex-wrap: wrap; - padding: 10px 5px 5px 5px; - margin: 0px 20px 20px 20px; - } - - #pages > button { - user-select: none; - padding: 5px; - margin: 0 5px; - border-radius: 10%; - border: 0; - background: transparent; - font: inherit; - outline: none; - cursor: pointer; - color: var(--black); - } - - #pages > button:not([disabled]):hover, - #pages > button:focus { - color: #ccc; - background-color: #eee; - } - - #pages > button[selected] { - font-weight: bold; - color: var(--white); - background-color: #ccc; - } - - #pages > button[disabled] { - opacity: 0.5; - cursor: default; - } - #apps-list-page { background: var(--white); padding: 12px 24px; } - #search { - display: flex; + .search { + display: inline; width: 50%; align-items: center; } - .divCard { - border: 1px solid var(--border); - padding: 1em; - box-shadow: 0 .3px 1px 0 rgba(0,0,0,0.14), 0 1px 1px -1px rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.20); - margin-bottom: 2em; + paper-spinner-lite { + height: 30px; + width: 30px; + --paper-spinner-color: var(--mdc-theme-primary); + --paper-spinner-stroke-width: 3px; + } + + .spinner { + width: 100%; + display: flex; + justify-content: center; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } paper-dialog.progress { @@ -157,101 +166,61 @@ class QApps extends LitElement { text-align:center; padding: 15px; line-height: 1.6; + overflow: hidden; + } + + paper-dialog.close-progress { + min-width: 550px; + max-width: 550px; + height: auto; + background-color: var(--white); + color: var(--black); + border: 1px solid var(--black); + border-radius: 15px; + text-align:center; + padding: 15px; + font-size: 17px; + font-weight: 500; + line-height: 20px; + overflow: hidden; + } + + paper-dialog.search { + min-width: 550px; + max-width: 550px; + min-height: auto; + max-height: 700px; + background-color: var(--white); + color: var(--black); + line-height: 1.6; + overflow: auto; + border: 1px solid var(--black); + border-radius: 10px; + padding: 15px; + box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.1); + } + + paper-dialog.appinfo { + width: auto; + max-width: 450px; + height: auto; + background-color: var(--white); + border: 1px solid var(--black); + border-radius: 15px; + padding: 5px; overflow-y: auto; } - h2 { - margin:0; - } - - h2, h3, h4, h5 { - color: var(--black); - font-weight: 400; - } - - a.visitSite { - color: var(--black); - text-decoration: none; - } - - [hidden] { - display: hidden !important; - visibility: none !important; - } - - .details { - display: flex; - font-size: 18px; - } - - span { - font-size: 14px; - word-break: break-all; - } - - select { - padding: 13px 20px; - width: 100%; - font-size: 14px; - color: #555; - font-weight: 400; - } - - .title { - font-weight:600; - font-size:12px; - line-height: 32px; - opacity: 0.66; - } - - .resourceTitle { - font-size:15px; - line-height: 32px; - } - - .resourceDescription { - font-size:11px; - padding-bottom: 5px; - } - - .resourceCategoryTags { - font-size:11px; - padding-bottom: 10px; - } - - .resourceRegisteredName { - font-size:15px; - line-height: 32px; - } - - .resourceStatus, .resourceStatus span { - font-size:11px; - } - - .itemList { - padding:0; - } - .relay-mode-notice { - margin:auto; - text-align:center; - word-break:normal; - font-size:14px; - line-height:20px; + margin: auto; + margin-top: 20px; + text-align: center; + word-break: normal; + font-size: 14px; + line-height: 20px; color: var(--relaynodetxt); } - img { - border-radius: 25%; - max-width: 65px; - height: 100%; - max-height: 65px; - } - - .green { - --mdc-theme-primary: #198754; - } - .lds-roller { display: inline-block; position: relative; @@ -356,28 +325,274 @@ class QApps extends LitElement { } } + .grid-container { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: 10px; + } + + .grid-container-search { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + } + + .container { + height: 84px; + width: 84px; + overflow: hidden; + margin: 10px auto; + border-radius: 25%; + border: 1px solid var(--black); + transition: all 0.3s ease-in-out; + box-shadow: 0px 1px 5px 0px rgba(0,0,0,0.3); + background: linear-gradient(315deg, #045de9 0%, #09c6f9 74%); + } + + img { + cursor: pointer; + position: relative; + border-radius: 25%; + display: block; + height: 64px; + width: 64px; + object-fit: cover; + margin: 10px auto; + transition: all 0.3s ease; + } + + .round-icon { + margin-top: -87px; + margin-left: 69px; + width: 16px; + height: 16px; + border-radius: 50%; + border: 1px solid #64dd17; + background-color: #76ff03; + } + + .myapptitle { + display: flex; + justify-content: center; + max-height: 32px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--black); + font-size: 17px; + font-weight: 500; + padding: 10px; + line-height: 20px; + margin-top: -10px; + text-align: center; + } + + @media (min-width: 400px) { + .grid-container { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; + } + } + + @media (min-width: 640px) { + .grid-container { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + } + } + + @media (min-width: 767px) { + .grid-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + } + } + + @media (min-width: 1024px) { + .grid-container { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + } + } + + @media (min-width: 1280px) { + .grid-container { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: 10px; + } + } + + @media (min-width: 1600px) { + .grid-container { + display: grid; + grid-template-columns: repeat(7, 1fr); + gap: 10px; + } + } + + @media (min-width: 1920px) { + .grid-container { + display: grid; + grid-template-columns: repeat(8, 1fr); + gap: 10px; + } + } + + .card-container { + background-color: var(--white); + color: var(--black); + position: relative; + width: 350px; + max-width: 100%; + text-align: center; + } + + .card-container .block { + color: rgb(3, 169, 244); + background-color: transparent; + border-radius: 3px; + border: 1px solid rgb(3, 169, 244); + font-size: 14px; + font-weight: bold; + padding: 3px 7px; + position: absolute; + top: 30px; + left: 30px; + } + + .card-container .block:hover { + color: #FFF; + background-color: rgb(3, 169, 244); + cursor: pointer; + } + + .card-container .close { + color: #df3636; + background-color: transparent; + border-radius: 3px; + border: 1px solid #df3636; + font-size: 14px; + font-weight: bold; + padding: 3px 7px; + position: absolute; + top: 30px; + right: 30px; + } + + .card-container .close:hover { + color: #FFF; + background-color: #df3636; + cursor: pointer; + } + + .card-container img { + height: 96px; + width: 96px; + } + + .buttons { + display: flex; + justify-content: space-between; + margin: 10px; + } + + button.primary { + background-color: transparent; + border: 1px solid rgb(3, 169, 244); + border-radius: 3px; + color: rgb(3, 169, 244); + font-family: Montserrat, sans-serif; + font-weight: 500; + padding: 10px 25px; + } + + button.primary:hover { + background-color: rgb(3, 169, 244); + color: #FFF; + cursor: pointer; + } + + button.secondary { + background-color: transparent; + border: 1px solid #198754; + border-radius: 3px; + color: #198754; + font-family: Montserrat, sans-serif; + font-weight: 500; + padding: 10px 25px; + } + + button.secondary:hover { + background-color: #198754; + color: #FFF; + cursor: pointer; + } + + .tags { + background-color: var(--white); + text-align: left; + padding: 10px; + margin-top: 10px; + } + + .tags ul { + list-style-type: none; + margin: 0; + padding: 0; + } + + .tags ul li { + border: 1px solid rgb(3, 169, 244); + border-radius: 3px; + display: inline-block; + font-size: 12px; + margin: 0 7px 7px 0; + padding: 7px; + } + + .close-download { + color: var(--black); + font-size: 14px; + font-weight: bold; + position: absolute; + top: -15px; + right: -15px; + } + + .close-download:hover { + color: #df3636; + } ` } constructor() { super() - this.service = "APP" - this.identifier = null this.selectedAddress = {} - this.resources = [] - this.pageRes = [] + this.appsArray = [] this.followedNames = [] this.blockedNames = [] - this.relayMode = null - this.isLoading = false - this.hasInitiallyFetched = false - this.btnDisabled = false - this.searchName = '' this.searchResources = [] this.followedResources = [] this.blockedResources = [] + this.isLoading = false + this.relayMode = false + this.service = "APP" + this.identifier = '' + this.searchName = '' this.textStatus = '' this.textProgress = '' + this.appIconUrl = '' + this.appTitle = '' + this.appPublisher = '' + this.appDescription = '' + this.appTags = '' + this.appStatus = '' + this.appFollow = '' + this.appBlock = '' this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' } @@ -391,172 +606,127 @@ class QApps extends LitElement {
-
-

${translate("appspage.schange1")}

-

${this.renderSearchButton()}

-

${this.renderPublishButton()}

-
- - { - render(html`${this.renderAvatar(data.item)}`, root) - }}> - - { - render(html`${this.renderInfo(data.item)}`, root) - }}> - - { - render(html`${this.renderPublishedBy(data.item)}`, root) - }}> - - { - render(html`${this.renderDownload(data.item)}`, root) - }}> - - { - render(html`${this.renderFollowUnfollowButton(data.item)}`, root); - }}> - - { - render(html`${this.renderBlockUnblockButton(data.item)}`, root); - }}> - - -
- ${this.isLoading ? html` -
- ` : ''} - ${this.isEmptyArray(this.pageRes) && this.hasInitiallyFetched ? html` - ${translate("appspage.schange10")} - ` : ''} - ${this.renderRelayModeText()}
- -
+
+

${translate("appspage.schange1")}

+

${this.renderSearchButton()}

+

${this.renderPublishButton()}

+
+
+ ${this.isLoading ? html` +
+ +
+ ` : ''} + ${this.renderRelayModeText()} +
-
-

${translate("appspage.schange11")}

-

${this.renderSearchButton()}

-

${this.renderPublishButton()}

-
-

${translate("appspage.schange12")}

- - { - render(html`${this.renderAvatar(data.item)}`, root) - }}> - - { - render(html`${this.renderInfo(data.item)}`, root) - }}> - - { - render(html`${this.renderPublishedBy(data.item)}`, root) - }}> - - { - render(html`${this.renderDownload(data.item)}`, root) - }}> - - { - render(html`${this.renderFollowUnfollowButtonTab(data.item)}`, root); - }}> - - - ${this.followedResources == null ? html` - Loading... - ` : ''} - ${this.isEmptyArray(this.followedResources) ? html` - ${translate("appspage.schange13")} - ` : ''} - ${this.renderRelayModeText()} -
+
+

${translate("appspage.schange11")}

+

${this.renderSearchButton()}

+

${this.renderPublishButton()}

+
+
+ ${this.isLoading ? html` +
+ +
+ ` : ''} + ${this.isEmptyArray(this.followedResources) ? html`
${translate("appspage.schange13")}
` : ''} + ${this.renderRelayModeText()} +
-
-

${translate("appspage.schange14")}

-

${this.renderSearchButton()}

-

${this.renderPublishButton()}

-
-

${translate("appspage.schange15")}

- - { - render(html`${this.renderAvatar(data.item)}`, root) - }}> - - { - render(html`${this.renderInfo(data.item)}`, root) - }}> - - { - render(html`${this.renderPublishedBy(data.item)}`, root) - }}> - - { - render(html`${this.renderBlockUnblockButtonTab(data.item)}`, root); - }}> - - - ${this.blockedResources == null ? html` - Loading... - ` : ''} - ${this.isEmptyArray(this.blockedResources) ? html` - ${translate("appspage.schange16")} - ` : ''} - ${this.renderRelayModeText()} -
- - - -

${translate("appspage.schange4")}

-
- - { - render(html`${this.renderAvatar(data.item)}`, root) - }}> - - { - render(html`${this.renderPublishedBy(data.item)}`, root) - }}> - - { - render(html`${this.renderDownload(data.item)}`, root) - }}> - - { - render(html`${this.renderFollowUnfollowButton(data.item)}`, root); - }}> - - { - render(html`${this.renderBlockUnblockButton(data.item)}`, root); - }}> - - -
- -
-

${translate("appspage.schange41")}

-

${this.textProgress}

-
+
+

${translate("appspage.schange14")}

+

${this.renderSearchButton()}

+

${this.renderPublishButton()}

+
+
+ ${this.isLoading ? html` +
+ +
+ ` : ''} + ${this.isEmptyArray(this.blockedResources) ? html`
${translate("appspage.schange16")}
` : ''} + ${this.renderRelayModeText()} + + + + +
+ +
+ +
+ + +
+

${translate("appspage.schange41")}

+

${this.textProgress}

+
+ + ${translate("appspage.schange43")} + + +
+ ${this.appBlock} + this.closeAppInfoDialog()}>${translate("general.close")} + +

${this.appTitle}

+
${translate("appspage.schange7")}: ${this.appPublisher}
+

${this.appDescription}

+
+
TAGS
+
    +
  • ${this.appTags}
  • +
+
+
+ ${this.appStatus} + ${this.appFollow} +
+
+
+ +
+ ${this.appBlock} + this.closeBlockedInfoDialog()}>${translate("general.close")} + +

${this.appTitle}

+
${translate("appspage.schange7")}: ${this.appPublisher}
+

${this.appDescription}

+
+
TAGS
+
    +
  • ${this.appTags}
  • +
+
+
+
` } firstUpdated() { this.changeTheme() this.changeLanguage() - this.showapps() setTimeout(() => { this.displayTabContent('browse') }, 0) const getFollowedNames = async () => { - let followedNames = await parentEpml.request('apiCall', { + const followedNames = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}` }) @@ -565,7 +735,7 @@ class QApps extends LitElement { } const getBlockedNames = async () => { - let blockedNames = await parentEpml.request('apiCall', { + const blockedNames = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}` }) this.blockedNames = blockedNames @@ -573,7 +743,7 @@ class QApps extends LitElement { } const getRelayMode = async () => { - let relayMode = await parentEpml.request('apiCall', { + const relayMode = await parentEpml.request('apiCall', { url: `/arbitrary/relaymode?apiKey=${this.getApiKey()}` }) @@ -617,9 +787,6 @@ class QApps extends LitElement { setTimeout(getFollowedNames, 1) setTimeout(getBlockedNames, 1) setTimeout(getRelayMode, 1) - setTimeout(this.getFollowedNamesResource, 1) - setTimeout(this.getBlockedNamesResource, 1) - setInterval(this.getArbitraryResources, 600000) configLoaded = true } this.config = JSON.parse(c) @@ -630,6 +797,9 @@ class QApps extends LitElement { setInterval(() => { this.clearConsole() }, 60000) + setInterval(() => { + this.getAppsArrayData() + }, 600000) } clearConsole() { @@ -661,233 +831,477 @@ class QApps extends LitElement { } } - renderCatText() { - return html`${translate("appspage.schange26")}` - } - - displayTabContent(tab) { + async displayTabContent(tab) { const tabBrowseContent = this.shadowRoot.getElementById('tab-browse-content') const tabFollowedContent = this.shadowRoot.getElementById('tab-followed-content') const tabBlockedContent = this.shadowRoot.getElementById('tab-blocked-content') if (tab === 'browse') { - this.refreshapps() tabBrowseContent.style.display = 'block' tabFollowedContent.style.display = 'none' tabBlockedContent.style.display = 'none' + await this.getAppsArrayData() } else if (tab === 'followed') { - this.getFollowedNamesRefresh() - this.getFollowedNamesResource() tabBrowseContent.style.display = 'none' tabFollowedContent.style.display = 'block' tabBlockedContent.style.display = 'none' + await this.getFollowedNamesRefresh() + await this.getFollowedNamesResource() } else if (tab === 'blocked') { - this.getBlockedNamesRefresh() - this.getBlockedNamesResource() tabBrowseContent.style.display = 'none' tabFollowedContent.style.display = 'none' tabBlockedContent.style.display = 'block' - } else { + await this.getBlockedNamesRefresh() + await this.getBlockedNamesResource() } } + getAppsArrayData = async () => { + this.isLoading = true + this.appsArray = [] + const appsArrayRes = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=APP&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` + }) + this.appsArray = appsArrayRes + this.isLoading = false + this.renderAppGrid() + } + + renderAppGrid() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const gridContainer = this.shadowRoot.getElementById('apps-container') + this.shadowRoot.getElementById('apps-container').innerHTML = '' + + this.appsArray.forEach(item => { + const name = item.name + const title = item.metadata.title + const description = item.metadata.description + const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` + let tags = 'No Tags' + if (item.metadata.tags != null && item.metadata.tags.length > 0) { + tags = item.metadata.tags.join(", ") + } + const status1 = item.status.description + const status2 = item.status.status + + const openDialog = () => {this.openAppInfoDialog(url, title, name, description, tags, status1, status2)} + + let clickTimeout + let isDoubleClick = false + + const widgetElement = document.createElement('div') + + const myImage = document.createElement('img') + myImage.src = `${url}` + myImage.onerror = function() { + myImage.src = '/img/incognito.png' + } + myImage.addEventListener('click', function() { + clickTimeout = setTimeout(function() { + if (!isDoubleClick) { + openDialog() + } + isDoubleClick = false + }, 250) + }) + myImage.addEventListener('dblclick', function() { + clearTimeout(clickTimeout) + isDoubleClick = true + window.location.href = `../qdn/browser/index.html?name=${item.name}&service=APP` + }) + + const myStatus = document.createElement('div') + myStatus.classList.add('round-icon') + + const myContainer = document.createElement('div') + myContainer.classList.add('container') + myContainer.appendChild(myImage) + if (item.status.description === "Published but not yet downloaded" || item.status.status === "MISSING_DATA") { + } else if (item.status.description === "Ready" || item.status.status === "DOWNLOADED") { + myContainer.appendChild(myStatus) + } + + const myAppTitle = document.createElement('div') + myAppTitle.classList.add('myapptitle') + myAppTitle.textContent = item.metadata.title + + widgetElement.appendChild(myContainer) + widgetElement.appendChild(myAppTitle) + + gridContainer.appendChild(widgetElement) + }) + } + + getFollowedNamesRefresh = async () => { + this.isLoading = true + const followedNamesRes = await parentEpml.request('apiCall', { + url: `/lists/followedNames?apiKey=${this.getApiKey()}` + }) + this.followedNames = followedNamesRes + this.isLoading = false + } + + getFollowedNamesResource = async () => { + this.isLoading = true + const followedResourcesRes = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=followedNames` + }) + this.followedResources = followedResourcesRes + this.isLoading = false + this.renderFollowedAppsGrid() + } + + renderFollowedAppsGrid() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const gridContainer = this.shadowRoot.getElementById('followed-container') + this.shadowRoot.getElementById('followed-container').innerHTML = '' + + this.followedResources.forEach(item => { + const name = item.name + const title = item.metadata.title + const description = item.metadata.description + const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` + let tags = 'No Tags' + if (item.metadata.tags != null && item.metadata.tags.length > 0) { + tags = item.metadata.tags.join(", ") + } + const status1 = item.status.description + const status2 = item.status.status + + const openDialog = () => {this.openAppInfoDialog(url, title, name, description, tags, status1, status2)} + + let clickTimeout + let isDoubleClick = false + + const widgetElement = document.createElement('div') + + const myImage = document.createElement('img') + myImage.src = `${url}` + myImage.onerror = function() { + myImage.src = '/img/incognito.png' + } + myImage.addEventListener('click', function() { + clickTimeout = setTimeout(function() { + if (!isDoubleClick) { + openDialog() + } + isDoubleClick = false + }, 250) + }) + myImage.addEventListener('dblclick', function() { + clearTimeout(clickTimeout) + isDoubleClick = true + window.location.href = `../qdn/browser/index.html?name=${item.name}&service=APP` + }) + + const myStatus = document.createElement('div') + myStatus.classList.add('round-icon') + + const myContainer = document.createElement('div') + myContainer.classList.add('container') + myContainer.appendChild(myImage) + if (item.status.description === "Published but not yet downloaded" || item.status.status === "MISSING_DATA") { + } else if (item.status.description === "Ready" || item.status.status === "DOWNLOADED") { + myContainer.appendChild(myStatus) + } + + const myAppTitle = document.createElement('div') + myAppTitle.classList.add('myapptitle') + myAppTitle.textContent = item.metadata.title + + widgetElement.appendChild(myContainer) + widgetElement.appendChild(myAppTitle) + + gridContainer.appendChild(widgetElement) + }) + } + + getBlockedNamesRefresh = async () => { + this.isLoading = true + const blockedNamesRes = await parentEpml.request('apiCall', { + url: `/lists/blockedNames?apiKey=${this.getApiKey()}` + }) + this.blockedNames = blockedNamesRes + this.isLoading = false + } + + getBlockedNamesResource = async () => { + this.isLoading = true + this.blockedResources = [] + const blockedResourcesRes = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=blockedNames` + }) + this.blockedResources = blockedResourcesRes + this.isLoading = false + this.renderBlockedAppsGrid() + } + + renderBlockedAppsGrid() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const gridContainer = this.shadowRoot.getElementById('blocked-container') + this.shadowRoot.getElementById('blocked-container').innerHTML = '' + + this.blockedResources.forEach(item => { + const name = item.name + const title = item.metadata.title + const description = item.metadata.description + const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` + let tags = 'No Tags' + if (item.metadata.tags != null && item.metadata.tags.length > 0) { + tags = item.metadata.tags.join(", ") + } + const status1 = item.status.description + const status2 = item.status.status + + const openDialog = () => {this.openBlockedInfoDialog(url, title, name, description, tags, status1, status2)} + + let clickTimeout + let isDoubleClick = false + + const widgetElement = document.createElement('div') + + const myImage = document.createElement('img') + myImage.src = `${url}` + myImage.onerror = function() { + myImage.src = '/img/incognito.png' + } + myImage.addEventListener('click', function() { + clickTimeout = setTimeout(function() { + if (!isDoubleClick) { + openDialog() + } + isDoubleClick = false + }, 250) + }) + myImage.addEventListener('dblclick', function() { + clearTimeout(clickTimeout) + isDoubleClick = true + }) + + const myStatus = document.createElement('div') + myStatus.classList.add('round-icon') + + const myContainer = document.createElement('div') + myContainer.classList.add('container') + myContainer.appendChild(myImage) + if (item.status.description === "Published but not yet downloaded" || item.status.status === "MISSING_DATA") { + } else if (item.status.description === "Ready" || item.status.status === "DOWNLOADED") { + myContainer.appendChild(myStatus) + } + + const myAppTitle = document.createElement('div') + myAppTitle.classList.add('myapptitle') + myAppTitle.textContent = item.metadata.title + + widgetElement.appendChild(myContainer) + widgetElement.appendChild(myAppTitle) + + gridContainer.appendChild(widgetElement) + }) + } + + openAppInfoDialog(url, title, name, description, tags, status1, status2) { + this.appIconUrl = '' + this.appTitle = '' + this.appPublisher = '' + this.appDescription = '' + this.appTags = '' + this.appStatus = '' + this.appFollow = '' + this.appBlock = '' + this.appIconUrl = url + this.appTitle = title + this.appPublisher = name + this.appDescription = description + this.appTags = tags + if (status1 === "Published but not yet downloaded" || status2 === "MISSING_DATA") { + this.appStatus = html`` + } else if (status1 === "Ready" || status2 === "DOWNLOADED") { + this.appStatus = html`` + } else { + this.appStatus = html`` + } + if (this.followedNames.indexOf(name) === -1) { + this.appFollow = html`` + } else { + this.appFollow = html`` + } + if (this.blockedNames.indexOf(name) === -1) { + this.appBlock = html` this.blockName(name)}>${translate("appspage.schange31")}` + } else { + this.appBlock = html` this.unblockName(name)}>${translate("appspage.schange32")}` + } + this.shadowRoot.getElementById('appInfoDialog').open() + } + + closeAppInfoDialog() { + this.shadowRoot.getElementById('appInfoDialog').close() + this.appIconUrl = '' + this.appTitle = '' + this.appPublisher = '' + this.appDescription = '' + this.appTags = '' + this.appStatus = '' + this.appFollow = '' + this.appBlock = '' + } + + openBlockedInfoDialog(url, title, name, description, tags, status1, status2) { + this.appIconUrl = '' + this.appTitle = '' + this.appPublisher = '' + this.appDescription = '' + this.appTags = '' + this.appStatus = '' + this.appFollow = '' + this.appBlock = '' + this.appIconUrl = url + this.appTitle = title + this.appPublisher = name + this.appDescription = description + this.appTags = tags + if (this.blockedNames.indexOf(name) === -1) { + this.appBlock = html` this.blockName(name)}>${translate("appspage.schange31")}` + } else { + this.appBlock = html` this.unblockName(name)}>${translate("appspage.schange32")}` + } + this.shadowRoot.getElementById('blockedInfodDialog').open() + } + + closeBlockedInfoDialog() { + this.shadowRoot.getElementById('blockedInfodDialog').close() + this.appIconUrl = '' + this.appTitle = '' + this.appPublisher = '' + this.appDescription = '' + this.appTags = '' + this.appStatus = '' + this.appFollow = '' + this.appBlock = '' + } + + renderSearchButton() { + return html` this.openSearchDialog()}>search${translate("appspage.schange4")}` + } + + async doSearch(e) { + await this.searchResult() + } + searchListener(e) { if (e.key === 'Enter') { this.doSearch(e) } } - async getResourcesGrid() { - this.resourcesGrid = this.shadowRoot.querySelector(`#resourcesGrid`) - this.pagesControl = this.shadowRoot.querySelector('#pages') - this.pages = undefined - } - - getArbitraryResources = async () => { - const resources = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false&excludeblocked=true` - }) - this.resources = resources - } - - getFollowedNamesResource = async () => { - const followedRes = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=followedNames` - }) - this.followedResources = followedRes - } - - getFollowedNamesRefresh = async () => { - let followedNames = await parentEpml.request('apiCall', { - url: `/lists/followedNames?apiKey=${this.getApiKey()}` - }) - this.followedNames = followedNames - } - - getBlockedNamesResource = async () => { - const blockedRes = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=blockedNames` - }) - this.blockedResources = blockedRes - } - - getBlockedNamesRefresh = async () => { - let blockedNames = await parentEpml.request('apiCall', { - url: `/lists/blockedNames?apiKey=${this.getApiKey()}` - }) - this.blockedNames = blockedNames - } - - async getData(offset) { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=APP&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` - this.isLoading = true - - const jsonOffsetRes = await fetch(jsonOffsetUrl) - const jsonOffsetData = await jsonOffsetRes.json() - - this.pageRes = jsonOffsetData - if(!this.hasInitiallyFetched){ - this.hasInitiallyFetched = true - } - this.isLoading = false - } - - async updateItemsFromPage(page) { - if (page === undefined) { - return - } - - if (!this.pages) { - this.pages = Array.apply(null, { length: Math.ceil(this.resources.length / 20) }).map((item, index) => { - return index + 1 - }) - - let offset = 0 - - const prevBtn = document.createElement('button') - prevBtn.textContent = '<' - prevBtn.addEventListener('click', () => { - if (parseInt(this.pagesControl.querySelector('[selected]').textContent) > 1) { - offset = (parseInt(this.pagesControl.querySelector('[selected]').textContent) - 2) * 20 - } else { - offset = 0 - } - this.getData(offset) - const selectedPage = parseInt(this.pagesControl.querySelector('[selected]').textContent) - this.updateItemsFromPage(selectedPage - 1) - }) - this.pagesControl.appendChild(prevBtn) - - this.pages.forEach((pageNumber) => { - const pageBtn = document.createElement('button') - pageBtn.textContent = pageNumber - let offset = 0 - pageBtn.addEventListener('click', (e) => { - if (parseInt(e.target.textContent) > 1) { - offset = (parseInt(e.target.textContent) - 1) * 20 - } else { - offset = 0 - } - this.getData(offset) - this.updateItemsFromPage(parseInt(e.target.textContent)) - }) - if (pageNumber === page) { - pageBtn.setAttribute('selected', true) - } - this.pagesControl.appendChild(pageBtn) - }) - - const nextBtn = window.document.createElement('button') - nextBtn.textContent = '>' - nextBtn.addEventListener('click', () => { - if (parseInt(this.pagesControl.querySelector('[selected]').textContent) >= 1) { - offset = ((parseInt(this.pagesControl.querySelector('[selected]').textContent) + 1) * 20) - 20 - } else { - offset = 0 - } - this.getData(offset) - const selectedPage = parseInt(this.pagesControl.querySelector('[selected]').textContent) - this.updateItemsFromPage(selectedPage + 1) - }) - this.pagesControl.appendChild(nextBtn) - } - - const buttons = Array.from(this.pagesControl.children) - buttons.forEach((btn, index) => { - if (parseInt(btn.textContent) === page) { - btn.setAttribute('selected', true) - } else { - btn.removeAttribute('selected') - } - if (index === 0) { - if (page === 1) { - btn.setAttribute('disabled', '') - } else { - btn.removeAttribute('disabled') - } - } - if (index === buttons.length - 1) { - if (page === this.pages.length) { - btn.setAttribute('disabled', '') - } else { - btn.removeAttribute('disabled') - } - } - }) - } - - async showapps() { - await this.getData(0) - await this.getArbitraryResources() - await this.getResourcesGrid() - await this.updateItemsFromPage(1, true) - } - - async refreshapps() { - await this.getData(0) - await this.getArbitraryResources() - await this.updateItemsFromPage(1, true) - } - - doSearch(e) { - this.searchResult() - } - async searchResult() { let searchName = this.shadowRoot.getElementById('searchName').value if (searchName.length === 0) { let err1string = get("appspage.schange34") parentEpml.request('showSnackBar', `${err1string}`) } else { - let searchResources = await parentEpml.request('apiCall', { - url: `/arbitrary/resources/search?service=${this.service}&query=${searchName}&default=true&limit=5&reverse=false&includestatus=true&includemetadata=true` + const searchResourcesRes = await parentEpml.request('apiCall', { + url: `/arbitrary/resources/search?service=${this.service}&query=${searchName}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` }) - if (this.isEmptyArray(searchResources)) { + if (this.isEmptyArray(searchResourcesRes)) { let err2string = get("appspage.schange17") parentEpml.request('showSnackBar', `${err2string}`) } else { - this.searchResources = searchResources + this.searchResources = searchResourcesRes + this.renderSearchAppsGrid() } } } - renderAvatar(appObj) { - let name = appObj.name + renderSearchAppsGrid() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - return html`` + const gridContainer = this.shadowRoot.getElementById('search-container') + this.shadowRoot.getElementById('search-container').innerHTML = '' + + this.searchResources.forEach(item => { + const name = item.name + const title = item.metadata.title + const description = item.metadata.description + const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` + let tags = 'No Tags' + if (item.metadata.tags != null && item.metadata.tags.length > 0) { + tags = item.metadata.tags.join(", ") + } + const status1 = item.status.description + const status2 = item.status.status + + const openDialog = () => {this.openAppInfoDialog(url, title, name, description, tags, status1, status2)} + + let clickTimeout + let isDoubleClick = false + + const widgetElement = document.createElement('div') + + const myImage = document.createElement('img') + myImage.src = `${url}` + myImage.onerror = function() { + myImage.src = '/img/incognito.png' + } + myImage.addEventListener('click', function() { + clickTimeout = setTimeout(function() { + if (!isDoubleClick) { + openDialog() + } + isDoubleClick = false + }, 250) + }) + myImage.addEventListener('dblclick', function() { + clearTimeout(clickTimeout) + isDoubleClick = true + window.location.href = `../qdn/browser/index.html?name=${item.name}&service=APP` + }) + + const myStatus = document.createElement('div') + myStatus.classList.add('round-icon') + + const myContainer = document.createElement('div') + myContainer.classList.add('container') + myContainer.appendChild(myImage) + if (item.status.description === "Published but not yet downloaded" || item.status.status === "MISSING_DATA") { + } else if (item.status.description === "Ready" || item.status.status === "DOWNLOADED") { + myContainer.appendChild(myStatus) + } + + const myAppTitle = document.createElement('div') + myAppTitle.classList.add('myapptitle') + myAppTitle.textContent = item.metadata.title + + widgetElement.appendChild(myContainer) + widgetElement.appendChild(myAppTitle) + + gridContainer.appendChild(widgetElement) + }) + this.shadowRoot.getElementById('searchAppDialog').notifyResize() + } + + openSearchDialog() { + this.searchResources = [] + this.shadowRoot.getElementById('searchName').value = '' + this.shadowRoot.getElementById('search-container').innerHTML = '' + this.shadowRoot.getElementById('searchAppDialog').open() + } + + closeSearchDialog() { + this.searchResources = [] + this.shadowRoot.getElementById('searchName').value = '' + this.shadowRoot.getElementById('search-container').innerHTML = '' + this.shadowRoot.getElementById('searchAppDialog').close() } renderRelayModeText() { if (this.relayMode === true) { return html`
${translate("appspage.schange18")} "relayModeEnabled": false ${translate("appspage.schange19")} settings.json
` - } - else if (this.relayMode === false) { + } else if (this.relayMode === false) { return html`
${translate("appspage.schange20")} "relayModeEnabled": true ${translate("appspage.schange19")} settings.json
` } - return html`` } renderPublishButton() { @@ -897,37 +1311,22 @@ class QApps extends LitElement { return html` this.publishApp()}>add${translate("appspage.schange21")}` } - renderSearchButton() { - return html` this.openSearchDialog()}>search${translate("appspage.schange4")}` + publishApp() { + window.location.href = `../qdn/publish/index.html?service=${this.service}&identifier=${this.identifier}&uploadType=zip&category=app&showName=true&showService=false&showIdentifier=false&showMetadata=true` } - openSearchDialog() { - this.searchResources = [] - this.shadowRoot.getElementById('searchName').value = '' - this.shadowRoot.getElementById('searchAppDialog').show() - } - - renderDownload(downObj) { - if (downObj.status.description === "Published but not yet downloaded" || downObj.status.status === "MISSING_DATA") { - return html` this.downloadApp(downObj)}>` - } else if (downObj.status.description === "Ready" || downObj.status.status === "DOWNLOADED") { - return html`` - } else { - return html`` - } - } - - async downloadApp(downObj) { - this.showChunks(downObj) + async downloadApp(appname) { + this.showChunks(appname) await parentEpml.request('apiCall', { - url: `/arbitrary/resource/status/APP/${downObj.name}?build=true&apiKey=${this.getApiKey()}` + url: `/arbitrary/resource/status/APP/${appname}?build=true&apiKey=${this.getApiKey()}` }) } - showChunks(downObj) { + showChunks(appname) { + this.shadowRoot.getElementById('downloadProgressDialog').open() const checkStatus = async () => { const service = this.service - const name = downObj.name + const name = appname const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port @@ -937,8 +1336,6 @@ class QApps extends LitElement { this.btnDisabled = true - this.shadowRoot.getElementById('downloadProgressDialog').open() - let timerDownload const response = await fetch(url, { @@ -951,58 +1348,50 @@ class QApps extends LitElement { const status = await response.json() if (status.id === "UNSUPPORTED") { - this.btnDisabled = false this.textProgress = '' clearTimeout(timerDownload) this.textStatus = status.description } else if (status.id === "BLOCKED") { - this.btnDisabled = false this.textProgress = '' this.textStatus = name + " is blocked so content cannot be served" clearTimeout(timerDownload) timerDownload = setTimeout(checkStatus, 5000) } else if (status.id === "READY") { - this.btnDisabled = false clearTimeout(timerDownload) this.textStatus = '' this.textProgress = '' this.shadowRoot.getElementById('downloadProgressDialog').close() - this.getData(0) + this.closeAppInfoDialog() + this.getAppsArrayData() this.getFollowedNamesRefresh() this.getFollowedNamesResource() this.updateComplete.then(() => this.requestUpdate()) } else if (status.id === "BUILDING") { - this.btnDisabled = true this.textProgress = '' this.textStatus = status.description clearTimeout(timerDownload) timerDownload = setTimeout(checkStatus, 1000) } else if (status.id === "BUILD_FAILED") { - this.btnDisabled = false this.textProgress = '' clearTimeout(timerDownload) this.textStatus = status.description } else if (status.id === "NOT_STARTED") { - this.btnDisabled = false this.textProgress = '' this.textStatus = status.description clearTimeout(timerDownload) timerDownload = setTimeout(checkStatus, 1000) } else if (status.id === "DOWNLOADING") { - this.btnDisabled = true this.textStatus = status.description let progressString = get("appspage.schange42") this.textProgress = progressString + ": " + status.localChunkCount + " / " + status.totalChunkCount clearTimeout(timerDownload) timerDownload = setTimeout(checkStatus, 1000) } else if (status.id === "MISSING_DATA") { - this.btnDisabled = true this.textProgress = '' this.textStatus = status.description clearTimeout(timerDownload) timerDownload = setTimeout(checkStatus, 5000) } else if (status.id === "DOWNLOADED") { - this.btnDisabled = true this.textProgress = '' this.textStatus = status.description clearTimeout(timerDownload) @@ -1012,12 +1401,17 @@ class QApps extends LitElement { checkStatus() } - publishApp() { - window.location.href = `../qdn/publish/index.html?service=${this.service}&identifier=${this.identifier}&uploadType=zip&category=app&showName=true&showService=false&showIdentifier=false&showMetadata=true` + async closeDownloadProgressDialog() { + const closeDelay = ms => new Promise(res => setTimeout(res, ms)) + this.shadowRoot.getElementById('downloadProgressDialog').close() + this.shadowRoot.getElementById('closeProgressDialog').open() + await closeDelay(3000) + this.shadowRoot.getElementById('closeProgressDialog').close() + this.closeAppInfoDialog() } - async followName(appObj) { - let name = appObj.name + async followName(appName) { + let name = appName let items = [ name ] @@ -1035,6 +1429,7 @@ class QApps extends LitElement { if (ret === true) { this.followedNames = this.followedNames.filter(item => item != name) this.followedNames.push(name) + this.closeAppInfoDialog() this.getFollowedNamesRefresh() this.getFollowedNamesResource() } else { @@ -1044,8 +1439,8 @@ class QApps extends LitElement { return ret } - async unfollowName(appObj) { - let name = appObj.name + async unfollowName(appName) { + let name = appName let items = [ name ] @@ -1062,6 +1457,9 @@ class QApps extends LitElement { if (ret === true) { this.followedNames = this.followedNames.filter(item => item != name) + this.closeAppInfoDialog() + this.getFollowedNamesRefresh() + this.getFollowedNamesResource() } else { let err4string = get("appspage.schange23") parentEpml.request('showSnackBar', `${err4string}`) @@ -1069,35 +1467,8 @@ class QApps extends LitElement { return ret } - async unfollowNameTab(appObj) { - let name = appObj.name - let items = [ - name - ] - let namesJsonString = JSON.stringify({ "items": items }) - - let ret = await parentEpml.request('apiCall', { - url: `/lists/followedNames?apiKey=${this.getApiKey()}`, - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - }, - body: `${namesJsonString}` - }) - - if (ret === true) { - this.followedNames = this.followedNames.filter(item => item != name) - this.getFollowedNamesRefresh() - this.getFollowedNamesResource() - } else { - let err4string = get("websitespage.schange23") - parentEpml.request('showSnackBar', `${err4string}`) - } - return ret - } - - async blockName(appObj) { - let name = appObj.name + async blockName(appName) { + let name = appName let items = [ name ] @@ -1115,6 +1486,10 @@ class QApps extends LitElement { if (ret === true) { this.blockedNames = this.blockedNames.filter(item => item != name) this.blockedNames.push(name) + this.closeAppInfoDialog() + this.getAppsArrayData() + this.getBlockedNamesRefresh() + this.getBlockedNamesResource() } else { let err5string = get("appspage.schange24") parentEpml.request('showSnackBar', `${err5string}`) @@ -1122,8 +1497,8 @@ class QApps extends LitElement { return ret } - async unblockName(appObj) { - let name = appObj.name + async unblockName(appName) { + let name = appName let items = [ name ] @@ -1140,6 +1515,9 @@ class QApps extends LitElement { if (ret === true) { this.blockedNames = this.blockedNames.filter(item => item != name) + this.closeBlockedInfoDialog() + this.getBlockedNamesRefresh() + this.getBlockedNamesResource() } else { let err6string = get("appspage.schange25") parentEpml.request('showSnackBar', `${err6string}`) @@ -1147,150 +1525,14 @@ class QApps extends LitElement { return ret } - async unblockNameTab(appObj) { - let name = appObj.name - let items = [ - name - ] - let namesJsonString = JSON.stringify({ "items": items }) - - let ret = await parentEpml.request('apiCall', { - url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - }, - body: `${namesJsonString}` - }) - - if (ret === true) { - this.blockedNames = this.blockedNames.filter(item => item != name) - this.getBlockedNamesRefresh() - this.getBlockedNamesResource() - } else { - let err6string = get("websitespage.schange25") - parentEpml.request('showSnackBar', `${err6string}`) - } - return ret - } - - renderInfo(appObj) { - let name = appObj.name - let title = name - let description = "" - let categoryName = this.renderCatText() - let tags = "" - let sizeReadable = "" - - if (appObj.metadata != null) { - title = appObj.metadata.title - description = appObj.metadata.description - categoryName = appObj.metadata.categoryName - if (appObj.metadata.tags != null && appObj.metadata.tags.length > 0) { - tags = "Tags: " + appObj.metadata.tags.join(", ") - } - } - - if (appObj.size != null) { - sizeReadable = this.bytesToSize(appObj.size) - } - - return html` -
${title}
-
${description}
-
- ${categoryName}  - ${tags.length > 0 ? " | " : ""}  - ${tags}  - ${sizeReadable.length > 0 ? " | " : ""}  - ${translate("appspage.schange27")}: ${sizeReadable} -
- ` - } - - renderPublishedBy(appObj) { - if (appObj.status != null) { - return html` -
${appObj.name}
-
${translate("appspage.schange28")}: ${appObj.status.title}
- ` - } else { - return html` -
${appObj.name}
-
${translate("appspage.schange28")}: Published
- ` - } - } - - renderSize(appObj) { - if (appObj.size === null) { + renderSize(size) { + if (size === null) { return html`` } - let sizeReadable = this.bytesToSize(appObj.size) + let sizeReadable = this.bytesToSize(size) return html`${sizeReadable}` } - renderFollowUnfollowButton(appObj) { - let name = appObj.name - - if (this.followedNames == null || !Array.isArray(this.followedNames)) { - return html`` - } - - if (this.followedNames.indexOf(name) === -1) { - return html` this.followName(appObj)}>add_to_queue ${translate("appspage.schange29")}` - } else { - return html` this.unfollowName(appObj)}>remove_from_queue ${translate("appspage.schange30")}` - } - } - - renderFollowUnfollowButtonTab(appObj) { - let name = appObj.name - - if (this.followedNames == null || !Array.isArray(this.followedNames)) { - return html`` - } - - if (this.followedNames.indexOf(name) === -1) { - return html` this.followNameTab(appObj)}>add_to_queue ${translate("appspage.schange29")}` - } - else { - return html` this.unfollowNameTab(appObj)}>remove_from_queue ${translate("appspage.schange30")}` - } - } - - renderBlockUnblockButton(appObj) { - let name = appObj.name - - if (this.blockedNames == null || !Array.isArray(this.blockedNames)) { - return html`` - } - - if (this.blockedNames.indexOf(name) === -1) { - return html` this.blockName(appObj)}>block ${translate("appspage.schange31")}` - } else { - return html` this.unblockName(appObj)}>radio_button_unchecked ${translate("appspage.schange32")}` - } - } - - renderBlockUnblockButtonTab(appObj) { - let name = appObj.name - - // Only show the block/unblock button if we have permission to modify the list on this node - if (this.blockedNames == null || !Array.isArray(this.blockedNames)) { - return html`` - } - - if (this.blockedNames.indexOf(name) === -1) { - // render block button - return html` this.blockNameTab(appObj)}>block ${translate("appspage.schange31")}` - } - else { - // render unblock button - return html` this.unblockNameTab(appObj)}>radio_button_unchecked ${translate("appspage.schange32")}` - } - } - bytesToSize(bytes) { var sizes = ['bytes', 'KB', 'MB', 'GB', 'TB'] if (bytes == 0) return '0 bytes' @@ -1310,4 +1552,4 @@ class QApps extends LitElement { } } -window.customElements.define('q-apps', QApps) +window.customElements.define('q-apps', QApps) \ No newline at end of file diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 1459c3a8..c5c3ac15 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -2480,70 +2480,6 @@ class WebBrowser extends LitElement { break } - case actions.GET_USER_WALLET_INFO: { - const requiredFields = ['coin'] - const missingFields = [] - - requiredFields.forEach((field) => { - if (!data[field]) { - missingFields.push(field) - } - }) - - if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', ') - const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {} - data['error'] = errorMsg - response = JSON.stringify(data) - break - } - - const userWallet = await showModalAndWait( - actions.GET_USER_WALLET - ) - - if (userWallet.action === 'accept') { - let coin = data.coin; - let walletKeys = this.getUserWallet(coin); - - console.log( 'walletKeys print ... ' ); - console.log( 'walletKeys = ' + JSON.stringify(walletKeys) ); - let _url = `/crosschain/` + data.coin.toLowerCase() + `/addressinfos?apiKey=${this.getApiKey()}` - let _body = { - xpub58: walletKeys['publickey'] - } - - try { - this.loader.show() - const bodyToString = JSON.stringify(_body); - const res = await parentEpml.request('apiCall', { - url: _url, - method: 'POST', - headers: { - 'Accept': '*/*', - 'Content-Type': 'application/json' - }, - body: bodyToString, - }) - response = JSON.stringify(res); - } catch (error) { - console.error(error) - const data = {} - const errorMsg = error.message || get("browserpage.bchange21") - data['error'] = errorMsg - response = JSON.stringify(data) - return - } finally { - this.loader.hide() - } - } else if (userWallet.action === 'reject') { - response = '{"error": "User declined request"}' - } - - break - } - case actions.GET_DAY_SUMMARY: { try { const summary = await parentEpml.request('apiCall', { @@ -3470,42 +3406,6 @@ class WebBrowser extends LitElement { }, 60000) } - getUserWallet(coin) { - let userWallet = {}; - - switch (coin) { - case 'QORT': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.base58PublicKey - break - case 'BTC': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey - break - case 'LTC': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey - break - case 'DOGE': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey - break - case 'DGB': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.derivedMasterPublicKey - break - case 'RVN': - userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.address - userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey - break - case 'ARRR': - break - default: - break - } - return userWallet; - } - clearConsole() { if (!isElectron()) { } else {