From 90b0a408241944708a2a75391e5c1b9716fecc9b Mon Sep 17 00:00:00 2001 From: Sebastian Wolf Date: Wed, 3 Nov 2021 23:31:00 +0100 Subject: [PATCH] Improve URL/open-with handler (hopefully) --- harbour-fernschreiber.desktop | 4 + qml/js/functions.js | 33 +++--- src/tdlibwrapper.cpp | 60 ++++++----- translations/harbour-fernschreiber-fr.ts | 128 +++++++++++------------ 4 files changed, 122 insertions(+), 103 deletions(-) diff --git a/harbour-fernschreiber.desktop b/harbour-fernschreiber.desktop index db85a62..bc67e03 100644 --- a/harbour-fernschreiber.desktop +++ b/harbour-fernschreiber.desktop @@ -4,3 +4,7 @@ X-Nemo-Application-Type=generic Icon=harbour-fernschreiber Exec=harbour-fernschreiber Name=Fernschreiber +MimeType=x-url-handler/t.me;x-scheme-handler/tg; +X-Maemo-Service=de.ygriega.fernschreiber +X-Maemo-Object-Path=/de/ygriega/fernschreiber +X-Maemo-Method=de.ygriega.fernschreiber.openUrl diff --git a/qml/js/functions.js b/qml/js/functions.js index 8e52948..972f05f 100644 --- a/qml/js/functions.js +++ b/qml/js/functions.js @@ -369,8 +369,25 @@ function enhanceMessageText(formattedText, ignoreEntities) { return messageText; } +function handleTMeLink(link, usedPrefix) { + if (link.indexOf("joinchat") !== -1) { + Debug.log("Joining Chat: ", link); + tdLibWrapper.joinChatByInviteLink(link); + // Do the necessary stuff to open the chat if successful + // Fail with nice error message if it doesn't work + } else { + Debug.log("Search public chat: ", link.substring(usedPrefix.length)); + tdLibWrapper.searchPublicChat(link.substring(usedPrefix.length), true); + // Check responses for updateBasicGroup or updateSupergroup + // Fire createBasicGroupChat or createSupergroupChat + // Do the necessary stuff to open the chat + // Fail with nice error message if chat can't be found + } +} + function handleLink(link) { var tMePrefix = tdLibWrapper.getOptionString("t_me_url"); + var tMePrefixHttp = tMePrefix.replace('https', 'http'); if (link.indexOf("user://") === 0) { var userName = link.substring(8); var userInformation = tdLibWrapper.getUserInformationByName(userName); @@ -392,19 +409,9 @@ function handleLink(link) { return link.substring(13); } else { if (link.indexOf(tMePrefix) === 0) { - if (link.indexOf("joinchat") !== -1) { - Debug.log("Joining Chat: ", link); - tdLibWrapper.joinChatByInviteLink(link); - // Do the necessary stuff to open the chat if successful - // Fail with nice error message if it doesn't work - } else { - Debug.log("Search public chat: ", link.substring(tMePrefix.length)); - tdLibWrapper.searchPublicChat(link.substring(tMePrefix.length), true); - // Check responses for updateBasicGroup or updateSupergroup - // Fire createBasicGroupChat or createSupergroupChat - // Do the necessary stuff to open the chat - // Fail with nice error message if chat can't be found - } + handleTMeLink(link, tMePrefix); + } else if (link.indexOf(tMePrefixHttp) === 0) { + handleTMeLink(link, tMePrefixHttp); } else { Qt.openUrlExternally(link); } diff --git a/src/tdlibwrapper.cpp b/src/tdlibwrapper.cpp index d873f1b..6241550 100644 --- a/src/tdlibwrapper.cpp +++ b/src/tdlibwrapper.cpp @@ -1881,39 +1881,47 @@ void TDLibWrapper::setLogVerbosityLevel() void TDLibWrapper::initializeOpenWith() { - LOG("Initialize open-with"); - LOG("Checking standard open URL file..."); + LOG("Initialize open-with");LOG("Checking standard open URL file..."); const QString applicationsLocation(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)); const QString openUrlFilePath(applicationsLocation + "/open-url.desktop"); if (QFile::exists(openUrlFilePath)) { - LOG("Standard open URL file exists, good!"); - } else { - LOG("Copying standard open URL file to " << openUrlFilePath); - QFile::copy("/usr/share/applications/open-url.desktop", openUrlFilePath); - QProcess::startDetached("update-desktop-database " + applicationsLocation); + LOG("Old open URL file exists, that needs to go away...!"); + QFile::remove(openUrlFilePath); + } + const QString sailfishBrowserFilePath(applicationsLocation + "/sailfish-browser.desktop"); + if (!QFile::exists(sailfishBrowserFilePath)) { + LOG("Copying standard Sailfish Browser desktop file to " << sailfishBrowserFilePath); + if (QFile::copy("/usr/share/applications/sailfish-browser.desktop", sailfishBrowserFilePath)) { + LOG("Standard Sailfish Browser desktop file successfully copied to " << sailfishBrowserFilePath); + QProcess::startDetached("update-desktop-database " + applicationsLocation); + } else { + LOG("ERROR copying standard Sailfish Browser desktop file to " << sailfishBrowserFilePath); + } } const QString desktopFilePath(applicationsLocation + "/harbour-fernschreiber-open-url.desktop"); QFile desktopFile(desktopFilePath); - if (!desktopFile.exists()) { - LOG("Creating Open-With file at " << desktopFile.fileName()); - if (desktopFile.open(QIODevice::WriteOnly | QIODevice::Text)) { - QTextStream fileOut(&desktopFile); - fileOut.setCodec("UTF-8"); - fileOut << QString("[Desktop Entry]").toUtf8() << "\n"; - fileOut << QString("Type=Application").toUtf8() << "\n"; - fileOut << QString("Name=Fernschreiber").toUtf8() << "\n"; - fileOut << QString("Icon=harbour-fernschreiber").toUtf8() << "\n"; - fileOut << QString("NotShowIn=X-MeeGo;").toUtf8() << "\n"; - fileOut << QString("MimeType=text/html;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/tg;").toUtf8() << "\n"; - fileOut << QString("X-Maemo-Service=de.ygriega.fernschreiber").toUtf8() << "\n"; - fileOut << QString("X-Maemo-Object-Path=/de/ygriega/fernschreiber").toUtf8() << "\n"; - fileOut << QString("X-Maemo-Method=de.ygriega.fernschreiber.openUrl").toUtf8() << "\n"; - fileOut << QString("Hidden=true;").toUtf8() << "\n"; - fileOut.flush(); - desktopFile.close(); - QProcess::startDetached("update-desktop-database " + applicationsLocation); - } + if (desktopFile.exists()) { + LOG("Fernschreiber open-with file existing, removing and re-creating..."); + desktopFile.remove(); + } + LOG("Creating Fernschreiber open-with file at " << desktopFile.fileName()); + if (desktopFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream fileOut(&desktopFile); + fileOut.setCodec("UTF-8"); + fileOut << QString("[Desktop Entry]").toUtf8() << "\n"; + fileOut << QString("Type=Application").toUtf8() << "\n"; + fileOut << QString("Name=Fernschreiber").toUtf8() << "\n"; + fileOut << QString("Icon=harbour-fernschreiber").toUtf8() << "\n"; + fileOut << QString("NotShowIn=X-MeeGo;").toUtf8() << "\n"; + fileOut << QString("MimeType=x-url-handler/t.me;x-scheme-handler/tg;").toUtf8() << "\n"; + fileOut << QString("X-Maemo-Service=de.ygriega.fernschreiber").toUtf8() << "\n"; + fileOut << QString("X-Maemo-Object-Path=/de/ygriega/fernschreiber").toUtf8() << "\n"; + fileOut << QString("X-Maemo-Method=de.ygriega.fernschreiber.openUrl").toUtf8() << "\n"; + fileOut << QString("Hidden=true;").toUtf8() << "\n"; + fileOut.flush(); + desktopFile.close(); + QProcess::startDetached("update-desktop-database " + applicationsLocation); } QString dbusPathName = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/dbus-1/services"; diff --git a/translations/harbour-fernschreiber-fr.ts b/translations/harbour-fernschreiber-fr.ts index 5f2b333..affb39e 100644 --- a/translations/harbour-fernschreiber-fr.ts +++ b/translations/harbour-fernschreiber-fr.ts @@ -25,7 +25,7 @@ Terms of Service - Conditions d'utilisation + Conditions d'utilisation Privacy Policy @@ -37,7 +37,7 @@ This project uses the Telegram Database Library (TDLib). Thanks for making it available under the conditions of the Boost Software License 1.0! - Ce projet utilise Telegram Database Library (TDLib). Merci de l'avoir distribuée sous les conditions de la Boost Software Licences 1.0 ! + Ce projet utilise Telegram Database Library (TDLib). Merci de l'avoir distribuée sous les conditions de la Boost Software Licences 1.0 ! Open Telegram Database Library on GitHub @@ -49,7 +49,7 @@ This product uses the Telegram API but is not endorsed or certified by Telegram. - Ce produit utilise l'API de Telegram, mais n'est ni appuyé ni certifié par Telegram. + Ce produit utilise l'API de Telegram, mais n'est ni appuyé ni certifié par Telegram. TDLib version %1 @@ -65,7 +65,7 @@ This project uses twemoji. Copyright 2018 Twitter, Inc. and other contributors. Thanks for making it available under the conditions of the MIT License (coding) and CC-BY 4.0 (graphics)! - Ce projet utilise twemoji. Copyright 2018 Twitter, Inc. et autres contributeurs. Merci de l'avoir distribué sous les conditions de la licence MIT (code) et CC-BY 4.0 (graphismes) ! + Ce projet utilise twemoji. Copyright 2018 Twitter, Inc. et autres contributeurs. Merci de l'avoir distribué sous les conditions de la licence MIT (code) et CC-BY 4.0 (graphismes) ! Open twemoji on GitHub @@ -77,7 +77,7 @@ This project uses rlottie. Copyright 2020 Samsung Electronics Co., Ltd. and other contributors. Thanks for making it available under the conditions of the MIT License! - Ce projet utilise rlottie. Copyright 2020 Samsung Electronics Co., Ltd. et autres contributeurs. Merci de l'avoir distribué sous les conditions de la licence MIT ! + Ce projet utilise rlottie. Copyright 2020 Samsung Electronics Co., Ltd. et autres contributeurs. Merci de l'avoir distribué sous les conditions de la licence MIT ! Open rlottie on GitHub @@ -97,7 +97,7 @@ This project uses OpenStreetMap Nominatim for reverse geocoding of location attachments. Thanks for making it available as web service! - Ce projet utilise OpenStreetMap Nominatim pour du géocodage inversé des pièces jointes de localisation. Merci de l'avoir mis à disposition en tant que service web ! + Ce projet utilise OpenStreetMap Nominatim pour du géocodage inversé des pièces jointes de localisation. Merci de l'avoir mis à disposition en tant que service web ! Open OSM Nominatim Wiki @@ -193,7 +193,7 @@ There is no information text available, yet. - Aucun texte informatif pour l'instant. + Aucun texte informatif pour l'instant. Info @@ -208,11 +208,11 @@ Invite Link header - Lien d'invitation + Lien d'invitation The Invite Link has been copied to the clipboard. - Le lien d'invitation a été copié dans le presse-papiers. + Le lien d'invitation a été copié dans le presse-papiers. %1, %2 @@ -297,7 +297,7 @@ User Info - Informations sur l'utilisateur + Informations sur l'utilisateur Group Info @@ -456,7 +456,7 @@ This secret chat is not yet ready. Your chat partner needs to go online first. - Cet échange secret n'est pas encore prêt. Votre interlocuteur doit être en ligne + Cet échange secret n'est pas encore prêt. Votre interlocuteur doit être en ligne Closing chat @@ -531,7 +531,7 @@ You don't have any chats yet. - Vous n'avez aucune conversation. + Vous n'avez aucune conversation. @@ -542,7 +542,7 @@ Waiting for network... - En attente d'une connexion… + En attente d'une connexion… Connecting to network... @@ -580,7 +580,7 @@ Group Member Permissions what can normal group members do - Autorisations d'un membre dans le groupe + Autorisations d'un membre dans le groupe Send Messages @@ -595,7 +595,7 @@ Send Other Messages member permission - Envoyer d'autres types de messages + Envoyer d'autres types de messages Add Web Page Previews @@ -697,11 +697,11 @@ have registered with Telegram myself - s'est enregistré avec Telegram + s'est enregistré avec Telegram has registered with Telegram - s'est enregistré avec Telegram + s'est enregistré avec Telegram joined this chat @@ -805,11 +805,11 @@ changed the secret chat TTL setting myself - a changé la durée de vie de l'échange secret + a changé la durée de vie de l'échange secret changed the secret chat TTL setting - a changé la durée de vie de l'échange secret + a changé la durée de vie de l'échange secret upgraded this group to a supergroup @@ -828,11 +828,11 @@ created a screenshot in this chat myself - a créé une capture d'écran de cette conversation + a créé une capture d'écran de cette conversation created a screenshot in this chat - a créé une capture d'écran de cette conversation + a créé une capture d'écran de cette conversation sent an unsupported message @@ -854,16 +854,16 @@ sent a self-destructing photo that is expired myself - a envoyé une photo s'autodétruisant périmée + a envoyé une photo s'autodétruisant périmée sent a self-destructing video that is expired myself - a envoyé une vidéo s'autodétruisant périmée + a envoyé une vidéo s'autodétruisant périmée sent a self-destructing video that is expired - a envoyé une vidéo s'autodétruisant périmée + a envoyé une vidéo s'autodétruisant périmée sent an unsupported message: %1 @@ -872,7 +872,7 @@ sent a self-destructing photo that is expired - a envoyé une photo s'autodétruisant périmée + a envoyé une photo s'autodétruisant périmée sent an audio @@ -939,7 +939,7 @@ ImagePage Download Picture - Télécharger l'image + Télécharger l'image Download of %1 successful. @@ -993,7 +993,7 @@ Unable to authenticate you with the entered code. - Impossible de s'authentifier avec le code saisi. + Impossible de s'authentifier avec le code saisi. Enter code again @@ -1001,7 +1001,7 @@ Restart authentication - Redémarrer l'authentification + Redémarrer l'authentification Please enter your password: @@ -1009,7 +1009,7 @@ User Registration - Enregistrement de l'utilisateur + Enregistrement de l'utilisateur Enter your First Name @@ -1021,7 +1021,7 @@ Register User - Enregistrement de l'utilisateur + Enregistrement de l'utilisateur Use the international format, e.g. %1 @@ -1056,7 +1056,7 @@ More Options... - Plus d'options… + Plus d'options… @@ -1096,7 +1096,7 @@ This message was forwarded. Original author: %1 - Ce message a été transféré. Auteur d'origine : %1 + Ce message a été transféré. Auteur d'origine : %1 @@ -1157,7 +1157,7 @@ You don't have any contacts. - Vous n'avez aucun contact. + Vous n'avez aucun contact. Private Chat @@ -1242,7 +1242,7 @@ You don't have any chats yet. - Vous n'avez aucune conversation. + Vous n'avez aucune conversation. New Chat @@ -1378,7 +1378,7 @@ Quizzes have one correct answer. Participants can't revoke their responses. - Une seule réponse pour le quiz. Impossible d'annuler la réponse. + Une seule réponse pour le quiz. Impossible d'annuler la réponse. Enter an optional explanation @@ -1386,11 +1386,11 @@ Shown when the user selects a wrong answer. - Aficher quand l'utilisateur sélectionne une réponse erronée. + Aficher quand l'utilisateur sélectionne une réponse erronée. An explanation can be up to 200 characters long. - Une explication peut comporter jusqu'à 200 caractères. + Une explication peut comporter jusqu'à 200 caractères. @@ -1512,7 +1512,7 @@ Only display emojis instead of the actual stickers - Afficher uniquement les emojis au lieu d'un autocollant + Afficher uniquement les emojis au lieu d'un autocollant Show stickers as images @@ -1520,7 +1520,7 @@ Show background for stickers and align them centrally like images - Afficher l'arrière-plan pour l'autocollant et l'aligner au centre comme les images + Afficher l'arrière-plan pour l'autocollant et l'aligner au centre comme les images Animate stickers @@ -1535,15 +1535,15 @@ Send message by enter - Envoyer le message avec la touche d'entrée + Envoyer le message avec la touche d'entrée Send your message by pressing the enter key - Envoyer votre message en appuyant sur la touche d'entrée + Envoyer votre message en appuyant sur la touche d'entrée Focus text input on chat open - Focaliser la saisie lorsque la conversation s'ouvre + Focaliser la saisie lorsque la conversation s'ouvre Focus the text input area when entering a chat @@ -1551,11 +1551,11 @@ Focus text input area after send - Focaliser la zone de saise après l'envoi + Focaliser la zone de saise après l'envoi Focus the text input area after sending a message - Focaliser la zone de saisie après l'envoi d'un message + Focaliser la zone de saisie après l'envoi d'un message Delay before marking messages as read @@ -1595,7 +1595,7 @@ Notification turns on the display - Notification allume l'écran + Notification allume l'écran Enable notification sounds @@ -1625,7 +1625,7 @@ Privacy setting for managing whether you can be invited to chats. - Paramètre de confidentialité pour configurer l'invitation à une conversation. + Paramètre de confidentialité pour configurer l'invitation à une conversation. Yes @@ -1653,7 +1653,7 @@ Privacy setting for managing whether a link to your account is included in forwarded messages. - Paramètre de confidentialité pour configurer l'inclusion d'un lien vers votre compte dans les messages transférés. + Paramètre de confidentialité pour configurer l'inclusion d'un lien vers votre compte dans les messages transférés. Show phone number @@ -1681,7 +1681,7 @@ Allow sending Location to inline bots - Autoriser l'envoi de localisation aux bots intégrés + Autoriser l'envoi de localisation aux bots intégrés Some inline bots request location data when using them @@ -1704,7 +1704,7 @@ Enable storage optimizer - Activer l'optimisation de l'espace de stockage + Activer l'optimisation de l'espace de stockage @@ -1734,7 +1734,7 @@ Username user name of the logged-in profile - header - Nom d'utilisateur + Nom d'utilisateur Profile Pictures @@ -1750,7 +1750,7 @@ Deleting profile picture - Supprimer l'image de profil + Supprimer l'image de profil Uploading... @@ -1765,22 +1765,22 @@ Removing sticker set - Suppression du lot d'autocollants + Suppression du lot d'autocollants Sticker set successfully removed! - Lot d'autocollants supprimés avec succès ! + Lot d'autocollants supprimés avec succès ! StickerSetOverlay Sticker set successfully installed! - Lot d'autocollants installé avec succès ! + Lot d'autocollants installé avec succès ! Sticker set successfully removed! - Lot d'autocollants supprimé avec succès! + Lot d'autocollants supprimé avec succès! @@ -1806,7 +1806,7 @@ Press the button to start recording - Appuyez sur le bouton pour démarrer l'enregistrement + Appuyez sur le bouton pour démarrer l'enregistrement Unavailable @@ -1826,7 +1826,7 @@ Use recording - Utilise l'enregistrement + Utilise l'enregistrement Voice Note (%1) @@ -1852,7 +1852,7 @@ has registered with Telegram - s'est inscrit avec Telegram + s'est inscrit avec Telegram Picture: %1 @@ -1991,7 +1991,7 @@ was never online - n'a jamais été en ligne + n'a jamais été en ligne last online: last month @@ -2124,12 +2124,12 @@ changed the secret chat TTL setting myself; TTL = Time To Live - a changé le paramètre de durée de vie de l'échange secret + a changé le paramètre de durée de vie de l'échange secret changed the secret chat TTL setting TTL = Time To Live - a changé le paramètre de durée de vie de l'échange secret + a changé le paramètre de durée de vie de l'échange secret upgraded this group to a supergroup @@ -2148,11 +2148,11 @@ created a screenshot in this chat myself - a réalisé une capture d'écran de cette conversation + a réalisé une capture d'écran de cette conversation created a screenshot in this chat - a réalisé une capture d'écran de cette conversation + a réalisé une capture d'écran de cette conversation sent an unsupported message @@ -2197,7 +2197,7 @@ Unable to find user %1 - Impossible de trouver l'utilisateur %1 + Impossible de trouver l'utilisateur %1 sent a video note