Compare commits

...

13 commits

Author SHA1 Message Date
Alphastaire 91e743572c Sanitize internal storage file names
Sanitize an internally downloaded file's name during save process to prevent file transfer error for Windows users and potentially Linux users.
2024-08-18 13:20:06 +03:00
Alphastaire 80af06709f Retry failed file receipts & extra checks
Allows the user to click on a failed file receipt and retry the file download. There are also now checks for if a file marked as complete doesn't exist.
2024-08-17 12:26:17 +03:00
Alphastaire c28d3865bc Add filename tooltip for images
Hovering over an image with your cursor will now display a tooltip containing the filename.
This solves the difficulty of seeing what an image's file name is and makes it much more convenient.
2024-08-09 22:07:25 +03:00
Miquel Lionel c0299480ad Fix crash when toggling an account very fast (#1505)
- The switch widget in the account managment
            dialog is now not accepting input while the account
            being enabled is connecting.
2024-08-05 19:04:25 +03:00
Not so bad e55207c46e Update ru.po 2024-08-05 19:00:34 +03:00
Miquel Lionel 036d17df97 OpenGPG plugin: Show key as expired or revoked
- Show key as expired or revoked  account manager window;
- Updated French, Russian, German translation for the plugin as well.
2024-06-14 22:21:49 +03:00
Maxim Logaev 1555bd7a12 Sync CMake options with CI flatpak config
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2024-06-14 18:37:10 +03:00
giantplaceholder a554bb1a92
Fix typo 2024-06-10 11:35:19 +06:00
giantplaceholder 3f54c42aaf
Update README.md 2024-06-10 05:28:41 +00:00
giantplaceholder 7e57a373d8
Add explicit disclaimer re: support for archs other than x86_64 2024-06-10 05:26:49 +00:00
Maxim Logaev edd0249b20 Bump flatpak runtime version to 46
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2024-06-10 01:37:44 +03:00
Maxim Logaev 78cc398e30 Use pointer to int as HINSTANCE for ShellExecuteA
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2024-06-10 01:20:32 +03:00
Maxim Logaev f66604560b Added fixed YoloRT for GCC 14
Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
2024-06-10 01:20:32 +03:00
14 changed files with 206 additions and 83 deletions

View file

@ -32,9 +32,9 @@ OS support
------------ ------------
* Linux (flatpaks are targeted for Ubuntu 22.04+) * Linux (flatpaks are targeted for Ubuntu 22.04+)
* Windows 10\11 * Windows 10\11
* MacOS via [brew](https://brew.sh/) (very experimental!) * MacOS via [brew](https://brew.sh/) (very experimental, see below)
We only support 64 bit platforms. Officially, we support only x86_64 architecture. Whilst you may be able to compile this code for ARM-based platforms (like Pinephone or MacOS), there's zero guarantees that it'll compile or function properly, as we don't have the hardware and the time to test it out.
Installation (prebuilt packages & AUR) Installation (prebuilt packages & AUR)
------------ ------------

View file

@ -21,13 +21,13 @@ fatal()
download_yolort() download_yolort()
{ {
file_name=cppwinrt-2.0.210122.3+windows-10.0.19041+yolort-835cd4e.zip file_name=yolort.zip
yolort_dir="$PROJ_DIR/plugins/windows-notification/yolort" yolort_dir="$PROJ_DIR/plugins/windows-notification/yolort"
rm -rf "$yolort_dir" rm -rf "$yolort_dir"
mkdir "$yolort_dir" mkdir "$yolort_dir"
curl -L -o "$file_name" "https://github.com/LAGonauta/YoloRT/releases/download/v1.0.0/$file_name" curl -L -o "$file_name" "https://github.com/mxlgv/YoloRT/releases/download/dev1/$file_name"
echo "675a6d943c97b4acdbfaa473f68d3241d1798b31a67b5529c8d29fc0176a1707 $file_name" | sha256sum --check --status echo "c2727e390da7e842f66e0a4cf0a9f5d9dfb665115bb554152d98f108d322bbc1 $file_name" | sha256sum --check --status
unzip -o "$file_name" -d "$yolort_dir" unzip -o "$file_name" -d "$yolort_dir"
rm -f "$file_name" rm -f "$file_name"
} }

View file

@ -1,7 +1,7 @@
{ {
"id": "im.dino.Dino", "id": "im.dino.Dino",
"runtime": "org.gnome.Platform", "runtime": "org.gnome.Platform",
"runtime-version": "44", "runtime-version": "46",
"sdk": "org.gnome.Sdk", "sdk": "org.gnome.Sdk",
"command": "dino", "command": "dino",
"finish-args": [ "finish-args": [
@ -60,7 +60,11 @@
"buildsystem": "cmake-ninja", "buildsystem": "cmake-ninja",
"builddir": true, "builddir": true,
"config-opts": [ "config-opts": [
"-DSOUP_VERSION=3" "-DSOUP_VERSION=3",
"-DNO_DEBUG=yes",
"-DCMAKE_BUILD_TYPE=Release",
"-DENABLED_PLUGINS=notification-sound",
"-DPLUGIN_RTP_WEBRTC_AUDIO_PROCESSING=OFF"
], ],
"cleanup": [ "cleanup": [
"/include", "/include",

View file

@ -46,6 +46,15 @@ public class FileManager : StreamInteractionModule, Object {
return ret; return ret;
} }
private string sanitize_filename(string filename) {
#if _WIN32
GLib.Regex regex = new GLib.Regex("[<>:\"/\\|?*]");
#else
GLib.Regex regex = new GLib.Regex("[/]");
#endif
return regex.replace(filename, -1, 0, "_");
}
public async void send_file(File file, Conversation conversation) { public async void send_file(File file, Conversation conversation) {
FileTransfer file_transfer = new FileTransfer(); FileTransfer file_transfer = new FileTransfer();
file_transfer.account = conversation.account; file_transfer.account = conversation.account;
@ -243,7 +252,7 @@ public class FileManager : StreamInteractionModule, Object {
} }
// Save file // Save file
string filename = Random.next_int().to_string("%x") + "_" + file_transfer.file_name; string filename = Random.next_int().to_string("%x") + "_" + sanitize_filename(file_transfer.file_name);
File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename)); File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename));
OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION); OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
@ -332,7 +341,7 @@ public class FileManager : StreamInteractionModule, Object {
private async void save_file(FileTransfer file_transfer) throws FileSendError { private async void save_file(FileTransfer file_transfer) throws FileSendError {
try { try {
string filename = Random.next_int().to_string("%x") + "_" + file_transfer.file_name; string filename = Random.next_int().to_string("%x") + "_" + sanitize_filename(file_transfer.file_name);
File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename)); File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename));
OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION); OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
yield os.splice_async(file_transfer.input_stream, OutputStreamSpliceFlags.CLOSE_SOURCE|OutputStreamSpliceFlags.CLOSE_TARGET); yield os.splice_async(file_transfer.input_stream, OutputStreamSpliceFlags.CLOSE_SOURCE|OutputStreamSpliceFlags.CLOSE_TARGET);

View file

@ -6,7 +6,7 @@ namespace Dino {
public class Util { public class Util {
#if _WIN32 #if _WIN32
[CCode (cname = "ShellExecuteA", cheader_filename = "windows.h")] [CCode (cname = "ShellExecuteA", cheader_filename = "windows.h")]
private static extern int ShellExecuteA(int* hwnd, string operation, string file, string parameters, string directory, int showCmd); private static extern int* ShellExecuteA(int* hwnd, string operation, string file, string parameters, string directory, int showCmd);
[CCode (cname = "CoInitialize", cheader_filename = "windows.h")] [CCode (cname = "CoInitialize", cheader_filename = "windows.h")]
private static extern int CoInitialize(void* reserved); private static extern int CoInitialize(void* reserved);
@ -14,7 +14,7 @@ public class Util {
[CCode (cname = "CoUninitialize", cheader_filename = "windows.h")] [CCode (cname = "CoUninitialize", cheader_filename = "windows.h")]
private static extern void CoUninitialize(); private static extern void CoUninitialize();
private static int ShellExecute(string operation, string file) { private static int* ShellExecute(string operation, string file) {
CoInitialize(null); CoInitialize(null);
var result = ShellExecuteA(null, operation, file, null, null, 1); var result = ShellExecuteA(null, operation, file, null, null, 1);
CoUninitialize(); CoUninitialize();

View file

@ -563,7 +563,7 @@ msgstr "Уведомления"
#: main/src/ui/contact_details/settings_provider.vala:55 #: main/src/ui/contact_details/settings_provider.vala:55
msgid "Pin conversation" msgid "Pin conversation"
msgstr "" msgstr "Закрепить беседу"
#: main/src/ui/contact_details/settings_provider.vala:55 #: main/src/ui/contact_details/settings_provider.vala:55
msgid "Pins the conversation to the top of the conversation list" msgid "Pins the conversation to the top of the conversation list"
@ -826,16 +826,16 @@ msgstr "Прочтите %s, чтобы узнать о процессе авт
#: main/src/ui/conversation_content_view/message_widget.vala:213 #: main/src/ui/conversation_content_view/message_widget.vala:213
msgid "Edit message" msgid "Edit message"
msgstr "" msgstr "Редактировать сообщение"
#: main/src/ui/conversation_content_view/reactions_widget.vala:102 #: main/src/ui/conversation_content_view/reactions_widget.vala:102
msgid "You" msgid "You"
msgstr "" msgstr "Вы"
#: main/src/ui/conversation_content_view/reactions_widget.vala:128 #: main/src/ui/conversation_content_view/reactions_widget.vala:128
#: main/src/ui/conversation_content_view/item_actions.vala:8 #: main/src/ui/conversation_content_view/item_actions.vala:8
msgid "Add reaction" msgid "Add reaction"
msgstr "" msgstr "Добавить реакцию"
#: main/src/ui/conversation_content_view/file_image_widget.vala:53 #: main/src/ui/conversation_content_view/file_image_widget.vala:53
#: main/src/ui/conversation_content_view/file_default_widget.vala:57 #: main/src/ui/conversation_content_view/file_default_widget.vala:57
@ -947,7 +947,7 @@ msgstr "несколько секунд"
#: main/src/ui/conversation_content_view/conversation_item_skeleton.vala:191 #: main/src/ui/conversation_content_view/conversation_item_skeleton.vala:191
msgid "Delivered" msgid "Delivered"
msgstr "" msgstr "Доставленo"
#: main/src/ui/conversation_content_view/conversation_item_skeleton.vala:195 #: main/src/ui/conversation_content_view/conversation_item_skeleton.vala:195
msgid "Read" msgid "Read"
@ -959,15 +959,15 @@ msgstr "Этот контакт хочет добавить вас в свой
#: main/src/ui/conversation_content_view/item_actions.vala:21 #: main/src/ui/conversation_content_view/item_actions.vala:21
msgid "This conversation does not support reactions." msgid "This conversation does not support reactions."
msgstr "" msgstr "Этот разговор не поддерживает реакции."
#: main/src/ui/conversation_content_view/item_actions.vala:33 #: main/src/ui/conversation_content_view/item_actions.vala:33
msgid "Reply" msgid "Reply"
msgstr "" msgstr "Ответить"
#: main/src/ui/conversation_content_view/item_actions.vala:43 #: main/src/ui/conversation_content_view/item_actions.vala:43
msgid "This conversation does not support replies." msgid "This conversation does not support replies."
msgstr "" msgstr "Этот разговор не поддерживает ответы"
#: main/src/ui/conversation_content_view/file_default_widget.vala:64 #: main/src/ui/conversation_content_view/file_default_widget.vala:64
#, c-format #, c-format
@ -1006,7 +1006,7 @@ msgstr "Тут пустовато"
#: main/data/unified_main_content.ui:47 #: main/data/unified_main_content.ui:47
msgid "Click + to start a chat or join a channel" msgid "Click + to start a chat or join a channel"
msgstr "" msgstr "Нажмите +, чтобы начать чат или присоединиться к каналу"
#: main/data/add_conversation/conference_details_fragment.ui:20 #: main/data/add_conversation/conference_details_fragment.ui:20
#: main/data/add_conversation/add_groupchat_dialog.ui:40 #: main/data/add_conversation/add_groupchat_dialog.ui:40

View file

@ -73,6 +73,9 @@ public class FileImageWidget : Box {
image_overlay_toolbar.visible = false; image_overlay_toolbar.visible = false;
}); });
// Set tooltip to display the file name on hover
image.set_tooltip_text(file_name);
this.append(overlay); this.append(overlay);
} }
} }

View file

@ -90,7 +90,8 @@ public class FileWidget : SizeRequestBox {
private async void update_widget() { private async void update_widget() {
if (show_image() && state != State.IMAGE if (show_image() && state != State.IMAGE
&& file_transfer.state == FileTransfer.State.COMPLETE) { && file_transfer.state == FileTransfer.State.COMPLETE
&& file_transfer.get_file().query_exists()) {
var content_bak = content; var content_bak = content;
FileImageWidget file_image_widget = null; FileImageWidget file_image_widget = null;
@ -109,7 +110,8 @@ public class FileWidget : SizeRequestBox {
} catch (Error e) { } } catch (Error e) { }
} }
if (state != State.DEFAULT) { if (state != State.DEFAULT ||
(file_transfer.state == FileTransfer.State.COMPLETE && !file_transfer.get_file().query_exists())) {
if (content != null) this.remove(content); if (content != null) this.remove(content);
FileDefaultWidget default_file_widget = new FileDefaultWidget(); FileDefaultWidget default_file_widget = new FileDefaultWidget();
default_widget_controller = new FileDefaultWidgetController(default_file_widget); default_widget_controller = new FileDefaultWidgetController(default_file_widget);
@ -176,10 +178,16 @@ public class FileWidgetController : Object {
} }
private void open_file() { private void open_file() {
try{ if (file_transfer.get_file().query_exists()) {
Dino.Util.launch_default_for_uri(file_transfer.get_file().get_uri()); try {
} catch (Error err) { Dino.Util.launch_default_for_uri(file_transfer.get_file().get_uri());
warning("Failed to open %s - %s", file_transfer.get_file().get_uri(), err.message); } catch (Error err) {
warning("Failed to open %s - %s", file_transfer.get_file().get_uri(), err.message);
}
} else {
warning("File %s does not exist", file_transfer.get_file().get_uri());
file_transfer.state = FileTransfer.State.NOT_STARTED;
widget.activate_action("file.download", null);
} }
} }
@ -244,8 +252,12 @@ public class FileDefaultWidgetController : Object {
private void update_file_info() { private void update_file_info() {
state = file_transfer.state; state = file_transfer.state;
if (state == FileTransfer.State.COMPLETE && !file_transfer.get_file().query_exists()) {
state = FileTransfer.State.NOT_STARTED;
file_transfer.state = FileTransfer.State.NOT_STARTED;
}
widget.update_file_info(file_transfer.mime_type, file_transfer.transferred_bytes, widget.update_file_info(file_transfer.mime_type, file_transfer.transferred_bytes,
file_transfer.direction, file_transfer.state, file_transfer.size); file_transfer.direction, state, file_transfer.size);
} }
private void on_clicked() { private void on_clicked() {
@ -254,10 +266,11 @@ public class FileDefaultWidgetController : Object {
widget.activate_action("file.open", null); widget.activate_action("file.open", null);
break; break;
case FileTransfer.State.NOT_STARTED: case FileTransfer.State.NOT_STARTED:
case FileTransfer.State.FAILED:
widget.activate_action("file.download", null); widget.activate_action("file.download", null);
break; break;
default: default:
// Clicking doesn't do anything in FAILED and IN_PROGRESS states // Clicking doesn't do anything in IN_PROGRESS state
break; break;
} }
} }

View file

@ -197,6 +197,7 @@ public class Dialog : Gtk.Dialog {
} }
private void populate_grid_data(Account account) { private void populate_grid_data(Account account) {
active_switch.sensitive = false;
active_switch.state_set.disconnect(change_account_state); active_switch.state_set.disconnect(change_account_state);
picture.model = new ViewModel.CompatAvatarPictureModel(stream_interactor).add_participant(new Conversation(account.bare_jid, account, Conversation.Type.CHAT), account.bare_jid); picture.model = new ViewModel.CompatAvatarPictureModel(stream_interactor).add_participant(new Conversation(account.bare_jid, account, Conversation.Type.CHAT), account.bare_jid);
@ -227,11 +228,14 @@ public class Dialog : Gtk.Dialog {
ConnectionManager.ConnectionState state = stream_interactor.connection_manager.get_state(account); ConnectionManager.ConnectionState state = stream_interactor.connection_manager.get_state(account);
switch (state) { switch (state) {
case ConnectionManager.ConnectionState.CONNECTING: case ConnectionManager.ConnectionState.CONNECTING:
active_switch.sensitive = false;
state_label.label = _("Connecting…"); break; state_label.label = _("Connecting…"); break;
case ConnectionManager.ConnectionState.CONNECTED: case ConnectionManager.ConnectionState.CONNECTED:
active_switch.sensitive = true;
password_change_btn.sensitive = true; password_change_btn.sensitive = true;
state_label.label = _("Connected"); break; state_label.label = _("Connected"); break;
case ConnectionManager.ConnectionState.DISCONNECTED: case ConnectionManager.ConnectionState.DISCONNECTED:
active_switch.sensitive = true;
password_change_btn.sensitive = false; password_change_btn.sensitive = false;
state_label.label = _("Disconnected"); break; state_label.label = _("Disconnected"); break;
} }

View file

@ -1,9 +1,10 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: dino-openpgp-0.0\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-07 21:31+0100\n" "POT-Creation-Date: 2024-06-09 22:16+0200\n"
"PO-Revision-Date: 2020-04-16 20:11+0000\n" "PO-Revision-Date: 2024-06-09 22:39+0200\n"
"Last-Translator: eerielili \n"
"Language-Team: German <https://hosted.weblate.org/projects/dino/plugin-" "Language-Team: German <https://hosted.weblate.org/projects/dino/plugin-"
"openpgp/de/>\n" "openpgp/de/>\n"
"Language: de\n" "Language: de\n"
@ -11,11 +12,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.1-dev\n" "X-Generator: Poedit 3.4.2\n"
#: plugins/openpgp/src/account_settings_entry.vala:68 #: plugins/openpgp/src/account_settings_entry.vala:68
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
#: plugins/openpgp/src/account_settings_entry.vala:101 #: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Key publishing disabled" msgid "Key publishing disabled"
msgstr "Schlüsselveröffentlichung deaktiviert" msgstr "Schlüsselveröffentlichung deaktiviert"
@ -24,18 +25,40 @@ msgid "Error in GnuPG"
msgstr "Fehler in GnuPG" msgstr "Fehler in GnuPG"
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
msgid "No keys available. Generate one!" msgid ""
msgstr "Keine Schlüssel vorhanden. Erzeuge einen!" "No keys available. Generate one or check if your keys aren't expired or "
"revoked!"
msgstr ""
"Keine Schlüssel vorhanden. Erstellen Sie einen oder prüfen Sie,"
"ob Ihre Schlüssel nicht abgelaufen sind oder widerrufen!"
#: plugins/openpgp/src/account_settings_entry.vala:101
#: plugins/openpgp/src/account_settings_entry.vala:95
msgid "expired!"
msgstr "abgelaufen"
#: plugins/openpgp/src/account_settings_entry.vala:95
msgid "revoked!"
msgstr "widerrufen!"
#: plugins/openpgp/src/account_settings_entry.vala:96
msgid "Attention required!"
msgstr "Achtung!"
#: plugins/openpgp/src/account_settings_entry.vala:96
#, c-format
msgid "Your key %s is %s"
msgstr "Ihr Schlüssel %s is %s"
#: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Select key" msgid "Select key"
msgstr "Wähle einen Schlüssel" msgstr "Wähle einen Schlüssel"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Loading…" msgid "Loading…"
msgstr "Lade…" msgstr "Lade…"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Querying GnuPG" msgid "Querying GnuPG"
msgstr "Frage GnuPG ab" msgstr "Frage GnuPG ab"
@ -46,6 +69,3 @@ msgstr "Schlüssel nicht im Schlüsselbund"
#: plugins/openpgp/src/contact_details_provider.vala:30 #: plugins/openpgp/src/contact_details_provider.vala:30
msgid "Encryption" msgid "Encryption"
msgstr "Verschlüsselung" msgstr "Verschlüsselung"
#~ msgid "OpenPGP"
#~ msgstr "OpenPGP"

View file

@ -1,52 +1,68 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION+\n"
"Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-06-09 22:16+0200\n"
"POT-Creation-Date: 2023-02-07 21:31+0100\n" "PO-Revision-Date: 2024-06-09 22:18+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: \n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Dino+\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language: en\n"
"Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
"X-Poedit-Basepath: ../src\n"
"X-Poedit-KeywordsList: _(\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: .\n"
#: plugins/openpgp/src/account_settings_entry.vala:68 #: account_settings_entry.vala:68 account_settings_entry.vala:72
#: plugins/openpgp/src/account_settings_entry.vala:72 #: account_settings_entry.vala:113
#: plugins/openpgp/src/account_settings_entry.vala:101
msgid "Key publishing disabled" msgid "Key publishing disabled"
msgstr "" msgstr ""
#: plugins/openpgp/src/account_settings_entry.vala:68 #: account_settings_entry.vala:68
msgid "Error in GnuPG" msgid "Error in GnuPG"
msgstr "" msgstr ""
#: plugins/openpgp/src/account_settings_entry.vala:72 #: account_settings_entry.vala:72
msgid "No keys available. Generate one!" msgid ""
"No keys available. Generate one or check if your keys aren't expired or "
"revoked!"
msgstr "" msgstr ""
#: plugins/openpgp/src/account_settings_entry.vala:101 #: account_settings_entry.vala:95
msgid "expired!"
msgstr ""
#: account_settings_entry.vala:95
msgid "revoked!"
msgstr ""
#: account_settings_entry.vala:96
msgid "Attention required!"
msgstr ""
#: account_settings_entry.vala:96
#, c-format
msgid "Your key %s is %s"
msgstr ""
#: account_settings_entry.vala:113
msgid "Select key" msgid "Select key"
msgstr "" msgstr ""
#: plugins/openpgp/src/account_settings_entry.vala:114 #: account_settings_entry.vala:126
msgid "Loading…" msgid "Loading…"
msgstr "" msgstr ""
#: plugins/openpgp/src/account_settings_entry.vala:114 #: account_settings_entry.vala:126
msgid "Querying GnuPG" msgid "Querying GnuPG"
msgstr "" msgstr ""
#: plugins/openpgp/src/contact_details_provider.vala:28 #: contact_details_provider.vala:28
msgid "Key not in keychain" msgid "Key not in keychain"
msgstr "" msgstr ""
#: plugins/openpgp/src/contact_details_provider.vala:30 #: contact_details_provider.vala:30
msgid "Encryption" msgid "Encryption"
msgstr "" msgstr ""

View file

@ -7,8 +7,9 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-07 21:31+0100\n" "POT-Creation-Date: 2024-06-09 22:16+0200\n"
"PO-Revision-Date: 2020-11-12 17:21+0000\n" "PO-Revision-Date: 2024-06-09 22:22+0200\n"
"Last-Translator: \n"
"Language-Team: French <https://hosted.weblate.org/projects/dino/plugin-" "Language-Team: French <https://hosted.weblate.org/projects/dino/plugin-"
"openpgp/fr/>\n" "openpgp/fr/>\n"
"Language: fr\n" "Language: fr\n"
@ -16,11 +17,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.4-dev\n" "X-Generator: Poedit 3.4.2\n"
#: plugins/openpgp/src/account_settings_entry.vala:68 #: plugins/openpgp/src/account_settings_entry.vala:68
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
#: plugins/openpgp/src/account_settings_entry.vala:101 #: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Key publishing disabled" msgid "Key publishing disabled"
msgstr "La publication des clés est désactivée" msgstr "La publication des clés est désactivée"
@ -29,18 +30,39 @@ msgid "Error in GnuPG"
msgstr "Erreur dans GnuPG" msgstr "Erreur dans GnuPG"
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
msgid "No keys available. Generate one!" msgid ""
msgstr "Aucune clé nest disponible. Générez-en une!" "No keys available. Generate one or check if your keys aren't expired or "
"revoked!"
msgstr ""
"Pas de clés disponibles. Générez-en une nouvelle ou vérifier si vos "
"clés ne seraient pas expirées ou révoquées!"
#: plugins/openpgp/src/account_settings_entry.vala:101 #: plugins/openpgp/src/account_settings_entry.vala:95
msgid "expired!"
msgstr "expirée!"
#: plugins/openpgp/src/account_settings_entry.vala:95
msgid "revoked!"
msgstr "révoquée!"
#: plugins/openpgp/src/account_settings_entry.vala:96
msgid "Attention required!"
msgstr "Attention requise!"
#: plugins/openpgp/src/account_settings_entry.vala:96
#, c-format
msgid "Your key %s is %s"
msgstr "Votre clé %s est %s"
#: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Select key" msgid "Select key"
msgstr "Choix dune clé" msgstr "Choix dune clé"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Loading…" msgid "Loading…"
msgstr "Chargement…" msgstr "Chargement…"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Querying GnuPG" msgid "Querying GnuPG"
msgstr "Interrogation de GnuPG" msgstr "Interrogation de GnuPG"

View file

@ -7,8 +7,9 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-07 21:31+0100\n" "POT-Creation-Date: 2024-06-09 22:16+0200\n"
"PO-Revision-Date: 2020-06-02 11:41+0000\n" "PO-Revision-Date: 2024-06-09 22:39+0200\n"
"Last-Translator: eerielili\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/dino/plugin-" "Language-Team: Russian <https://hosted.weblate.org/projects/dino/plugin-"
"openpgp/ru/>\n" "openpgp/ru/>\n"
"Language: ru\n" "Language: ru\n"
@ -17,11 +18,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.1-dev\n" "X-Generator: Poedit 3.4.2\n"
#: plugins/openpgp/src/account_settings_entry.vala:68 #: plugins/openpgp/src/account_settings_entry.vala:68
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
#: plugins/openpgp/src/account_settings_entry.vala:101 #: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Key publishing disabled" msgid "Key publishing disabled"
msgstr "Публикация ключа отключена" msgstr "Публикация ключа отключена"
@ -30,18 +31,37 @@ msgid "Error in GnuPG"
msgstr "Ошибка в GnuPG" msgstr "Ошибка в GnuPG"
#: plugins/openpgp/src/account_settings_entry.vala:72 #: plugins/openpgp/src/account_settings_entry.vala:72
msgid "No keys available. Generate one!" msgid ""
"No keys available. Generate one or check if your keys aren't expired or "
"revoked!"
msgstr "Нет доступных ключей. Создайте как минимум один, либо проверьте что уже существующие (ранее созданные) ключи не были отозваны или срок их действия не закончился!" msgstr "Нет доступных ключей. Создайте как минимум один, либо проверьте что уже существующие (ранее созданные) ключи не были отозваны или срок их действия не закончился!"
#: plugins/openpgp/src/account_settings_entry.vala:101 #: plugins/openpgp/src/account_settings_entry.vala:95
msgid "expired!"
msgstr "истёк!"
#: plugins/openpgp/src/account_settings_entry.vala:95
msgid "revoked!"
msgstr "отозван!"
#: plugins/openpgp/src/account_settings_entry.vala:96
msgid "Attention required!"
msgstr "внимание!"
#: plugins/openpgp/src/account_settings_entry.vala:96
#, c-format
msgid "Your key %s is %s"
msgstr "Ваш ключ %s %s"
#: plugins/openpgp/src/account_settings_entry.vala:113
msgid "Select key" msgid "Select key"
msgstr "Выбрать ключ" msgstr "Выбрать ключ"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Loading…" msgid "Loading…"
msgstr "Загрузка…" msgstr "Загрузка…"
#: plugins/openpgp/src/account_settings_entry.vala:114 #: plugins/openpgp/src/account_settings_entry.vala:126
msgid "Querying GnuPG" msgid "Querying GnuPG"
msgstr "Запрос GnuPG" msgstr "Запрос GnuPG"

View file

@ -69,7 +69,7 @@ public class AccountSettingsEntry : Plugins.AccountSettingsEntry {
return; return;
} }
if (keys.size == 0) { if (keys.size == 0) {
label.set_markup(build_markup_string(_("Key publishing disabled"), _("No keys available. Generate one!"))); label.set_markup(build_markup_string(_("Key publishing disabled"), _("No keys available. Generate one or check if your keys aren't expired or revoked!")));
return; return;
} }
@ -88,6 +88,18 @@ public class AccountSettingsEntry : Plugins.AccountSettingsEntry {
set_label_active(selected); set_label_active(selected);
combobox.changed.connect(key_changed); combobox.changed.connect(key_changed);
if (account_key != null) {
try {
GPG.Key key_check = GPGHelper.get_public_key(account_key);
if(key_check.expired || key_check.revoked) {
string status_str = key_check.expired ? _("expired!") : _("revoked!");
label.set_markup(build_markup_string(_("Attention required!"), _("Your key %s is %s").printf("<span color='red'><b>"+ key_check.fpr +"</b></span>", status_str) ) );
}
}
catch {
debug("Coudn't check GPG key status.");
}
}
} }
private void populate_list_store() { private void populate_list_store() {