Merge branch 'mainline' into remove-old-msgs-beyond-storage-pref
This commit is contained in:
commit
5d53bbec26
43 changed files with 5170 additions and 5814 deletions
|
|
@ -27,7 +27,7 @@ variables:
|
|||
# Fedora packages
|
||||
FEDORA_DEPS:
|
||||
meson vala desktop-file-utils enchant2-devel folks-devel gcr-devel
|
||||
glib2-devel gmime-devel gnome-online-accounts-devel gspell-devel
|
||||
glib2-devel gmime30-devel gnome-online-accounts-devel gspell-devel
|
||||
gtk3-devel iso-codes-devel json-glib-devel itstool
|
||||
libappstream-glib-devel libgee-devel libhandy-devel libpeas-devel
|
||||
libsecret-devel libunwind-devel libxml2-devel libytnef-devel
|
||||
|
|
@ -38,7 +38,7 @@ variables:
|
|||
UBUNTU_DEPS:
|
||||
meson build-essential valac desktop-file-utils gettext iso-codes
|
||||
itstool libappstream-glib-dev libenchant-dev libfolks-dev
|
||||
libgcr-3-dev libgee-0.8-dev libglib2.0-dev libgmime-2.6-dev
|
||||
libgcr-3-dev libgee-0.8-dev libglib2.0-dev libgmime-3.0-dev
|
||||
libgoa-1.0-dev libgspell-1-dev libgtk-3-dev libhandy-0.0-dev
|
||||
libjson-glib-dev libmessaging-menu-dev libpeas-dev libsecret-1-dev
|
||||
libsqlite3-dev libunwind-dev libwebkit2gtk-4.0-dev libxml2-dev
|
||||
|
|
|
|||
4
INSTALL
4
INSTALL
|
|
@ -40,7 +40,7 @@ Installing dependencies on Fedora
|
|||
Install them by running this command:
|
||||
|
||||
sudo dnf install meson vala desktop-file-utils enchant2-devel \
|
||||
folks-devel gcr-devel glib2-devel gmime-devel \
|
||||
folks-devel gcr-devel glib2-devel gmime30-devel \
|
||||
gnome-online-accounts-devel gspell-devel gtk3-devel \
|
||||
iso-codes-devel json-glib-devel libappstream-glib-devel \
|
||||
libgee-devel libhandy-devel libpeas-devel libsecret-devel \
|
||||
|
|
@ -55,7 +55,7 @@ Install them by running this command:
|
|||
sudo apt-get install meson build-essential valac \
|
||||
desktop-file-utils iso-codes gettext itstool \
|
||||
libappstream-glib-dev libenchant-dev libfolks-dev libgcr-3-dev \
|
||||
libgee-0.8-dev libglib2.0-dev libgmime-2.6-dev libgoa-1.0-dev \
|
||||
libgee-0.8-dev libglib2.0-dev libgmime3.0-dev libgoa-1.0-dev \
|
||||
libgspell-1-dev libgtk-3-dev libjson-glib-dev libhandy-0.0-dev \
|
||||
libpeas-dev libsecret-1-dev libsqlite3-dev libunwind-dev \
|
||||
libwebkit2gtk-4.0-dev libxml2-dev libytnef0-dev
|
||||
|
|
|
|||
|
|
@ -1,22 +0,0 @@
|
|||
# NOTE: The dependencies in this file require vapigen and vala-gen-introspect to be installed,
|
||||
# which are not default in a standard Vala installation.
|
||||
|
||||
GMIME_FILES := \
|
||||
gmime-2.6/gmime-2.6.defines \
|
||||
gmime-2.6/gmime-2.6.files \
|
||||
gmime-2.6/gmime-2.6.metadata \
|
||||
gmime-2.6/gmime-2.6.namespace \
|
||||
gmime-2.6/gmime-2.6-custom.vala
|
||||
|
||||
all: gmime-2.6.vapi
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm gmime-2.6.vapi gmime-2.6/gmime-2.6.gi
|
||||
|
||||
gmime-2.6/gmime-2.6.gi: $(GMIME_FILES)
|
||||
vala-gen-introspect gmime-2.6 gmime-2.6
|
||||
|
||||
gmime-2.6.vapi: gmime-2.6/gmime-2.6.gi
|
||||
vapigen --pkg=glib-2.0 --pkg=gio-2.0 --library gmime-2.6 gmime-2.6/gmime-2.6.gi gmime-2.6/gmime-2.6-custom.vala
|
||||
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,72 +0,0 @@
|
|||
/* Copyright 2016 Software Freedom Conservancy Inc.
|
||||
*
|
||||
* This software is licensed under the GNU Lesser General Public License
|
||||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
[CCode (cname="InternetAddress", cheader_filename="gmime/gmime.h", type_id="INTERNET_ADDRESS_TYPE", type_check_function="IS_INTERNET_ADDRESS")]
|
||||
public class InternetAddress : GLib.Object {
|
||||
[CCode (cname="internet_address_get_name")]
|
||||
public unowned string? get_name();
|
||||
[CCode (cname="internet_address_set_name")]
|
||||
public void set_name(string? name);
|
||||
[CCode (cname="internet_address_to_string")]
|
||||
public virtual string to_string(bool encoded);
|
||||
}
|
||||
|
||||
[CCode (cname="InternetAddressGroup", cheader_filename="gmime/gmime.h", type_id="INTERNET_ADDRESS_TYPE_GROUP", type_check_function="INTERNET_ADDRESS_IS_GROUP")]
|
||||
public class InternetAddressGroup : InternetAddress {
|
||||
[CCode (cname="internet_address_group_new")]
|
||||
public InternetAddressGroup(string name);
|
||||
[CCode (cname="internet_address_group_get_members")]
|
||||
public unowned InternetAddressList get_members();
|
||||
[CCode (cname="internet_address_group_set_members")]
|
||||
public void set_members(InternetAddressList members);
|
||||
[CCode (cname="internet_address_group_add_member")]
|
||||
public int add_member(InternetAddress member);
|
||||
}
|
||||
|
||||
[CCode (cname="InternetAddressMailbox", cheader_filename="gmime/gmime.h", type_id="INTERNET_ADDRESS_TYPE_MAILBOX", type_check_function="INTERNET_ADDRESS_IS_MAILBOX")]
|
||||
public class InternetAddressMailbox : InternetAddress {
|
||||
[CCode (cname="internet_address_mailbox_new")]
|
||||
public InternetAddressMailbox(string? name, string addr);
|
||||
[CCode (cname="internet_address_mailbox_get_addr")]
|
||||
public unowned string get_addr();
|
||||
[CCode (cname="internet_address_mailbox_set_addr")]
|
||||
public void set_addr(string addr);
|
||||
}
|
||||
|
||||
[CCode (cname="InternetAddressList", cheader_filename="gmime/gmime.h", type_id="INTERNET_ADDRESS_LIST_TYPE", type_check_function="IS_INTERNET_ADDRESS_LIST")]
|
||||
public class InternetAddressList : GLib.Object {
|
||||
[CCode (cname="internet_address_list_new")]
|
||||
public InternetAddressList();
|
||||
[CCode (cname="internet_address_list_length")]
|
||||
public int length();
|
||||
[CCode (cname="internet_address_list_clear")]
|
||||
public void clear();
|
||||
[CCode (cname="internet_address_list_add")]
|
||||
public int add(InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_insert")]
|
||||
public void insert(int index, InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_remove")]
|
||||
public bool remove(InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_remove_at")]
|
||||
public bool remove_at(int index);
|
||||
[CCode (cname="internet_address_list_contains")]
|
||||
public bool contains(InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_index_of")]
|
||||
public int index_of(InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_get_address")]
|
||||
public unowned InternetAddress get_address(int index);
|
||||
[CCode (cname="internet_address_list_set_address")]
|
||||
public void set_address(int index, InternetAddress addr);
|
||||
[CCode (cname="internet_address_list_prepend")]
|
||||
public void prepend(InternetAddressList prepend);
|
||||
[CCode (cname="internet_address_list_append")]
|
||||
public void append(InternetAddressList append);
|
||||
[CCode (cname="internet_address_list_to_string")]
|
||||
public string? to_string(bool encode);
|
||||
[CCode (cname="internet_address_list_parse_string")]
|
||||
public static InternetAddressList? parse_string(string str);
|
||||
}
|
||||
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
include/gmime-2.6/
|
||||
lib/x86_64-linux-gnu/libgmime-2.6.so
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
GMime lower_case_cprefix="gmime_" cheader_filename="gmime/gmime.h"
|
||||
|
||||
GMimeObject abstract="1"
|
||||
GMimeStream abstract="1"
|
||||
|
||||
g_mime_content_type_to_string transfer_ownership="1"
|
||||
g_mime_header_list_get_iter.iter is_out="1"
|
||||
g_mime_message_get_date.date is_out="1"
|
||||
g_mime_message_get_date.tz_offset is_out="1"
|
||||
g_mime_message_get_date_as_string transfer_ownership="1"
|
||||
g_mime_message_get_mime_part is_nullable="1"
|
||||
g_mime_multipart_remove_at is_nullable="1" transfer_ownership="1"
|
||||
g_mime_multipart_replace is_nullable="1" transfer_ownership="1"
|
||||
g_mime_object_get_content_disposition nullable="1"
|
||||
g_mime_object_get_content_type nullable="1"
|
||||
g_mime_object_get_content_type_parameter nullable="1"
|
||||
g_mime_object_get_headers transfer_ownership="1"
|
||||
g_mime_object_to_string transfer_ownership="1"
|
||||
g_mime_param_next name="get_next"
|
||||
g_mime_parser_construct_message nullable="1" transfer_ownership="1"
|
||||
g_mime_parser_construct_part nullable="1" transfer_ownership="1"
|
||||
g_mime_part_get_content_description nullable="1"
|
||||
g_mime_part_get_content_location nullable="1"
|
||||
g_mime_part_get_content_id nullable="1"
|
||||
g_mime_part_get_content_md5 nullable="1"
|
||||
g_mime_part_get_content_object nullable="1"
|
||||
g_mime_part_get_content_part nullable="1"
|
||||
g_mime_part_get_filename nullable="1"
|
||||
g_mime_signer_next name="get_next"
|
||||
g_mime_stream_mem_new_with_buffer.buffer is_array="1" array_length_pos="1.0" type_name="uint8[]"
|
||||
g_mime_stream_mem_new_with_buffer.len hidden="1"
|
||||
g_mime_stream_read.buf is_array="1" type_name="uint8[]"
|
||||
g_mime_stream_read.len hidden="1"
|
||||
g_mime_utils_decode_8bit transfer_ownership="1"
|
||||
g_mime_utils_decode_message_id transfer_ownership="1"
|
||||
g_mime_utils_generate_message_id transfer_ownership="1"
|
||||
g_mime_utils_header_decode_date type_name="time_t"
|
||||
g_mime_utils_header_decode_date.tz_offset is_out="1"
|
||||
g_mime_utils_header_decode_phrase transfer_ownership="1"
|
||||
g_mime_utils_header_decode_text transfer_ownership="1"
|
||||
g_mime_utils_header_encode_phrase transfer_ownership="1"
|
||||
g_mime_utils_header_encode_text transfer_ownership="1"
|
||||
g_mime_utils_header_fold transfer_ownership="1"
|
||||
g_mime_utils_header_format_date transfer_ownership="1"
|
||||
g_mime_utils_header_printf transfer_ownership="1"
|
||||
g_mime_utils_quote_string transfer_ownership="1"
|
||||
g_mime_utils_structured_header_fold transfer_ownership="1"
|
||||
g_mime_utils_unstructured_header_fold transfer_ownership="1"
|
||||
|
||||
# FIXME: there is no keyword "is_protected"
|
||||
GMimeFilter.backbuf type_name="char*" is_protected="1"
|
||||
GMimeFilter.backlen is_protected="1"
|
||||
GMimeFilter.backsize is_protected="1"
|
||||
GMimeFilter.outbuf is_array="1" type_name="char[]" array_length_cname="outsize" array_length_type="size_t" is_protected="1"
|
||||
GMimeFilter.outpre is_protected="1"
|
||||
GMimeFilter.outptr type_name="char*" is_protected="1"
|
||||
GMimeFilter.outreal type_name="char*" is_protected="1"
|
||||
GMimeFilter.outsize hidden="1" is_protected="1"
|
||||
GMimeFilterBest.charset hidden="1"
|
||||
|
||||
g_mime_filter_backup.data is_array="1" array_length_pos="1.1" array_length_type="size_t" type_name="char[]"
|
||||
g_mime_filter_backup.length hidden="1"
|
||||
g_mime_filter_complete.inbuf is_array="1" array_length_pos="1.1" array_length_type="size_t" type_name="char[]"
|
||||
g_mime_filter_complete.inlen hidden="1"
|
||||
g_mime_filter_complete.outbuf is_array="1" array_length_pos="3.1" array_length_type="size_t" type_name="char[]" is_out="1" transfer_ownership="0"
|
||||
g_mime_filter_complete.outlen hidden="1"
|
||||
g_mime_filter_complete.outprespace is_out="1"
|
||||
g_mime_filter_filter.inbuf is_array="1" array_length_pos="1.1" array_length_type="size_t" type_name="char[]"
|
||||
g_mime_filter_filter.inlen hidden="1"
|
||||
g_mime_filter_filter.outbuf is_array="1" array_length_pos="3.1" array_length_type="size_t" type_name="char[]" is_out="1" transfer_ownership="0"
|
||||
g_mime_filter_filter.outlen hidden="1"
|
||||
g_mime_filter_filter.outprespace is_out="1"
|
||||
g_mime_filter_copy transfer_ownership="1"
|
||||
|
||||
InternetAddress hidden="1"
|
||||
internet_address_* hidden="1"
|
||||
InternetAddress.name hidden="1"
|
||||
|
||||
InternetAddressGroup hidden="1"
|
||||
internet_address_group_* hidden="1"
|
||||
InternetAddressGroup.members hidden="1"
|
||||
|
||||
InternetAddressList hidden="1"
|
||||
internet_address_list_* hidden="1"
|
||||
InternetAddressList.array hidden="1"
|
||||
|
||||
InternetAddressMailbox hidden="1"
|
||||
internet_address_mailbox_* hidden="1"
|
||||
InternetAddressMailbox.addr hidden="1"
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
GMime
|
||||
550
help/pl/pl.po
550
help/pl/pl.po
|
|
@ -7,8 +7,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: geary-help\n"
|
||||
"POT-Creation-Date: 2019-09-27 12:58+0000\n"
|
||||
"PO-Revision-Date: 2019-09-29 15:48+0200\n"
|
||||
"POT-Creation-Date: 2019-11-25 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-12-28 16:19+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <community-poland@mozilla.org>\n"
|
||||
"Language: pl\n"
|
||||
|
|
@ -210,51 +210,80 @@ msgstr ""
|
|||
"keyseq>."
|
||||
|
||||
#. (itstool) path: page/title
|
||||
#: C/archive.page:8
|
||||
msgid "Archive, trash and delete messages"
|
||||
msgstr "Przenoszenie do archiwum lub kosza i usuwanie wiadomości"
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/archive.page:10
|
||||
msgid "Delete or archive a message"
|
||||
msgstr "Usuwanie i archiwizowanie wiadomości"
|
||||
msgid ""
|
||||
"Geary lets you archive messages if your server supports it. Clicking the "
|
||||
"<gui style=\"button\">Archive</gui> toolbar button moves the conversation "
|
||||
"from the current folder to the <gui>Archive</gui> folder for most email "
|
||||
"services, or to <gui>All Mail</gui> for GMail. Archiving helps keep your "
|
||||
"email organised by moving old and replied-to email out of the way."
|
||||
msgstr ""
|
||||
"Można archiwizować wiadomości, jeśli serwer obsługuje tę funkcję. Kliknięcie "
|
||||
"przycisku <gui style=\"button\">Archiwizuj</gui> na pasku narzędziowym "
|
||||
"przenosi wątek z bieżącego katalogu do katalogu <gui>Archiwum</gui> "
|
||||
"w większości serwisów pocztowych (katalogu <gui>Wszystkie</gui> w przypadku "
|
||||
"serwisu Gmail). Archiwizacja pomaga organizować pocztę przez przenoszenie "
|
||||
"starych i odpowiedzianych wiadomości z głównego katalogu."
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/archive.page:12
|
||||
#: C/archive.page:17
|
||||
msgid ""
|
||||
"When you use Geary with a Gmail account, Geary lets you <em>archive</em> "
|
||||
"messages. The <gui>Archive</gui> toolbar button archives the selected "
|
||||
"conversation(s). Archived messages appear in the <gui>All Mail</gui> folder."
|
||||
"To move conversations to the <gui>Trash</gui> folder, select them and click "
|
||||
"the <gui style=\"button\">Trash</gui> toolbar button. To permanently delete "
|
||||
"conversations, hold down <key>Shift</key> and click the <gui style=\"button"
|
||||
"\">Delete</gui> button that appears in place of the <gui>Trash</gui> button, "
|
||||
"or open the conversation in the <gui>Trash</gui> folder and click <gui style="
|
||||
"\"button\">Delete</gui> there."
|
||||
msgstr ""
|
||||
"Jeśli używane jest konto serwisu Gmail, to można <em>archiwizować</em> "
|
||||
"wiadomości. Przycisk <gui>Archiwizuj</gui> archiwizuje zaznaczone "
|
||||
"wiadomości. Zarchiwizowane wiadomości są widoczne w katalogu <gui>Wszystkie</"
|
||||
"gui>."
|
||||
"Aby przenieść wątki do katalogu <gui>Kosz</gui>, zaznacz je i kliknij "
|
||||
"przycisk <gui style=\"button\">Przenieś do kosza</gui> na pasku "
|
||||
"narzędziowym. Aby trwale usunąć wątki, przytrzymaj klawisz <key>Shift</key> "
|
||||
"i kliknij przycisk <gui style=\"button\">Usuń</gui>, który pojawi się "
|
||||
"zamiast przycisku <gui>Przenieś do kosza</gui> lub otwórz wątek w katalogu "
|
||||
"<gui>Kosz</gui> i kliknij przycisk <gui style=\"button\">Usuń</gui>."
|
||||
|
||||
#. (itstool) path: note/title
|
||||
#: C/archive.page:26
|
||||
msgid "Undoing changes"
|
||||
msgstr "Cofanie zmian"
|
||||
|
||||
#. (itstool) path: note/p
|
||||
#: C/archive.page:27
|
||||
msgid ""
|
||||
"Note that you can always undo archiving or trashing a message if you change "
|
||||
"your mind. Click <gui style=\"button\">Undo</gui> on the pop-up notification "
|
||||
"that appears, or type <keyseq><key>Ctrl</key><key>Z</key></keyseq>, or open "
|
||||
"the folder, find the message, then move it back to your <gui>Inbox</gui>"
|
||||
msgstr ""
|
||||
"Zauważ, że zawsze można cofnąć archiwizację lub przeniesienie wiadomości do "
|
||||
"kosza. Kliknij przycisk <gui style=\"button\">Cofnij</gui> na wyskakującym "
|
||||
"powiadomieniu, naciśnij klawisze <keyseq><key>Ctrl</key><key>Z</key></"
|
||||
"keyseq> lub otwórz katalog, znajdź wiadomość, a następnie przenieś ją "
|
||||
"z powrotem do katalogu <gui>Odebrane</gui>."
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/archive.page:16
|
||||
#: C/archive.page:34
|
||||
msgid ""
|
||||
"With other mail servers, you can trash or delete, but not archive, messages. "
|
||||
"To move one or more conversations to the <gui>Trash</gui> folder, select "
|
||||
"them and press the <gui>Trash</gui> button on the toolbar. To permanently "
|
||||
"delete the conversations, hold down <key>Shift</key> and press the "
|
||||
"<gui>Delete</gui> button that appears in place of the <gui>Trash</gui> "
|
||||
"button."
|
||||
"While both <gui style=\"button\">Archive</gui> and <gui style=\"button"
|
||||
"\">Trash</gui> removes conversations from your <gui>Inbox</gui> folder, "
|
||||
"there is an important difference. Clicking <gui style=\"button\">Archive</"
|
||||
"gui> will ensure your conversations are kept so you can find them again "
|
||||
"later. Clicking <gui style=\"button\">Trash</gui> will cause conversations "
|
||||
"to be hidden from <link xref=\"search\"/>, and they will likely be deleted "
|
||||
"in the future."
|
||||
msgstr ""
|
||||
"Za pomocą innych serwerów poczty można przenosić wiadomości do kosza i je "
|
||||
"usuwać, ale nie można ich archiwizować. Aby przenieść wątki to katalogu "
|
||||
"<gui>Kosz</gui>, najpierw je zaznacz, a następnie kliknij przycisk "
|
||||
"<gui>Kosz</gui> na pasku narzędziowym. Aby trwale usunąć wątki, przytrzymaj "
|
||||
"klawisz <key>Shift</key> i kliknij przycisk <gui>Usuń</gui>, który pojawi "
|
||||
"się zamiast przycisku <gui>Kosz</gui>."
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/archive.page:21
|
||||
msgid ""
|
||||
"Delete is not available from every folder, such as Search. Delete is also "
|
||||
"unavailable for Gmail. For Gmail, <gui>Trash</gui> will move messages to the "
|
||||
"Trash folder on the server, where the user can then manually delete them. "
|
||||
"The server will automatically remove trashed messages after 30 days."
|
||||
msgstr ""
|
||||
"Usuwanie nie jest dostępne w każdym katalogu (np. Wyszukiwanie). Nie można "
|
||||
"też usuwać w serwisie Gmail: przycisk <gui>Kosz</gui> przenosi wiadomości do "
|
||||
"katalogu Kosz na serwerze, gdzie użytkownik może je usuwać. Serwer "
|
||||
"automatycznie usuwa wiadomości z kosza po 30 dniach."
|
||||
"Chociaż zarówno <gui style=\"button\">Archiwizuj</gui>, jak i <gui style="
|
||||
"\"button\">Przenieś do kosza</gui> usuwa wątki z katalogu <gui>Odebrane</"
|
||||
"gui>, jest między nimi ważna różnica. Kliknięcie przycisku <gui style="
|
||||
"\"button\">Archiwizuj</gui> zapewni, że wątki są zachowane, aby można je "
|
||||
"było z powrotem odnaleźć później. Kliknięcie przycisku <gui style=\"button"
|
||||
"\">Przenieś do kosza</gui> spowoduje ukrycie wątków z funkcji <link xref="
|
||||
"\"search\"/>, i prawdopodobnie w przyszłości zostaną usunięte."
|
||||
|
||||
#. (itstool) path: page/title
|
||||
#: C/bugs.page:10
|
||||
|
|
@ -736,14 +765,15 @@ msgstr "Preferencje"
|
|||
#. (itstool) path: page/p
|
||||
#: C/preferences.page:12
|
||||
msgid ""
|
||||
"Geary allows you to customise how it works via its <gui>Preferences</gui> "
|
||||
"window. To open the window, select <gui>Preferences</gui> from the "
|
||||
"application menu on the main window's toolbar. You can change the following "
|
||||
"options:"
|
||||
"Geary allows you to customise how it works via its <gui style=\"group"
|
||||
"\">Preferences</gui> window. To open the window, select <gui style=\"menuitem"
|
||||
"\">Preferences</gui> from the application menu on the main window's toolbar. "
|
||||
"You can change the following options:"
|
||||
msgstr ""
|
||||
"Można dostosować działanie programu w jego oknie <gui>Preferencji</gui>. Aby "
|
||||
"je otworzyć, wybierz <gui>Preferencje</gui> z menu programu na pasku "
|
||||
"narzędziowym głównego okna. Opcje, które można zmienić:"
|
||||
"Można dostosować działanie programu w jego oknie <gui style=\"group"
|
||||
"\">Preferencji</gui>. Aby je otworzyć, wybierz <gui style=\"menuitem"
|
||||
"\">Preferencje</gui> z menu programu na pasku narzędziowym głównego okna. "
|
||||
"Opcje, które można zmienić:"
|
||||
|
||||
#. (itstool) path: item/title
|
||||
#: C/preferences.page:19
|
||||
|
|
@ -793,11 +823,27 @@ msgstr ""
|
|||
|
||||
#. (itstool) path: item/title
|
||||
#: C/preferences.page:38
|
||||
msgid "<gui>Use single key email shortcuts</gui>"
|
||||
msgstr "<gui>Skróty jednoklawiszowe</gui>"
|
||||
|
||||
#. (itstool) path: item/p
|
||||
#: C/preferences.page:39
|
||||
msgid ""
|
||||
"Enable keyboard shortcuts for email actions that do not require pressing "
|
||||
"<key>Ctrl</key>. These match the shortcuts used by GMail. See <link xref="
|
||||
"\"shortcuts\"/> for details."
|
||||
msgstr ""
|
||||
"Włącza skróty klawiszowe do działań na wiadomościach, które nie wymagają "
|
||||
"naciśnięcia klawisza <key>Ctrl</key>. Są one takie same, jak skróty "
|
||||
"w serwisie Gmail. <link xref=\"shortcuts\"/> zawiera więcej informacji."
|
||||
|
||||
#. (itstool) path: item/title
|
||||
#: C/preferences.page:44
|
||||
msgid "<gui>Watch for new mail when closed</gui>"
|
||||
msgstr "<gui>Monitorowanie nowych wiadomości po zamknięciu</gui>"
|
||||
|
||||
#. (itstool) path: item/p
|
||||
#: C/preferences.page:39
|
||||
#: C/preferences.page:45
|
||||
msgid ""
|
||||
"Geary will watch your accounts for new mail even when the main window is not "
|
||||
"open. To do this, it will silently start when you log in to your computer, "
|
||||
|
|
@ -984,21 +1030,21 @@ msgstr ""
|
|||
msgid "Keyboard shortcuts"
|
||||
msgstr "Skróty klawiszowe"
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/shortcuts.page:12
|
||||
#. (itstool) path: section/p
|
||||
#: C/shortcuts.page:13
|
||||
msgid ""
|
||||
"Geary has keyboard shortcuts for most common operations. Use the built-in "
|
||||
"keyboard shortcuts help in Geary to discover the full list. This can be "
|
||||
"accessed via the application menu: <guiseq><gui>Geary</gui><gui>Keyboard "
|
||||
"Shortcuts</gui></guiseq> or using the keyboard shortcuts listed below."
|
||||
"help to discover the full list. To open the shortcuts help, select <gui "
|
||||
"style=\"menuitem\">Keyboard Shortcuts</gui> from the application menu on the "
|
||||
"main window's toolbar, or using the keyboard shortcuts listed below."
|
||||
msgstr ""
|
||||
"Dostępne są skróty klawiszowe dla najczęściej wykonywanych działań. "
|
||||
"Wbudowana pomoc skrótów klawiszowych zawiera pełną listę. Można ją otworzyć "
|
||||
"przez menu programu: <guiseq><gui>Geary</gui><gui>Skróty klawiszowe</gui></"
|
||||
"guiseq> lub za pomocą poniższych skrótów."
|
||||
"Wbudowana pomoc zawiera ich pełną listę. Aby ją otworzyć, wybierz <gui style="
|
||||
"\"menuitem\">Skróty klawiszowe</gui> z menu programu na pasku narzędziowym "
|
||||
"głównego okna lub użyj poniższych skrótów."
|
||||
|
||||
#. (itstool) path: page/p
|
||||
#: C/shortcuts.page:18
|
||||
#. (itstool) path: section/p
|
||||
#: C/shortcuts.page:19
|
||||
msgid ""
|
||||
"The following keyboard shortcuts can be used to access on-line help from "
|
||||
"Geary:"
|
||||
|
|
@ -1007,28 +1053,49 @@ msgstr ""
|
|||
"Geary:"
|
||||
|
||||
#. (itstool) path: td/p
|
||||
#: C/shortcuts.page:22
|
||||
msgid "Display this User Manual"
|
||||
msgstr "Wyświetlenie tego podręcznika użytkownika"
|
||||
#: C/shortcuts.page:23
|
||||
msgid "Display this online help manual"
|
||||
msgstr "Wyświetlenie tego podręcznika użytkownika online"
|
||||
|
||||
#. (itstool) path: td/p
|
||||
#: C/shortcuts.page:23
|
||||
#: C/shortcuts.page:24
|
||||
msgid "<keyseq><key>F1</key></keyseq>"
|
||||
msgstr "<keyseq><key>F1</key></keyseq>"
|
||||
|
||||
#. (itstool) path: td/p
|
||||
#: C/shortcuts.page:26
|
||||
#: C/shortcuts.page:27
|
||||
msgid "Display all keyboard shortcuts"
|
||||
msgstr "Wyświetlenie wszystkich skrótów klawiszowych"
|
||||
|
||||
#. (itstool) path: td/p
|
||||
#: C/shortcuts.page:27
|
||||
#: C/shortcuts.page:28
|
||||
msgid "<keyseq><key>Ctrl</key><key>?</key></keyseq>"
|
||||
msgstr "<keyseq><key>Ctrl</key><key>?</key></keyseq>"
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/shortcuts.page:36
|
||||
msgid "Single key shortcuts"
|
||||
msgstr "Skróty jednoklawiszowe"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/shortcuts.page:38
|
||||
msgid ""
|
||||
"<keyseq><key>Ctrl</key><key>?</key></keyseq> or <keyseq><key>Ctrl</"
|
||||
"key><key>F1</key></keyseq>"
|
||||
"You can enable keyboard shortcuts for email actions that do not require "
|
||||
"pressing <key>Ctrl</key>. These match the shortcuts used by GMail. See <link "
|
||||
"xref=\"preferences\"/> for details."
|
||||
msgstr ""
|
||||
"<keyseq><key>Ctrl</key><key>?</key></keyseq> lub <keyseq><key>Ctrl</"
|
||||
"key><key>F1</key></keyseq>"
|
||||
"Można włączyć skróty klawiszowe do działań na wiadomościach, które nie "
|
||||
"wymagają naciśnięcia klawisza <key>Ctrl</key>. Są one takie same, jak skróty "
|
||||
"w serwisie Gmail. <link xref=\"preferences\"/> zawiera więcej informacji."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/shortcuts.page:42
|
||||
msgid ""
|
||||
"The full list of single key shortcuts enabled by this preference can be "
|
||||
"found via the keyboard shortcuts help, above."
|
||||
msgstr ""
|
||||
"W powyższej pomocy skrótów klawiszowych można znaleźć pełną listę "
|
||||
"jednoklawiszowych skrótów włączanych przez tę preferencję."
|
||||
|
||||
#. (itstool) path: page/title
|
||||
#: C/star.page:10
|
||||
|
|
@ -1099,90 +1166,179 @@ msgstr ""
|
|||
"jako przeczytane</gui> z rozwijanego menu."
|
||||
|
||||
#. (itstool) path: page/title
|
||||
#: C/write.page:9
|
||||
msgid "Write a message"
|
||||
msgstr "Pisanie wiadomości"
|
||||
#: C/write.page:7
|
||||
msgid "Writing new email and replying"
|
||||
msgstr "Pisanie nowych wiadomości i odpowiadanie"
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:12
|
||||
#: C/write.page:10
|
||||
msgid "Composing and replying"
|
||||
msgstr "Tworzenie wiadomości i odpowiadanie"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:13
|
||||
#: C/write.page:12
|
||||
msgid ""
|
||||
"To compose a new message in Geary, press the <gui>New Message</gui> button "
|
||||
"on the toolbar."
|
||||
"To start a new email conversation, click the <gui style=\"button\">Compose</"
|
||||
"gui> button on the toolbar. Type the email address of the people to receive "
|
||||
"the message in the <gui style=\"input\">To</gui> text field, and a subject "
|
||||
"line in the <gui style=\"input\">Subject</gui> field. You can then type your "
|
||||
"message in the text area below these. Once the message is read to send, "
|
||||
"click <gui style=\"button\">Send</gui> or type <keyseq><key>Ctrl</"
|
||||
"key><key>Enter</key></keyseq> to send the message."
|
||||
msgstr ""
|
||||
"Aby napisać nową wiadomość, kliknij przycisk <gui>Nowa wiadomość</gui> na "
|
||||
"pasku narzędziowym."
|
||||
"Aby rozpocząć nowy wątek e-mail, kliknij przycisk <gui style=\"button"
|
||||
"\">Utwórz wiadomość</gui> na pasku narzędziowym. Wpisz adres e-mail osób, "
|
||||
"które mają otrzymać wiadomość w polu <gui style=\"input\">Do</gui> oraz "
|
||||
"temat w polu <gui style=\"input\">Temat</gui>. Następnie można napisać swoją "
|
||||
"wiadomość w polu tekstowym poniżej. Kiedy wiadomość jest gotowa do wysłania, "
|
||||
"kliknij przycisk <gui style=\"button\">Wyślij</gui> lub naciśnij klawisze "
|
||||
"<keyseq><key>Ctrl</key><key>Enter</key></keyseq>, aby ją wysłać."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:16
|
||||
msgid ""
|
||||
"To reply to a message, open the message menu in the upper right corner of "
|
||||
"the message and choose <gui>Reply</gui>, <gui>Reply All</gui> or "
|
||||
"<gui>Forward</gui>. You can also reply to the last message in a conversation "
|
||||
"via the <gui>Reply</gui>, <gui>Reply All</gui> or <gui>Forward</gui> buttons "
|
||||
"on the toolbar."
|
||||
msgstr ""
|
||||
"Aby odpowiedzieć na wiadomość, otwórz menu wiadomości w górnym prawym rogu "
|
||||
"wiadomości i kliknij <gui>Odpowiedz</gui>, <gui>Odpowiedz wszystkim</gui> "
|
||||
"lub <gui>Przekaż</gui>. Można także odpowiadać na ostatnią wiadomość w wątku "
|
||||
"za pomocą przycisków <gui>Odpowiedz</gui>, <gui>Odpowiedz wszystkim</gui> "
|
||||
"i <gui>Przekaż</gui> na pasku narzędziowym."
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:21
|
||||
msgid "Features"
|
||||
msgstr "Funkcje"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#. (itstool) path: note/title
|
||||
#: C/write.page:23
|
||||
msgid "Undoing sending"
|
||||
msgstr "Cofanie wysyłania"
|
||||
|
||||
#. (itstool) path: note/p
|
||||
#: C/write.page:24
|
||||
msgid ""
|
||||
"Geary's email composer lets you adjust the font, size and color of text. You "
|
||||
"can also insert hyperlinks into messages."
|
||||
"When sending an email, Geary will wait 5 seconds before delivering the "
|
||||
"message. During this time, you will be able to click <gui style=\"button"
|
||||
"\">Undo</gui> on the pop-up notification that appears or type "
|
||||
"<keyseq><key>Ctrl</key><key>Z</key></keyseq> to re-open the email, and make "
|
||||
"more changes to it."
|
||||
msgstr ""
|
||||
"Okno tworzenia wiadomości umożliwia dostosowanie czcionki, rozmiaru i koloru "
|
||||
"tekstu. Można także wstawiać odnośniki do wiadomości."
|
||||
"Przed wysyłaniem wiadomości program poczeka 5 sekund. W tym czasie można "
|
||||
"kliknąć przycisk <gui style=\"button\">Cofnij</gui> na wyskakującym "
|
||||
"powiadomieniu lub nacisnąć klawisze <keyseq><key>Ctrl</key><key>Z</key></"
|
||||
"keyseq>, aby ponownie otworzyć wiadomość i wprowadzić do niej zmiany."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:25
|
||||
msgid ""
|
||||
"Geary can also send plain text messages. In the drop-down menu, check or "
|
||||
"uncheck \"Rich Text\" to toggle between plain text and rich text mode."
|
||||
msgstr ""
|
||||
"Można także wysyłać wiadomości w zwykłym tekście. Zaznacz lub odznacz „Tekst "
|
||||
"sformatowany” w rozwijanym menu, aby przełączyć między zwykłym "
|
||||
"a sformatowanym tekstem."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:28
|
||||
msgid ""
|
||||
"You can attach a file to a message you're writing in either of these ways:"
|
||||
msgstr "Można dołączyć plik do pisanej wiadomości na trzy różne sposoby:"
|
||||
|
||||
#. (itstool) path: item/p
|
||||
#: C/write.page:30
|
||||
msgid ""
|
||||
"Press the <gui>Attach File</gui> button at the lower left of the composer "
|
||||
"window, then select a file to attach."
|
||||
msgstr ""
|
||||
"Kliknij przycisk <gui>Załącz plik</gui> w dolnym lewym rogu okna tworzenia "
|
||||
"wiadomości, a następnie wybierz plik do dołączenia."
|
||||
|
||||
#. (itstool) path: item/p
|
||||
#: C/write.page:32
|
||||
msgid ""
|
||||
"Drag the file from the Nautilus file manager to the composer window, and "
|
||||
"drop it either on the text fields at the top of the window or on the toolbar "
|
||||
"at the bottom."
|
||||
"When entering an email address in the <gui style=\"input\">To</gui> and <gui "
|
||||
"style=\"input\">Cc</gui> fields, Geary will provide suggestions from your "
|
||||
"desktop address book and from previously sent and received email messages. "
|
||||
"To choose one of these suggestions, simply click on it. In addition, <gui "
|
||||
"style=\"input\">Bcc</gui> and <gui style=\"input\">Reply-to</gui> fields can "
|
||||
"be shown by selecting <gui style=\"menu\">Show extended fields</gui> from "
|
||||
"the formatting toolbar menu."
|
||||
msgstr ""
|
||||
"Przeciągnij plik z menedżera plików Nautilus do pól tekstowych na górze okna "
|
||||
"tworzenia wiadomości lub do paska narzędziowego na dole."
|
||||
"Podczas wpisywania adresu e-mail w polu <gui style=\"input\">Do</gui> i <gui "
|
||||
"style=\"input\">Do wiadomości</gui> będą dostarczane podpowiedzi z książki "
|
||||
"adresowej użytkownika i z poprzednio wysłanych i otrzymanych wiadomości. Aby "
|
||||
"wybrać jedną z tych podpowiedzi, kliknij ją. Można także wyświetlić pola "
|
||||
"<gui style=\"input\">Ukryty do wiadomości</gui> i <gui style=\"input"
|
||||
"\">Odpowiedź do</gui> wybierając <gui style=\"menu\">Rozszerzone pola</gui> "
|
||||
"z menu paska narzędziowego formatowania."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:36
|
||||
#: C/write.page:41
|
||||
msgid ""
|
||||
"To reply to the currently selected conversation, click one of the <gui style="
|
||||
"\"button\">Reply</gui>, <gui style=\"button\">Reply All</gui> or <gui style="
|
||||
"\"button\">Forward</gui> toolbar buttons. This will open a new reply or "
|
||||
"forwarded email composer for the latest message in the conversation."
|
||||
msgstr ""
|
||||
"Aby odpowiedzieć na obecnie zaznaczony wątek, kliknij przycisk <gui style="
|
||||
"\"button\">Odpowiedz</gui>, <gui style=\"button\">Odpowiedz wszystkim</gui> "
|
||||
"lub <gui style=\"button\">Przekaż</gui> na pasku narzędziowym. Otworzy to "
|
||||
"okno tworzenia nowej odpowiedzi lub przekazywanej wiadomości dla najnowszej "
|
||||
"wiadomości w wątku."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:47
|
||||
msgid ""
|
||||
"When replying, the message being replied to will be quoted and copied into "
|
||||
"the footer of the new reply. This can be deleted before typing a reply by "
|
||||
"pressing <key>Backspace</key>. Alternatively, text can be selectively quoted "
|
||||
"by selecting the desired text in a message and clicking <gui style=\"button"
|
||||
"\">Reply</gui> or <gui style=\"button\">Reply All</gui>, only the selected "
|
||||
"text will be quoted."
|
||||
msgstr ""
|
||||
"Podczas odpowiadania oryginalna wiadomość będzie cytowana i skopiowana do "
|
||||
"stopki nowej odpowiedzi. Można ją usunąć przed napisaniem odpowiedzi "
|
||||
"naciskając klawisz <key>Backspace</key>. Można także wybiórczo zacytować "
|
||||
"tekst zaznaczając wybraną jego część w wiadomości i klikając przycisk <gui "
|
||||
"style=\"button\">Odpowiedz</gui> lub <gui style=\"button\">Odpowiedz "
|
||||
"wszystkim</gui>."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:55
|
||||
msgid ""
|
||||
"To reply to a specific email message, open the message menu in the top "
|
||||
"corner of the message and choose <gui>Reply</gui>, <gui>Reply All</gui> or "
|
||||
"<gui>Forward</gui>."
|
||||
msgstr ""
|
||||
"Aby odpowiedzieć na konkretną wiadomość, otwórz menu wiadomości w górnym "
|
||||
"rogu wiadomości i kliknij <gui>Odpowiedz</gui>, <gui>Odpowiedz wszystkim</"
|
||||
"gui> lub <gui>Przekaż</gui>."
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:61
|
||||
msgid "Text formatting, images and attachments"
|
||||
msgstr "Formatowanie tekstu, obrazy i załączniki"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:63
|
||||
msgid ""
|
||||
"Geary's email composer lets you use text styles such as <em>bold</em> and "
|
||||
"<em>italic</em>, indent text to quote it and links to web pages. Simply "
|
||||
"select the text and click the appropriate button on the formatting toolbar."
|
||||
msgstr ""
|
||||
"Okno tworzenia wiadomości umożliwia formatowanie tekstu, np. <em>pogrubienie "
|
||||
"go</em> czy <em>pochylenie</em>, tworzenie wcięć, aby cytować i wstawianie "
|
||||
"odnośników do stron internetowych. Zaznacz tekst i kliknij odpowiedni "
|
||||
"przycisk na pasku narzędziowym formatowania."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:68
|
||||
msgid ""
|
||||
"Bulleted and numbered lists can be inserted or removed by clicking the <gui "
|
||||
"style=\"button\">Bulleted list</gui> and <gui style=\"button\">Numbered "
|
||||
"list</gui> buttons on the formatting toolbar. The level of indentation of "
|
||||
"list items can be adjusted using the <gui style=\"button\">Indent</gui> and "
|
||||
"<gui style=\"button\">Un-indent</gui> formatting toolbar buttons."
|
||||
msgstr ""
|
||||
"Można wstawiać wypunktowane i numerowane listy klikając przycisk <gui style="
|
||||
"\"button\">Lista wypunktowana</gui> lub <gui style=\"button\">Lista "
|
||||
"numerowana</gui> na pasku narzędziowym formatowania. Można dostosowywać "
|
||||
"poziom wcięć elementów listy za pomocą przycisków <gui style=\"button"
|
||||
"\">Dodaj wcięcie</gui> i <gui style=\"button\">Usuń wcięcie</gui>."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:75
|
||||
msgid ""
|
||||
"Images can be inserted into rich text messages by clicking the <gui style="
|
||||
"\"button\">Insert Image</gui> button on the formatting toolbar and selecting "
|
||||
"the image to attach, by dragging an image from the <gui>Files</gui> "
|
||||
"application into the email body and then dropping it, or by pasting an image "
|
||||
"that has been copied to the clipboard from another application."
|
||||
msgstr ""
|
||||
"Można wstawiać obrazy do wiadomości z tekstem sformatowanym klikając "
|
||||
"przycisk <gui style=\"button\">Wstaw obraz</gui> na pasku narzędziowym "
|
||||
"formatowania i wybierając obraz do załączenia przeciągając go z programu "
|
||||
"<gui>Pliki</gui> do treści wiadomości lub wklejając obraz skopiowany do "
|
||||
"schowka z innego programu."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:82
|
||||
msgid ""
|
||||
"Documents, music, videos, and other files can be attached to the email by "
|
||||
"clicking the <gui style=\"button\">Attach File</gui> button at the top of "
|
||||
"the composer window and selecting the document to attach, or by dragging a "
|
||||
"file from the <gui>Files</gui> application to the composer window, and "
|
||||
"dropping it either on the text fields at the top of the window or on the "
|
||||
"toolbar at the bottom."
|
||||
msgstr ""
|
||||
"Dokumenty, pliki dźwiękowe, wideo i inne mogą być załączane do wiadomości "
|
||||
"klikając przycisk <gui style=\"button\">Załącz plik</gui> na górze okna "
|
||||
"tworzenia wiadomości i wybierając dokument do załączenia przeciągając go "
|
||||
"z programu <gui>Pliki</gui> do okna tworzenia wiadomości w polu tekstowym na "
|
||||
"górze okna lub na pasku narzędziowym na dole."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:90
|
||||
msgid ""
|
||||
"A number of keyboard shortcuts are available in the composer; see <link xref="
|
||||
"\"shortcuts\"/> for details."
|
||||
|
|
@ -1191,41 +1347,129 @@ msgstr ""
|
|||
"\"shortcuts\"/> zawiera więcej informacji."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:38
|
||||
#: C/write.page:93
|
||||
msgid ""
|
||||
"You may specify a signature to be inserted into the composer in the <link "
|
||||
"xref=\"accounts\"/> dialog."
|
||||
"You may specify a signature to be inserted into the footer of email in the "
|
||||
"composer via the <link xref=\"accounts\"/> dialog."
|
||||
msgstr ""
|
||||
"Można określić podpis do wstawiania do okna tworzenia wiadomości w oknie "
|
||||
"<link xref=\"accounts\"/>."
|
||||
"Można określić podpis do wstawiania do stopki wiadomości w oknie tworzenia "
|
||||
"wiadomości w oknie <link xref=\"accounts\"/>."
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:43
|
||||
msgid "Drafts"
|
||||
msgstr "Szkice"
|
||||
#: C/write.page:98
|
||||
msgid "Checking spelling"
|
||||
msgstr "Sprawdzanie pisowni"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:45
|
||||
#: C/write.page:100
|
||||
msgid ""
|
||||
"Geary supports spell-checking your composed email in one or more languages, "
|
||||
"as you type. To enable spell-checking, first ensure your computer has spell-"
|
||||
"check dictionaries installed for the desired languages. Consult your "
|
||||
"computer's help to determine how to install dictionaries if not present."
|
||||
msgstr ""
|
||||
"Obsługiwane jest sprawdzanie pisowni tworzonej wiadomości w jednym lub "
|
||||
"więcej języków podczas jej pisania. Aby włączyć tę funkcję, najpierw upewnij "
|
||||
"się, że komputer ma zainstalowane słowniki dla wybranych języków. Jeśli ich "
|
||||
"nie ma, znajdź instrukcję ich instalacji w pomocy komputera."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:106
|
||||
msgid ""
|
||||
"To select languages for spell-checking, click the <gui style=\"button"
|
||||
"\">Spell check</gui> button on the formatting toolbar, and the language "
|
||||
"selection popover will appear. Click on a language in the list to toggle it "
|
||||
"on or off, and click the <gui style=\"button\">-</gui> button to remove it "
|
||||
"from the list. If a language does not appear in the list, search for it by "
|
||||
"typing its name in the search box, then click the <gui style=\"button\">+</"
|
||||
"gui> button to add it."
|
||||
msgstr ""
|
||||
"Aby wybrać języki do sprawdzania pisowni, kliknij przycisk <gui style="
|
||||
"\"button\">Sprawdzanie pisowni</gui> na pasku narzędziowym formatowania, "
|
||||
"a pojawi się okno wyboru języka. Kliknij język na liście, aby go włączyć lub "
|
||||
"wyłączyć lub przycisk <gui style=\"button\">-</gui>, aby usunąć go z listy. "
|
||||
"Jeśli języka nie ma na liście, znajdź go wpisując jego nazwę w polu "
|
||||
"wyszukiwania, a następnie kliknij przycisk <gui style=\"button\">+</gui>, "
|
||||
"aby go dodać."
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:117
|
||||
msgid "Saving drafts and restoring discarded messages"
|
||||
msgstr "Zapisywanie szkiców i przywracanie odrzuconych wiadomości"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:119
|
||||
msgid ""
|
||||
"For mail servers that support drafts, Geary will automatically save the "
|
||||
"message as you type. If you close the composer without sending, Geary will "
|
||||
"prompt you to keep the draft or to discard it."
|
||||
"message as you type on the server after a short delay."
|
||||
msgstr ""
|
||||
"W przypadku serwerów pocztowych obsługujących szkice wiadomość jest "
|
||||
"automatycznie zapisywana w trakcie jej pisania. Jeśli okno tworzenia "
|
||||
"wiadomości jest zamykane bez wysłania, zostanie wyświetlone pytanie, czy "
|
||||
"zachować lub odrzucić szkic."
|
||||
"automatycznie zapisywana w trakcie jej pisania po krótkim opóźnieniu."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:48
|
||||
#: C/write.page:123
|
||||
msgid ""
|
||||
"To edit an existing draft, select the Drafts folder in the folder list, "
|
||||
"select the message, and click \"Edit Draft\" in the message viewer."
|
||||
"To edit an existing draft, select the <gui>Drafts</gui> folder in the folder "
|
||||
"list, select the message, and click \"Edit Draft\" in the conversation "
|
||||
"viewer."
|
||||
msgstr ""
|
||||
"Aby zmodyfikować istniejący szkic, wybierz katalog Szkice z listy katalogów, "
|
||||
"wybierz wiadomość i kliknij „Modyfikuj szkic” w przeglądarce wiadomości."
|
||||
"Aby zmodyfikować istniejący szkic, wybierz katalog <gui>Szkice</gui> z listy "
|
||||
"katalogów, wybierz wiadomość i kliknij „Modyfikuj szkic” w przeglądarce "
|
||||
"wątków."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:51
|
||||
msgid "Geary deletes the draft when you send the message."
|
||||
msgstr "Szkic jest usuwany po wysłaniu wiadomości."
|
||||
#: C/write.page:127
|
||||
msgid "Geary will delete the draft when you send the message."
|
||||
msgstr "Szkic zostanie usunięty po wysłaniu wiadomości."
|
||||
|
||||
#. (itstool) path: note/p
|
||||
#: C/write.page:130
|
||||
msgid ""
|
||||
"If you save or discard a composed email, you can re-open it by clicking <gui "
|
||||
"style=\"button\">Undo</gui> on the pop-up notification that appears or by "
|
||||
"typing <keyseq><key>Ctrl</key><key>Z</key></keyseq>. The ability to restore "
|
||||
"a saved or discarded composer will be remain for up to 30 minutes. After "
|
||||
"that you will need to re-open the message via the <gui>Drafts</gui> folder, "
|
||||
"if present."
|
||||
msgstr ""
|
||||
"Po zapisaniu lub odrzuceniu tworzonej wiadomości można otworzyć ją ponownie "
|
||||
"klikając przycisk <gui style=\"button\">Cofnij</gui> na wyskakującym "
|
||||
"powiadomieniu lub naciskając klawisze <keyseq><key>Ctrl</key><key>Z</key></"
|
||||
"keyseq>. Przywrócenie zapisanej lub odrzuconej wiadomości może być możliwe "
|
||||
"do 30 minut. Po tym czasie trzeba będzie ponownie otworzyć wiadomość za "
|
||||
"pomocą katalogu <gui>Szkice</gui>, jeśli się tam znajduje."
|
||||
|
||||
#. (itstool) path: section/title
|
||||
#: C/write.page:141
|
||||
msgid "Plain text messages"
|
||||
msgstr "Wiadomości w zwykłym tekście"
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:143
|
||||
msgid ""
|
||||
"Geary can also send plain text messages. In the drop-down menu, check or "
|
||||
"uncheck <gui style=\"menu\">Rich Text</gui> to toggle between plain text and "
|
||||
"rich text mode. Plain text mode is useful when sending email to mailing "
|
||||
"lists that prohibit rich text (HTML) messages, or when sending email to "
|
||||
"people that do no use modern clients like Geary."
|
||||
msgstr ""
|
||||
"Można także wysyłać wiadomości w zwykłym tekście. W rozwijanym menu zaznacz "
|
||||
"lub odznacz opcję <gui style=\"menu\">Tekst sformatowany</gui>, aby "
|
||||
"przełączyć między trybem zwykłego tekstu a trybem tekstu sformatowanego. "
|
||||
"Tryb zwykłego tekstu jest przydatny podczas wysyłania wiadomości na listy "
|
||||
"dyskusyjne zabraniające wiadomości z tekstem sformatowanym (HTML) lub "
|
||||
"podczas wysyłania wiadomości do osób, które nie korzystają z nowoczesnego "
|
||||
"klienta poczty, takiego jak Geary."
|
||||
|
||||
#. (itstool) path: section/p
|
||||
#: C/write.page:150
|
||||
msgid ""
|
||||
"In plain text mode, text will be automatically wrapped using soft line "
|
||||
"breaks so that it is no longer than 74 characters wide, and indented text "
|
||||
"will be wrapped and quoted using a “>” character for each level of "
|
||||
"quoting."
|
||||
msgstr ""
|
||||
"W trybie zwykłego tekstu tekst będzie automatycznie zawijany za pomocą "
|
||||
"miękkich podziałów wiersza, aby nie był on szerszy niż 74 znaki, a wcięty "
|
||||
"tekst będzie zawijany i cytowany za pomocą znaku „>” dla każdego poziomu "
|
||||
"cytowania."
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ target_webkit = '2.24'
|
|||
|
||||
# Primary deps
|
||||
glib = dependency('glib-2.0', version: '>=' + target_glib)
|
||||
gmime = dependency('gmime-2.6', version: '>= 2.6.17')
|
||||
gmime = dependency('gmime-3.0', version: '>= 3.2.4')
|
||||
gtk = dependency('gtk+-3.0', version: '>=' + target_gtk)
|
||||
sqlite = dependency('sqlite3', version: '>= 3.24')
|
||||
webkit2gtk = dependency('webkit2gtk-4.0', version: '>=' + target_webkit)
|
||||
|
|
|
|||
|
|
@ -167,8 +167,7 @@
|
|||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/jstedfast/gmime.git",
|
||||
"branch": "gmime-2-6"
|
||||
"url": "https://github.com/jstedfast/gmime.git"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -175,7 +175,6 @@ modules:
|
|||
sources:
|
||||
- type: git
|
||||
url: https://github.com/jstedfast/gmime.git
|
||||
branch: gmime-2-6
|
||||
|
||||
# Geary dependency
|
||||
- name: libhandy
|
||||
|
|
|
|||
12
po/ca.po
12
po/ca.po
|
|
@ -61,7 +61,7 @@ msgstr "Email;Correu electrònic;Correu;"
|
|||
#. Translators: The development team's name
|
||||
#: desktop/org.gnome.Geary.appdata.xml.in:13
|
||||
msgid "Geary Development Team"
|
||||
msgstr "Geary Development Team"
|
||||
msgstr "Equip de desenvolupament del Geary"
|
||||
|
||||
#: desktop/org.gnome.Geary.appdata.xml.in:17
|
||||
msgid ""
|
||||
|
|
@ -306,13 +306,13 @@ msgstr "El darrer registre de la mida de la finestra separada de l'editor."
|
|||
|
||||
#: desktop/org.gnome.Geary.gschema.xml:128
|
||||
msgid "Whether we migrated the old settings"
|
||||
msgstr "Si hem d'emigrar els paràmetres antics"
|
||||
msgstr "Si hem de migrar els paràmetres antics"
|
||||
|
||||
#: desktop/org.gnome.Geary.gschema.xml:129
|
||||
msgid ""
|
||||
"False to check for the old “org.yorba.geary”-schema and copy its values."
|
||||
msgstr ""
|
||||
"Fals per comprovar l’antic «org.yorba.geary» -schema i copiar els seus "
|
||||
"Fals per comprovar l'antic «org.yorba.geary» -schema i copiar els seus "
|
||||
"valors."
|
||||
|
||||
#. Translators: In-app notification label, when
|
||||
|
|
@ -2371,8 +2371,8 @@ msgid ""
|
|||
"Removing an account will remove it from Geary and delete locally cached "
|
||||
"email data from your computer, but not from your service provider."
|
||||
msgstr ""
|
||||
"L’eliminació d’un compte l’eliminarà del Geary i esborrarà les dades del "
|
||||
"correu a la memòria cau local de l’ordinador, però no del proveïdor de "
|
||||
"L'eliminació d’un compte l'eliminarà del Geary i esborrarà les dades del "
|
||||
"correu a la memòria cau local de l'ordinador, però no del proveïdor de "
|
||||
"serveis."
|
||||
|
||||
#: ui/accounts_editor_remove_pane.ui:122
|
||||
|
|
@ -2778,7 +2778,7 @@ msgstr "Però en realitat va a:"
|
|||
|
||||
#: ui/conversation-message.ui:723
|
||||
msgid "The link appears to go to:"
|
||||
msgstr "L'enllaç apareix en anar a:"
|
||||
msgstr "L'enllaç sembla anar a:"
|
||||
|
||||
#: ui/conversation-message.ui:735
|
||||
msgid "Deceptive link found"
|
||||
|
|
|
|||
298
po/tr.po
298
po/tr.po
|
|
@ -16,8 +16,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: geary.mainline\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/geary/issues\n"
|
||||
"POT-Creation-Date: 2019-11-28 14:38+0000\n"
|
||||
"PO-Revision-Date: 2019-12-02 19:23+0300\n"
|
||||
"POT-Creation-Date: 2019-12-17 23:56+0000\n"
|
||||
"PO-Revision-Date: 2019-12-27 16:09+0300\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\n"
|
||||
|
|
@ -218,8 +218,6 @@ msgid "True if we should display a short preview of each message."
|
|||
msgstr "Her iletinin kısa bir ön izlemesini göstermemiz gerekiyorsa doğru."
|
||||
|
||||
#: desktop/org.gnome.Geary.gschema.xml:68
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Single-key shortcuts"
|
||||
msgid "Use single key shortcuts"
|
||||
msgstr "Tek tuşlu kısayolları kullan"
|
||||
|
||||
|
|
@ -307,7 +305,6 @@ msgid "The last recorded size of the detached composer window."
|
|||
msgstr "Ayrılmış oluşturucu penceresinin kaydedilen son boyutu."
|
||||
|
||||
#: desktop/org.gnome.Geary.gschema.xml:126
|
||||
#| msgid "Error sending email"
|
||||
msgid "Undo sending email delay"
|
||||
msgstr "Eposta göndermeyi geri alma gecikmesi"
|
||||
|
||||
|
|
@ -599,12 +596,12 @@ msgid_plural "%d days back"
|
|||
msgstr[0] "%d gün öncesinden"
|
||||
|
||||
#: src/client/accounts/accounts-editor-list-pane.vala:248
|
||||
#: src/client/application/application-main-window.vala:2021
|
||||
#: src/client/application/application-main-window.vala:2037
|
||||
msgid "Undo"
|
||||
msgstr "Geri Al"
|
||||
|
||||
#: src/client/accounts/accounts-editor-list-pane.vala:257
|
||||
#: src/client/application/application-main-window.vala:2011
|
||||
#: src/client/application/application-main-window.vala:2027
|
||||
msgid "Redo"
|
||||
msgstr "Yinele"
|
||||
|
||||
|
|
@ -877,7 +874,6 @@ msgid "Perform a graceful quit"
|
|||
msgstr "Hoş bir çıkış gerçekleştir"
|
||||
|
||||
#: src/client/application/application-client.vala:134
|
||||
#| msgid "Use %s to open a new composer window"
|
||||
msgid "Open a new window"
|
||||
msgstr "Yeni pencere aç"
|
||||
|
||||
|
|
@ -961,36 +957,36 @@ msgstr ""
|
|||
|
||||
#. / Warning printed to the console when a deprecated
|
||||
#. / command line option is used.
|
||||
#: src/client/application/application-client.vala:913
|
||||
#: src/client/application/application-client.vala:938
|
||||
msgid "The `--hidden` option is deprecated and will be removed in the future."
|
||||
msgstr "`--hidden` seçeneği terk edilmiştir ve gelecekte kaldırılacaktır."
|
||||
|
||||
#. / Command line warning, string substitution
|
||||
#. / is the given argument
|
||||
#: src/client/application/application-client.vala:946
|
||||
#: src/client/application/application-client.vala:971
|
||||
#, c-format
|
||||
msgid "Unrecognised program argument: “%s”"
|
||||
msgstr "Tanınmayan program argümanı: “%s”"
|
||||
|
||||
#. / Notification title.
|
||||
#: src/client/application/application-controller.vala:477
|
||||
#: src/client/application/application-controller.vala:457
|
||||
#, c-format
|
||||
msgid "A problem occurred sending email for %s"
|
||||
msgstr "%s için e-posta gönderilirken sorun oluştu"
|
||||
|
||||
#. / Notification body
|
||||
#: src/client/application/application-controller.vala:481
|
||||
#: src/client/application/application-controller.vala:461
|
||||
msgid "Email will not be sent until re-connected"
|
||||
msgstr "Yeniden bağlanana dek e-posta gönderilmeyecek"
|
||||
|
||||
#. / Translators: Label for in-app notification
|
||||
#: src/client/application/application-controller.vala:587
|
||||
#: src/client/application/application-controller.vala:567
|
||||
msgid "Conversation marked"
|
||||
msgid_plural "Conversations marked"
|
||||
msgstr[0] "Konuşma(lar) imlendi"
|
||||
|
||||
#. / Translators: Label for in-app notification
|
||||
#: src/client/application/application-controller.vala:593
|
||||
#: src/client/application/application-controller.vala:573
|
||||
msgid "Conversation un-marked"
|
||||
msgid_plural "Conversations un-marked"
|
||||
msgstr[0] "Konuşmaların imi kaldırıldı"
|
||||
|
|
@ -998,8 +994,8 @@ msgstr[0] "Konuşmaların imi kaldırıldı"
|
|||
#. / Translators: Label for in-app
|
||||
#. / notification. String substitution is the name
|
||||
#. / of the destination folder.
|
||||
#: src/client/application/application-controller.vala:619
|
||||
#: src/client/application/application-controller.vala:703
|
||||
#: src/client/application/application-controller.vala:599
|
||||
#: src/client/application/application-controller.vala:683
|
||||
#, c-format
|
||||
msgid "Conversation moved to %s"
|
||||
msgid_plural "Conversations moved to %s"
|
||||
|
|
@ -1010,29 +1006,29 @@ msgstr[0] "Konuşma(lar) şuraya taşındı: %s"
|
|||
#. / of the source folder.
|
||||
#. / Translators: Label for in-app notification. String
|
||||
#. / substitution is the name of the destination folder.
|
||||
#: src/client/application/application-controller.vala:627
|
||||
#: src/client/application/application-controller.vala:649
|
||||
#: src/client/application/application-controller.vala:607
|
||||
#: src/client/application/application-controller.vala:629
|
||||
#, c-format
|
||||
msgid "Conversation restored to %s"
|
||||
msgid_plural "Conversations restored to %s"
|
||||
msgstr[0] "Konuşma(lar) şuraya geri yüklendi: %s"
|
||||
|
||||
#. / Translators: Label for in-app notification.
|
||||
#: src/client/application/application-controller.vala:670
|
||||
#: src/client/application/application-controller.vala:650
|
||||
msgid "Conversation archived"
|
||||
msgid_plural "Conversations archived"
|
||||
msgstr[0] "Konuşma(lar) arşivlendi"
|
||||
|
||||
#. / Translators: Label for in-app notification. String
|
||||
#. / substitution is the name of the destination folder.
|
||||
#: src/client/application/application-controller.vala:726
|
||||
#: src/client/application/application-controller.vala:706
|
||||
#, c-format
|
||||
msgid "Message restored to %s"
|
||||
msgid_plural "Messages restored to %s"
|
||||
msgstr[0] "İleti(ler) şuraya geri yüklendi: %s"
|
||||
|
||||
#. / Translators: Label for in-app notification.
|
||||
#: src/client/application/application-controller.vala:747
|
||||
#: src/client/application/application-controller.vala:727
|
||||
msgid "Message archived"
|
||||
msgid_plural "Messages archived"
|
||||
msgstr[0] "İleti(ler) arşivlendi"
|
||||
|
|
@ -1040,7 +1036,7 @@ msgstr[0] "İleti(ler) arşivlendi"
|
|||
#. / Translators: Label for in-app
|
||||
#. / notification. String substitution is the name
|
||||
#. / of the destination folder.
|
||||
#: src/client/application/application-controller.vala:782
|
||||
#: src/client/application/application-controller.vala:762
|
||||
#, c-format
|
||||
msgid "Message moved to %s"
|
||||
msgid_plural "Messages moved to %s"
|
||||
|
|
@ -1049,7 +1045,7 @@ msgstr[0] "İleti(ler) şuraya taşındı: %s"
|
|||
#. / Translators: Label for in-app
|
||||
#. / notification. String substitution is the name
|
||||
#. / of the destination folder.
|
||||
#: src/client/application/application-controller.vala:810
|
||||
#: src/client/application/application-controller.vala:790
|
||||
#, c-format
|
||||
msgid "Conversation labelled as %s"
|
||||
msgid_plural "Conversations labelled as %s"
|
||||
|
|
@ -1058,18 +1054,18 @@ msgstr[0] "Konuşma(lar) %s olarak etiketlendi"
|
|||
#. / Translators: Label for in-app
|
||||
#. / notification. String substitution is the name
|
||||
#. / of the destination folder.
|
||||
#: src/client/application/application-controller.vala:818
|
||||
#: src/client/application/application-controller.vala:798
|
||||
#, c-format
|
||||
msgid "Conversation un-labelled as %s"
|
||||
msgid_plural "Conversations un-labelled as %s"
|
||||
msgstr[0] "Konuşma(lar) %s olarak etiketlenmedi"
|
||||
|
||||
#: src/client/application/application-controller.vala:1238
|
||||
#: src/client/application/application-controller.vala:1221
|
||||
#, c-format
|
||||
msgid "Unable to open the database for %s"
|
||||
msgstr "%s için veri tabanı açılamadı"
|
||||
|
||||
#: src/client/application/application-controller.vala:1239
|
||||
#: src/client/application/application-controller.vala:1222
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error opening the local mail database for this account. This is "
|
||||
|
|
@ -1093,20 +1089,20 @@ msgstr ""
|
|||
"Veri tabanının yeniden inşa edilmesi tüm yerel e-postaları ve eklerini yok "
|
||||
"edecektir.<b>Sizin sunucunuzdaki postalar etkilenmeyecektir.</b>"
|
||||
|
||||
#: src/client/application/application-controller.vala:1241
|
||||
#: src/client/application/application-controller.vala:1224
|
||||
msgid "_Rebuild"
|
||||
msgstr "_Yeniden oluştur"
|
||||
|
||||
#: src/client/application/application-controller.vala:1241
|
||||
#: src/client/application/application-controller.vala:1224
|
||||
msgid "E_xit"
|
||||
msgstr "Ç_ık"
|
||||
|
||||
#: src/client/application/application-controller.vala:1251
|
||||
#: src/client/application/application-controller.vala:1234
|
||||
#, c-format
|
||||
msgid "Unable to rebuild database for “%s”"
|
||||
msgstr "“%s” için veri tabanı yeniden oluşturulamadı"
|
||||
|
||||
#: src/client/application/application-controller.vala:1252
|
||||
#: src/client/application/application-controller.vala:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Error during rebuild:\n"
|
||||
|
|
@ -1119,34 +1115,34 @@ msgstr ""
|
|||
|
||||
#. / Translators: The label for an in-app notification. The
|
||||
#. / string substitution is a list of recipients of the email.
|
||||
#: src/client/application/application-controller.vala:1575
|
||||
#: src/client/application/application-controller.vala:1558
|
||||
#, c-format
|
||||
msgid "Email sent to %s"
|
||||
msgstr "Şun(lar)a eposta gönderildi: %s"
|
||||
|
||||
#. / Translators: The label for an in-app notification. The
|
||||
#. / string substitution is a list of recipients of the email.
|
||||
#: src/client/application/application-controller.vala:2648
|
||||
#: src/client/application/application-controller.vala:2636
|
||||
#, c-format
|
||||
msgid "Email to %s queued for delivery"
|
||||
msgstr "Şun(lar)a gidecek eposta iletim sırasında: %s"
|
||||
|
||||
#. / Translators: The label for an in-app notification. The
|
||||
#. / string substitution is a list of recipients of the email.
|
||||
#: src/client/application/application-controller.vala:2713
|
||||
#: src/client/application/application-controller.vala:2701
|
||||
#, c-format
|
||||
msgid "Email to %s saved"
|
||||
msgstr "Şun(lar)a gidecek eposta kaydedildi: %s"
|
||||
|
||||
#. / Translators: A label for an in-app notification.
|
||||
#: src/client/application/application-controller.vala:2728
|
||||
#: src/client/application/application-controller.vala:2786
|
||||
#: src/client/application/application-controller.vala:2716
|
||||
#: src/client/application/application-controller.vala:2774
|
||||
msgid "Composer could not be restored"
|
||||
msgstr "Oluşturucu kurtarılamadı"
|
||||
|
||||
#. / Translators: The label for an in-app notification. The
|
||||
#. / string substitution is a list of recipients of the email.
|
||||
#: src/client/application/application-controller.vala:2771
|
||||
#: src/client/application/application-controller.vala:2759
|
||||
#, c-format
|
||||
msgid "Email to %s discarded"
|
||||
msgstr "Şun(lar)a gidecek eposta gözden çıkarıldı: %s"
|
||||
|
|
@ -1159,46 +1155,46 @@ msgstr "Şun(lar)a gidecek eposta gözden çıkarıldı: %s"
|
|||
msgid "%s — %s"
|
||||
msgstr "%s — %s"
|
||||
|
||||
#: src/client/application/application-main-window.vala:949
|
||||
#: src/client/application/application-main-window.vala:961
|
||||
msgid "Labels"
|
||||
msgstr "Etiketler"
|
||||
|
||||
#. / Translators: Primary text for a confirmation dialog
|
||||
#: src/client/application/application-main-window.vala:1281
|
||||
#: src/client/application/application-main-window.vala:1297
|
||||
msgid "Do you want to permanently delete this conversation?"
|
||||
msgid_plural "Do you want to permanently delete these conversations?"
|
||||
msgstr[0] "Bu konuşmaları kalıcı olarak silmek istiyor musunuz?"
|
||||
|
||||
#: src/client/application/application-main-window.vala:1286
|
||||
#: src/client/application/application-main-window.vala:1301
|
||||
#: src/client/application/application-main-window.vala:1302
|
||||
#: src/client/application/application-main-window.vala:1317
|
||||
msgid "Delete"
|
||||
msgstr "Sil"
|
||||
|
||||
#. / Translators: Primary text for a confirmation dialog
|
||||
#: src/client/application/application-main-window.vala:1296
|
||||
#: src/client/application/application-main-window.vala:1312
|
||||
msgid "Do you want to permanently delete this message?"
|
||||
msgid_plural "Do you want to permanently delete these messages?"
|
||||
msgstr[0] "Bu ileti(ler)i kalıcı olarak silmek istiyor musunuz?"
|
||||
|
||||
#: src/client/application/application-main-window.vala:1309
|
||||
#: src/client/application/application-main-window.vala:1325
|
||||
#, c-format
|
||||
msgid "Empty all email from your %s folder?"
|
||||
msgstr "%s klasörünüzdeki tüm e-postaları boşalt?"
|
||||
|
||||
#: src/client/application/application-main-window.vala:1312
|
||||
#: src/client/application/application-main-window.vala:1328
|
||||
msgid "This removes the email from Geary and your email server."
|
||||
msgstr "Bu işlem e-postayı Geary’den ve e-posta sunucunuzdan kaldırır."
|
||||
|
||||
#: src/client/application/application-main-window.vala:1313
|
||||
#: src/client/application/application-main-window.vala:1329
|
||||
msgid "This cannot be undone."
|
||||
msgstr "Bu geri alınamaz."
|
||||
|
||||
#: src/client/application/application-main-window.vala:1314
|
||||
#: src/client/application/application-main-window.vala:1330
|
||||
#, c-format
|
||||
msgid "Empty %s"
|
||||
msgstr "%s boşalt"
|
||||
|
||||
#: src/client/application/application-main-window.vala:1644
|
||||
#: src/client/application/application-main-window.vala:1660
|
||||
#, c-format
|
||||
msgid "%s (%d)"
|
||||
msgstr "%s (%d)"
|
||||
|
|
@ -1209,7 +1205,7 @@ msgstr "%s (%d)"
|
|||
#. Document (100.9MB)
|
||||
#. / In the composer, the filename followed by its filesize, i.e. "notes.txt (1.12KB)"
|
||||
#: src/client/components/components-attachment-pane.vala:107
|
||||
#: src/client/composer/composer-widget.vala:1796
|
||||
#: src/client/composer/composer-widget.vala:1815
|
||||
#, c-format
|
||||
msgid "%s (%s)"
|
||||
msgstr "%s (%s)"
|
||||
|
|
@ -1237,7 +1233,7 @@ msgstr "İnceleyici"
|
|||
#. / Translators: Title for Inspector logs pane
|
||||
#. / Translators: Title for problem report dialog logs pane
|
||||
#: src/client/components/components-inspector.vala:87
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:101
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:102
|
||||
msgid "Logs"
|
||||
msgstr "Günlükler"
|
||||
|
||||
|
|
@ -1245,21 +1241,21 @@ msgstr "Günlükler"
|
|||
#. / Translators: Title for problem report system information
|
||||
#. / pane
|
||||
#: src/client/components/components-inspector.vala:91
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:104
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:105
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#. Button label for saving problem report information
|
||||
#: src/client/components/components-inspector.vala:208
|
||||
#: src/client/components/components-inspector.vala:211
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:220
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:223
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:221
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:224
|
||||
#: ui/problem-details-dialog.ui:42
|
||||
msgid "Save As"
|
||||
msgstr "Farklı Kaydet"
|
||||
|
||||
#: src/client/components/components-inspector.vala:212
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:224
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:225
|
||||
#: ui/accounts_editor_servers_pane.ui:17
|
||||
msgid "Cancel"
|
||||
msgstr "İptal Et"
|
||||
|
|
@ -1281,8 +1277,6 @@ msgstr "_Üç bölmeli görünümü kullan"
|
|||
|
||||
#. / Translators: Preferences label
|
||||
#: src/client/components/components-preferences-window.vala:73
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Single-key shortcuts"
|
||||
msgid "Use _single key email shortcuts"
|
||||
msgstr "_Tek tuşlu eposta kısayolları kullan"
|
||||
|
||||
|
|
@ -1304,6 +1298,27 @@ msgstr "Kapatıldığında yeni postayı _gözetle"
|
|||
msgid "Geary will keep running after all windows are closed"
|
||||
msgstr "Geary, tüm pencereler kapatıldıktan sonra çalışmayı sürdürecek"
|
||||
|
||||
#. / Translators: Search entry placeholder text
|
||||
#: src/client/components/components-search-bar.vala:12
|
||||
#: src/client/folder-list/folder-list-search-branch.vala:53
|
||||
#: src/engine/api/geary-special-folder-type.vala:51
|
||||
msgid "Search"
|
||||
msgstr "Ara"
|
||||
|
||||
#. / Translators: Search entry tooltip
|
||||
#: src/client/components/components-search-bar.vala:32
|
||||
#| msgid "Search all mail in account for keywords (Ctrl+S)"
|
||||
msgid "Search all mail in account for keywords"
|
||||
msgstr "Anahtar sözcükleri hesaptaki tüm postalarda ara"
|
||||
|
||||
#. / Translators: Search entry placeholder, string
|
||||
#. / replacement is the name of an account
|
||||
#: src/client/components/components-search-bar.vala:81
|
||||
#: src/client/folder-list/folder-list-search-branch.vala:54
|
||||
#, c-format
|
||||
msgid "Search %s account"
|
||||
msgstr "%s hesabını ara"
|
||||
|
||||
#. Translators: Tooltip used when an entry requires a valid
|
||||
#. email address to be entered, but one is not provided.
|
||||
#: src/client/components/components-validator.vala:390
|
||||
|
|
@ -1429,28 +1444,6 @@ msgstr "Hatayla ilgili teknik ayrıntıları gör"
|
|||
msgid "_Retry"
|
||||
msgstr "_Yeniden dene"
|
||||
|
||||
#: src/client/components/search-bar.vala:8
|
||||
#: src/client/folder-list/folder-list-search-branch.vala:53
|
||||
#: src/engine/api/geary-special-folder-type.vala:51
|
||||
msgid "Search"
|
||||
msgstr "Ara"
|
||||
|
||||
#. Search entry.
|
||||
#: src/client/components/search-bar.vala:24
|
||||
msgid "Search all mail in account for keywords (Ctrl+S)"
|
||||
msgstr "Anahtar sözcükler için hesaptaki tüm postaları ara (Ctrl+S)"
|
||||
|
||||
#: src/client/components/search-bar.vala:88
|
||||
#, c-format
|
||||
msgid "Indexing %s account"
|
||||
msgstr "%s hesabı dizinleniyor"
|
||||
|
||||
#: src/client/components/search-bar.vala:119
|
||||
#: src/client/folder-list/folder-list-search-branch.vala:54
|
||||
#, c-format
|
||||
msgid "Search %s account"
|
||||
msgstr "%s hesabını ara"
|
||||
|
||||
#. / Displayed in the space-limited status bar while a message is in the process of being sent.
|
||||
#: src/client/components/status-bar.vala:26
|
||||
msgid "Sending…"
|
||||
|
|
@ -1542,19 +1535,19 @@ msgstr "Geçersiz e-posta adresi"
|
|||
msgid "New Message"
|
||||
msgstr "Yeni İleti"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:211
|
||||
#: src/client/composer/composer-widget.vala:210
|
||||
msgid "Saved"
|
||||
msgstr "Kaydedildi"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:212
|
||||
#: src/client/composer/composer-widget.vala:211
|
||||
msgid "Saving"
|
||||
msgstr "Kaydediliyor"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:213
|
||||
#: src/client/composer/composer-widget.vala:212
|
||||
msgid "Error saving"
|
||||
msgstr "Kaydedilirken hata"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:214
|
||||
#: src/client/composer/composer-widget.vala:213
|
||||
msgid "Press Backspace to delete quote"
|
||||
msgstr "Alıntıyı silmek için Geri tuşuna basın"
|
||||
|
||||
|
|
@ -1563,7 +1556,7 @@ msgstr "Alıntıyı silmek için Geri tuşuna basın"
|
|||
#. checking, include all variants of each word. No spaces are
|
||||
#. allowed. The words will be converted to lower case based on
|
||||
#. locale and English versions included automatically.
|
||||
#: src/client/composer/composer-widget.vala:230
|
||||
#: src/client/composer/composer-widget.vala:229
|
||||
msgid ""
|
||||
"attach|attaching|attaches|attachment|attachments|attached|enclose|enclosed|"
|
||||
"enclosing|encloses|enclosure|enclosures"
|
||||
|
|
@ -1574,90 +1567,90 @@ msgstr ""
|
|||
#. Translators: This dialog text is displayed to the
|
||||
#. user when closing a composer where the options are
|
||||
#. Keep, Discard or Cancel.
|
||||
#: src/client/composer/composer-widget.vala:798
|
||||
#: src/client/composer/composer-widget.vala:814
|
||||
msgid "Do you want to keep or discard this draft message?"
|
||||
msgstr "Bu iletiyi saklamak mı yoksa gözden çıkarmak mı istersiniz?"
|
||||
|
||||
#. Translators: This dialog text is displayed to the
|
||||
#. user when closing a composer where the options are
|
||||
#. only Discard or Cancel.
|
||||
#: src/client/composer/composer-widget.vala:824
|
||||
#: src/client/composer/composer-widget.vala:840
|
||||
msgid "Do you want to discard this draft message?"
|
||||
msgstr "Bu taslak iletiyi gözden çıkarmak istiyor musunuz?"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1465
|
||||
#: src/client/composer/composer-widget.vala:1484
|
||||
msgid "Send message with an empty subject and body?"
|
||||
msgstr "İleti konusu ve gövdesi olmadan gönderilsin mi?"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1467
|
||||
#: src/client/composer/composer-widget.vala:1486
|
||||
msgid "Send message with an empty subject?"
|
||||
msgstr "İleti konusu olmadan gönderilsin mi?"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1469
|
||||
#: src/client/composer/composer-widget.vala:1488
|
||||
msgid "Send message with an empty body?"
|
||||
msgstr "İleti, ileti gövdesi olmadan gönderilsin mi?"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1478
|
||||
#: src/client/composer/composer-widget.vala:1497
|
||||
msgid "Send message without an attachment?"
|
||||
msgstr "İleti eki olmadan gönderilsin mi?"
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1788
|
||||
#: src/client/composer/composer-widget.vala:1807
|
||||
#, c-format
|
||||
msgid "“%s” already attached for delivery."
|
||||
msgstr "“%s” gönderim için zaten eklendi."
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1818
|
||||
#: src/client/composer/composer-widget.vala:1868
|
||||
#: src/client/composer/composer-widget.vala:1837
|
||||
#: src/client/composer/composer-widget.vala:1887
|
||||
#, c-format
|
||||
msgid "“%s” is an empty file."
|
||||
msgstr "“%s” boş bir dosya."
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1856
|
||||
#: src/client/composer/composer-widget.vala:1875
|
||||
#, c-format
|
||||
msgid "“%s” could not be found."
|
||||
msgstr "“%s” bulunamadı."
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1862
|
||||
#: src/client/composer/composer-widget.vala:1881
|
||||
#, c-format
|
||||
msgid "“%s” is a folder."
|
||||
msgstr "“%s” bir klasör."
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1881
|
||||
#: src/client/composer/composer-widget.vala:1900
|
||||
#, c-format
|
||||
msgid "“%s” could not be opened for reading."
|
||||
msgstr "“%s” okuma için açılamadı."
|
||||
|
||||
#: src/client/composer/composer-widget.vala:1889
|
||||
#: src/client/composer/composer-widget.vala:1908
|
||||
msgid "Cannot add attachment"
|
||||
msgstr "Eklenti eklenemiyor"
|
||||
|
||||
#. Translators: Human-readable version of the RFC 822 To header
|
||||
#: src/client/composer/composer-widget.vala:1946
|
||||
#: src/client/composer/composer-widget.vala:1965
|
||||
#: src/client/conversation-viewer/conversation-email.vala:559
|
||||
#: src/client/util/util-email.vala:235 ui/conversation-message.ui:312
|
||||
msgid "To:"
|
||||
msgstr "Kime:"
|
||||
|
||||
#. Translators: Human-readable version of the RFC 822 CC header
|
||||
#: src/client/composer/composer-widget.vala:1952
|
||||
#: src/client/composer/composer-widget.vala:1971
|
||||
#: src/client/conversation-viewer/conversation-email.vala:564
|
||||
#: src/client/util/util-email.vala:240 ui/conversation-message.ui:357
|
||||
msgid "Cc:"
|
||||
msgstr "Cc:"
|
||||
|
||||
#. Translators: Human-readable version of the RFC 822 BCC header
|
||||
#: src/client/composer/composer-widget.vala:1958
|
||||
#: src/client/composer/composer-widget.vala:1977
|
||||
#: src/client/conversation-viewer/conversation-email.vala:569
|
||||
#: ui/conversation-message.ui:402
|
||||
msgid "Bcc:"
|
||||
msgstr "Bcc:"
|
||||
|
||||
#. Translators: Human-readable version of the RFC 822 Reply-To header
|
||||
#: src/client/composer/composer-widget.vala:1964
|
||||
#: src/client/composer/composer-widget.vala:1983
|
||||
msgid "Reply-To: "
|
||||
msgstr "Yanıtla: "
|
||||
|
||||
#: src/client/composer/composer-widget.vala:2144
|
||||
#: src/client/composer/composer-widget.vala:2172
|
||||
msgid "Select Color"
|
||||
msgstr "Renk Seç"
|
||||
|
||||
|
|
@ -1666,20 +1659,20 @@ msgstr "Renk Seç"
|
|||
#. printf argument will be the alternate email address,
|
||||
#. and the second will be the account's primary email
|
||||
#. address.
|
||||
#: src/client/composer/composer-widget.vala:2336
|
||||
#: src/client/composer/composer-widget.vala:2364
|
||||
#, c-format
|
||||
msgid "%1$s via %2$s"
|
||||
msgstr "%2$s aracılığıyla %1$s"
|
||||
|
||||
#. Composer label (with mnemonic underscore) for the account selector
|
||||
#. when choosing what address to send a message from.
|
||||
#: src/client/composer/composer-widget.vala:2392
|
||||
#: src/client/composer/composer-widget.vala:2420
|
||||
msgid "_From:"
|
||||
msgstr "_Gönderen:"
|
||||
|
||||
#. Translators: This is the name of the file chooser filter
|
||||
#. when inserting an image in the composer.
|
||||
#: src/client/composer/composer-widget.vala:2695
|
||||
#: src/client/composer/composer-widget.vala:2723
|
||||
msgid "Images"
|
||||
msgstr "Resimler"
|
||||
|
||||
|
|
@ -1765,7 +1758,7 @@ msgstr "Tarih:"
|
|||
msgid "Subject:"
|
||||
msgstr "Konu:"
|
||||
|
||||
#: src/client/conversation-viewer/conversation-message.vala:132
|
||||
#: src/client/conversation-viewer/conversation-message.vala:128
|
||||
msgid "This email address may have been forged"
|
||||
msgstr "Bu e-posta adresi taklit edilmiş olabilir"
|
||||
|
||||
|
|
@ -1773,20 +1766,20 @@ msgstr "Bu e-posta adresi taklit edilmiş olabilir"
|
|||
#. in load_contacts.
|
||||
#. Translators: This is displayed in place of the from address
|
||||
#. when the message has no from address.
|
||||
#: src/client/conversation-viewer/conversation-message.vala:469
|
||||
#: src/client/conversation-viewer/conversation-message.vala:465
|
||||
msgid "No sender"
|
||||
msgstr "Gönderen yok"
|
||||
|
||||
#. Translators: This separates multiple 'from'
|
||||
#. addresses in the compact header for a message.
|
||||
#: src/client/conversation-viewer/conversation-message.vala:963
|
||||
#: src/client/conversation-viewer/conversation-message.vala:959
|
||||
msgid ", "
|
||||
msgstr ", "
|
||||
|
||||
#. Translators: This string is used as the HTML IMG ALT
|
||||
#. attribute value when displaying an inline image in an email
|
||||
#. that did not specify a file name. E.g. <IMG ALT="Image" ...
|
||||
#: src/client/conversation-viewer/conversation-message.vala:1085
|
||||
#: src/client/conversation-viewer/conversation-message.vala:1081
|
||||
msgid "Image"
|
||||
msgstr "Resim"
|
||||
|
||||
|
|
@ -1920,7 +1913,7 @@ msgstr "Sunucunun sertifikası işlenirken bir hata oluştu"
|
|||
#. / Translators: Title for problem report dialog error
|
||||
#. / information pane
|
||||
#. Dialog title for displaying technical details of a problem. Same as the button that invokes it.
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:99
|
||||
#: src/client/dialogs/dialogs-problem-details-dialog.vala:100
|
||||
#: ui/problem-details-dialog.ui:12
|
||||
msgid "Details"
|
||||
msgstr "Ayrıntılar"
|
||||
|
|
@ -2207,7 +2200,7 @@ msgstr "Arşiv"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:73
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:130
|
||||
msgctxt "Search operator"
|
||||
msgid "attachment"
|
||||
msgstr "ek"
|
||||
|
|
@ -2220,7 +2213,7 @@ msgstr "ek"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:82
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:139
|
||||
msgctxt "Search operator"
|
||||
msgid "bcc"
|
||||
msgstr "bcc"
|
||||
|
|
@ -2232,7 +2225,7 @@ msgstr "bcc"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:90
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:147
|
||||
msgctxt "Search operator"
|
||||
msgid "body"
|
||||
msgstr "gövde"
|
||||
|
|
@ -2245,7 +2238,7 @@ msgstr "gövde"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:99
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:156
|
||||
msgctxt "Search operator"
|
||||
msgid "cc"
|
||||
msgstr "cc"
|
||||
|
|
@ -2258,7 +2251,7 @@ msgstr "cc"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:108
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:165
|
||||
msgctxt "Search operator"
|
||||
msgid "from"
|
||||
msgstr "kimden"
|
||||
|
|
@ -2270,7 +2263,7 @@ msgstr "kimden"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:116
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:173
|
||||
msgctxt "Search operator"
|
||||
msgid "is"
|
||||
msgstr "im"
|
||||
|
|
@ -2282,7 +2275,7 @@ msgstr "im"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary
|
||||
#. User Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:124
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:181
|
||||
msgctxt "Search operator"
|
||||
msgid "subject"
|
||||
msgstr "konu"
|
||||
|
|
@ -2295,7 +2288,7 @@ msgstr "konu"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:133
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:190
|
||||
msgctxt "Search operator"
|
||||
msgid "to"
|
||||
msgstr "kime"
|
||||
|
|
@ -2308,7 +2301,7 @@ msgstr "kime"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:154
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:211
|
||||
msgctxt "Search operator value - mail addressed to the user"
|
||||
msgid "me"
|
||||
msgstr "ben"
|
||||
|
|
@ -2320,7 +2313,7 @@ msgstr "ben"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:166
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:223
|
||||
msgctxt "Search operator value - mail sent by the user"
|
||||
msgid "me"
|
||||
msgstr "ben"
|
||||
|
|
@ -2332,7 +2325,7 @@ msgstr "ben"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:178
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:235
|
||||
msgctxt "'is:' search operator value"
|
||||
msgid "read"
|
||||
msgstr "okundu"
|
||||
|
|
@ -2345,7 +2338,7 @@ msgstr "okundu"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:189
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:246
|
||||
msgctxt "'is:' search operator value"
|
||||
msgid "starred"
|
||||
msgstr "yıldızlı"
|
||||
|
|
@ -2357,7 +2350,7 @@ msgstr "yıldızlı"
|
|||
#. or similar to combine words into one), should be short, and
|
||||
#. also match the translation in "search.page" of the Geary User
|
||||
#. Guide.
|
||||
#: src/engine/imap-db/search/imap-db-search-query.vala:199
|
||||
#: src/engine/imap-db/imap-db-search-query.vala:256
|
||||
msgctxt "'is:' search operator value"
|
||||
msgid "unread"
|
||||
msgstr "okunmadı"
|
||||
|
|
@ -2366,7 +2359,7 @@ msgstr "okunmadı"
|
|||
#. Draft mailbox. Separate names using a vertical bar and
|
||||
#. put the most common localized name to the front for the
|
||||
#. default. English names do not need to be included.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:923
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:882
|
||||
msgid "Drafts | Draft"
|
||||
msgstr "Taslaklar | Taslak"
|
||||
|
||||
|
|
@ -2374,14 +2367,14 @@ msgstr "Taslaklar | Taslak"
|
|||
#. Sent mailbox. Separate names using a vertical bar and
|
||||
#. put the most common localized name to the front for the
|
||||
#. default. English names do not need to be included.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:932
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:891
|
||||
msgid "Sent | Sent Mail | Sent Email | Sent E-Mail"
|
||||
msgstr ""
|
||||
"Gönderilmiş | Gönderilmiş Posta | Gönderilmiş Eposta | Gönderilmiş E-Posta"
|
||||
|
||||
#. The localised name(s) of the Sent folder name as used
|
||||
#. by MS Outlook/Exchange.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:937
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:896
|
||||
msgctxt "Outlook localised name"
|
||||
msgid "Sent Items"
|
||||
msgstr "Gönderilmiş Ögeler"
|
||||
|
|
@ -2390,7 +2383,7 @@ msgstr "Gönderilmiş Ögeler"
|
|||
#. Spam mailbox. Separate names using a vertical bar and
|
||||
#. put the most common localized name to the front for the
|
||||
#. default. English names do not need to be included.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:947
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:906
|
||||
msgid ""
|
||||
"Junk | Spam | Junk Mail | Junk Email | Junk E-Mail | Bulk Mail | Bulk Email "
|
||||
"| Bulk E-Mail"
|
||||
|
|
@ -2402,13 +2395,13 @@ msgstr ""
|
|||
#. Trash mailbox. Separate names using a vertical bar and
|
||||
#. put the most common localized name to the front for the
|
||||
#. default. English names do not need to be included.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:957
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:916
|
||||
msgid "Trash | Rubbish | Rubbish Bin"
|
||||
msgstr "Çöp | Çöp | Çöp Kutusu"
|
||||
|
||||
#. The localised name(s) of the Trash folder name as used
|
||||
#. by MS Outlook/Exchange.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:962
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:921
|
||||
msgctxt "Outlook localised name"
|
||||
msgid "Deleted Items"
|
||||
msgstr "Silinen Ögeler"
|
||||
|
|
@ -2417,7 +2410,7 @@ msgstr "Silinen Ögeler"
|
|||
#. Archive mailbox. Separate names using a vertical bar
|
||||
#. and put the most common localized name to the front for
|
||||
#. the default. English names do not need to be included.
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:972
|
||||
#: src/engine/imap-engine/imap-engine-generic-account.vala:931
|
||||
msgid "Archive | Archives"
|
||||
msgstr "Arşiv | Arşivler"
|
||||
|
||||
|
|
@ -2604,18 +2597,14 @@ msgid "_Don’t Trust This Server"
|
|||
msgstr "Bu Sunucuya Güven_me"
|
||||
|
||||
#: ui/composer-headerbar.ui:19 ui/composer-headerbar.ui:176
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Detach composer window"
|
||||
msgid "Detach the composer from the window"
|
||||
msgstr "Oluşturucuyu pencereden ayır"
|
||||
|
||||
#: ui/composer-headerbar.ui:59 ui/composer-headerbar.ui:84
|
||||
#| msgid "Attach File"
|
||||
msgid "Attach a file"
|
||||
msgstr "Dosya ekle"
|
||||
|
||||
#: ui/composer-headerbar.ui:108
|
||||
#| msgid "Include Original Attachments"
|
||||
msgid "Add original attachments"
|
||||
msgstr "Özgün ekleri ekle"
|
||||
|
||||
|
|
@ -2758,75 +2747,54 @@ msgid "To add them as attachments"
|
|||
msgstr "Onları ek olarak eklemek için"
|
||||
|
||||
#: ui/composer-widget.ui:353
|
||||
#| msgid "Undo last edit (Ctrl+Z)"
|
||||
msgid "Undo last edit"
|
||||
msgstr "Son düzenlemeyi geri al"
|
||||
|
||||
#: ui/composer-widget.ui:377
|
||||
#| msgid "Undo last edit (Ctrl+Z)"
|
||||
msgid "Redo last edit"
|
||||
msgstr "Son düzenlemeyi yinele"
|
||||
|
||||
#: ui/composer-widget.ui:415
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Bold text"
|
||||
msgid "Bold text"
|
||||
msgstr "Kalın yazı"
|
||||
|
||||
#: ui/composer-widget.ui:439
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Italicize text"
|
||||
msgid "Italic text"
|
||||
msgstr "Eğik metin"
|
||||
|
||||
#: ui/composer-widget.ui:463
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Underline text"
|
||||
msgid "Underline text"
|
||||
msgstr "Metnin altını çiz"
|
||||
|
||||
#: ui/composer-widget.ui:487
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Strike text"
|
||||
msgid "Strikethrough text"
|
||||
msgstr "Çizgili metin"
|
||||
|
||||
#: ui/composer-widget.ui:525
|
||||
#| msgid "Insert unordered list"
|
||||
msgid "Insert bulleted list"
|
||||
msgstr "Sırasız liste yerleştir"
|
||||
|
||||
#: ui/composer-widget.ui:549
|
||||
#| msgid "Insert unordered list"
|
||||
msgid "Insert numbered list"
|
||||
msgstr "Sıralı liste yerleştir"
|
||||
|
||||
#: ui/composer-widget.ui:587
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Unquote text"
|
||||
msgid "Indent or quote text"
|
||||
msgstr "Girintile veya metin alıntıla"
|
||||
|
||||
#: ui/composer-widget.ui:611
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Unquote text"
|
||||
msgid "Un-indent or unquote text"
|
||||
msgstr "Girintiyi veya alıntıyı kaldır"
|
||||
|
||||
#: ui/composer-widget.ui:649
|
||||
#| msgid "Insert or update selection link (Ctrl+L)"
|
||||
msgid "Insert or update text link"
|
||||
msgstr "Metin bağlantısı ekle veya güncelle"
|
||||
|
||||
#: ui/composer-widget.ui:673
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Insert an image"
|
||||
msgid "Insert an image"
|
||||
msgstr "Resim yerleştir"
|
||||
|
||||
#: ui/composer-widget.ui:707
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Remove formatting"
|
||||
msgid "Remove text formatting"
|
||||
msgstr "Metin biçimlendirmeyi kaldır"
|
||||
|
||||
|
|
@ -3161,43 +3129,31 @@ msgid "Mark/un-mark starred"
|
|||
msgstr "Yıldızla/Yıldızı kaldır"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:59 ui/gtk/help-overlay.ui:297
|
||||
#| msgid "Archive conversation"
|
||||
#| msgid_plural "Archive conversations"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Archive conversations"
|
||||
msgstr "Konuşmaları arşivle"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:66 ui/gtk/help-overlay.ui:304
|
||||
#| msgid "Move conversation"
|
||||
#| msgid_plural "Move conversations"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Move conversations"
|
||||
msgstr "Konuşmaları taşı"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:73 ui/gtk/help-overlay.ui:311
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Label conversation"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Label conversations"
|
||||
msgstr "Konuşmaları etiketle"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:80
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Trash conversation"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Trash conversations"
|
||||
msgstr "Konuşmaları çöpe at"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:87 ui/gtk/help-overlay.ui:318
|
||||
#| msgid "Mark conversation"
|
||||
#| msgid_plural "Mark conversations"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Junk conversations"
|
||||
msgstr "Konuşmaları gereksize taşı"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:95 ui/gtk/help-overlay.ui:325
|
||||
#| msgid "Delete conversation"
|
||||
#| msgid_plural "Delete conversations"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Delete conversations"
|
||||
msgstr "Konuşmaları sil"
|
||||
|
|
@ -3268,14 +3224,11 @@ msgid "Show keyboard shortcuts"
|
|||
msgstr "Klavye kısayollarını göster"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:206
|
||||
#| msgid "Use %s to open a new composer window"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Open a new window"
|
||||
msgstr "Yeni pencere aç"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:213
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Close current window"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Close the current window"
|
||||
msgstr "Geçerli pencereyi kapat"
|
||||
|
|
@ -3291,15 +3244,11 @@ msgid "Keyboard navigation"
|
|||
msgstr "Klavye gezinimi"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:233
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Focus the previous pane"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Go to next/previous pane"
|
||||
msgstr "Sonraki/önceki bölmeye git"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:241
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Select the conversation up"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Select next/previous conversation"
|
||||
msgstr "Sonraki/önceki konuşmayı seç"
|
||||
|
|
@ -3320,15 +3269,11 @@ msgid "Reply to sender "
|
|||
msgstr "Göndereni yanıtla "
|
||||
|
||||
#: ui/gtk/help-overlay.ui:332
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Find in current conversation"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Find in current conversations"
|
||||
msgstr "Geçerli konuşmalarda bul"
|
||||
|
||||
#: ui/gtk/help-overlay.ui:339
|
||||
#| msgctxt "shortcut window"
|
||||
#| msgid "Select the conversation up"
|
||||
msgctxt "shortcut window"
|
||||
msgid "Select next/previous conversations"
|
||||
msgstr "Sonraki/önceki konuşmaları seç"
|
||||
|
|
@ -3505,6 +3450,9 @@ msgstr "_Kimlik Doğrula"
|
|||
msgid "Geary update in progress…"
|
||||
msgstr "Geary güncellemesi sürüyor…"
|
||||
|
||||
#~ msgid "Indexing %s account"
|
||||
#~ msgstr "%s hesabı dizinleniyor"
|
||||
|
||||
#~ msgid "Successfully sent mail to %s."
|
||||
#~ msgstr "Posta, %s adresine başarıyla gönderildi."
|
||||
|
||||
|
|
|
|||
|
|
@ -317,12 +317,15 @@ public class Composer.Widget : Gtk.EventBox, Geary.BaseInterface {
|
|||
private Gee.ArrayList<FromAddressMap> from_list = new Gee.ArrayList<FromAddressMap>();
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.EventBox to_box;
|
||||
private Gtk.Box to_box;
|
||||
[GtkChild]
|
||||
private Gtk.Label to_label;
|
||||
private EmailEntry to_entry;
|
||||
private Components.EntryUndo to_undo;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.Revealer extended_fields_revealer;
|
||||
|
||||
[GtkChild]
|
||||
private Gtk.EventBox cc_box;
|
||||
[GtkChild]
|
||||
|
|
@ -508,7 +511,7 @@ public class Composer.Widget : Gtk.EventBox, Geary.BaseInterface {
|
|||
|
||||
this.to_entry = new EmailEntry(this);
|
||||
this.to_entry.changed.connect(on_envelope_changed);
|
||||
this.to_box.add(to_entry);
|
||||
this.to_box.pack_start(to_entry, true, true);
|
||||
this.to_label.set_mnemonic_widget(this.to_entry);
|
||||
this.to_undo = new Components.EntryUndo(this.to_entry);
|
||||
|
||||
|
|
@ -530,8 +533,6 @@ public class Composer.Widget : Gtk.EventBox, Geary.BaseInterface {
|
|||
this.reply_to_label.set_mnemonic_widget(this.reply_to_entry);
|
||||
this.reply_to_undo = new Components.EntryUndo(this.reply_to_entry);
|
||||
|
||||
this.to_entry.margin_top = this.cc_entry.margin_top = this.bcc_entry.margin_top = this.reply_to_entry.margin_top = 6;
|
||||
|
||||
this.subject_undo = new Components.EntryUndo(this.subject_entry);
|
||||
this.subject_spell_entry = Gspell.Entry.get_from_gtk_entry(
|
||||
this.subject_entry
|
||||
|
|
@ -1202,7 +1203,7 @@ public class Composer.Widget : Gtk.EventBox, Geary.BaseInterface {
|
|||
if (visible) {
|
||||
int height = hidden_on_attachment_drag_over.get_allocated_height();
|
||||
this.hidden_on_attachment_drag_over.remove(this.hidden_on_attachment_drag_over_child);
|
||||
this.visible_on_attachment_drag_over.add(this.visible_on_attachment_drag_over_child);
|
||||
this.visible_on_attachment_drag_over.pack_start(this.visible_on_attachment_drag_over_child, true, true);
|
||||
this.visible_on_attachment_drag_over.set_size_request(-1, height);
|
||||
} else {
|
||||
this.hidden_on_attachment_drag_over.add(this.hidden_on_attachment_drag_over_child);
|
||||
|
|
@ -2138,10 +2139,7 @@ public class Composer.Widget : Gtk.EventBox, Geary.BaseInterface {
|
|||
GLib.Variant? new_state) {
|
||||
bool show_extended = new_state.get_boolean();
|
||||
action.set_state(show_extended);
|
||||
this.bcc_label.visible =
|
||||
this.bcc_entry.visible =
|
||||
this.reply_to_label.visible =
|
||||
this.reply_to_entry.visible = show_extended;
|
||||
this.extended_fields_revealer.reveal_child = show_extended;
|
||||
|
||||
if (show_extended && this.current_mode == INLINE_COMPACT) {
|
||||
set_mode(INLINE);
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ public class Composer.Window : Gtk.ApplicationWindow, Container {
|
|||
|
||||
this.composer.update_window_title();
|
||||
if (application.config.desktop_environment == UNITY) {
|
||||
composer.header.show_close_button = false;
|
||||
composer.embed_header();
|
||||
} else {
|
||||
composer.header.show_close_button = true;
|
||||
set_titlebar(this.composer.header);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ private class Geary.ImapDB.Attachment : Geary.Attachment {
|
|||
target_stream
|
||||
);
|
||||
stream = new GMime.StreamBuffer(
|
||||
stream, GMime.StreamBufferMode.BLOCK_WRITE
|
||||
stream, GMime.StreamBufferMode.WRITE
|
||||
);
|
||||
|
||||
part.write_to_stream(stream, RFC822.Part.EncodingConversion.NONE);
|
||||
|
|
|
|||
|
|
@ -325,7 +325,6 @@ geary_engine_dependencies = [
|
|||
gmime,
|
||||
libmath,
|
||||
libxml,
|
||||
libytnef,
|
||||
posix,
|
||||
sqlite
|
||||
]
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ public class Geary.Mime.ContentDisposition : Geary.BaseObject {
|
|||
out is_unknown);
|
||||
is_unknown_disposition_type = is_unknown;
|
||||
original_disposition_type_string = content_disposition.get_disposition();
|
||||
params = new ContentParameters.from_gmime(content_disposition.get_params());
|
||||
params = new ContentParameters.from_gmime(content_disposition.get_parameters());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,11 +51,13 @@ public class Geary.Mime.ContentParameters : BaseObject {
|
|||
}
|
||||
}
|
||||
|
||||
internal ContentParameters.from_gmime(GMime.Param? gmime_param) {
|
||||
internal ContentParameters.from_gmime(GMime.ParamList? gmime_params) {
|
||||
Gee.Map<string,string> params = new Gee.HashMap<string,string>();
|
||||
while (gmime_param != null) {
|
||||
params.set(gmime_param.get_name(), gmime_param.get_value());
|
||||
gmime_param = gmime_param.get_next();
|
||||
if (gmime_params != null) {
|
||||
for (int i = 0; i < gmime_params.length(); i++) {
|
||||
GMime.Param gmime_param = gmime_params.get_parameter_at(i);
|
||||
params.set(gmime_param.get_name(), gmime_param.get_value());
|
||||
}
|
||||
}
|
||||
this(params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,10 @@ public class Geary.Mime.ContentType : Geary.BaseObject {
|
|||
if (!str.contains("/"))
|
||||
throw new MimeError.PARSE("Invalid MIME Content-Type: %s", str);
|
||||
|
||||
return new ContentType.from_gmime(new GMime.ContentType.from_string(str));
|
||||
return new ContentType.from_gmime(GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
str
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -158,7 +161,7 @@ public class Geary.Mime.ContentType : Geary.BaseObject {
|
|||
internal ContentType.from_gmime(GMime.ContentType content_type) {
|
||||
media_type = content_type.get_media_type().strip();
|
||||
media_subtype = content_type.get_media_subtype().strip();
|
||||
params = new ContentParameters.from_gmime(content_type.get_params());
|
||||
params = new ContentParameters.from_gmime(content_type.get_parameters());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ private class Geary.RFC822.FilterBlockquotes : GMime.Filter {
|
|||
return new_filter;
|
||||
}
|
||||
|
||||
private void do_filter(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
private void do_filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace, bool flush) {
|
||||
|
||||
// This may not be strictly necessary.
|
||||
|
|
@ -64,7 +64,7 @@ private class Geary.RFC822.FilterBlockquotes : GMime.Filter {
|
|||
}
|
||||
|
||||
for (uint i = 0; i < inbuf.length; i++) {
|
||||
char c = inbuf[i];
|
||||
uint8 c = inbuf[i];
|
||||
|
||||
if (in_prefix && !in_tag) {
|
||||
if (c == Geary.RFC822.Utils.QUOTE_MARKER) {
|
||||
|
|
@ -122,12 +122,12 @@ private class Geary.RFC822.FilterBlockquotes : GMime.Filter {
|
|||
outprespace = this.outpre;
|
||||
}
|
||||
|
||||
public override void filter(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
do_filter(inbuf, prespace, out processed_buffer, out outprespace, false);
|
||||
}
|
||||
|
||||
public override void complete(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
do_filter(inbuf, prespace, out processed_buffer, out outprespace, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ private class Geary.RFC822.FilterFlowed : GMime.Filter {
|
|||
return new_filter;
|
||||
}
|
||||
|
||||
public override void filter(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
|
||||
// Worst-case scenario: We are about to leave the prefix,
|
||||
|
|
@ -67,7 +67,7 @@ private class Geary.RFC822.FilterFlowed : GMime.Filter {
|
|||
|
||||
uint out_index = 0;
|
||||
for (uint i = 0; i < inbuf.length; i++) {
|
||||
char c = inbuf[i];
|
||||
uint8 c = inbuf[i];
|
||||
|
||||
if (this.in_prefix) {
|
||||
if (c == '>') {
|
||||
|
|
@ -147,7 +147,7 @@ private class Geary.RFC822.FilterFlowed : GMime.Filter {
|
|||
outprespace = this.outpre;
|
||||
}
|
||||
|
||||
public override void complete(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
filter(inbuf, prespace, out processed_buffer, out outprespace);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ private class Geary.RFC822.FilterPlain : GMime.Filter {
|
|||
return new_filter;
|
||||
}
|
||||
|
||||
public override void filter(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
|
||||
// This may not be strictly necessary.
|
||||
|
|
@ -34,7 +34,7 @@ private class Geary.RFC822.FilterPlain : GMime.Filter {
|
|||
|
||||
uint out_index = 0;
|
||||
for (uint i = 0; i < inbuf.length; i++) {
|
||||
char c = inbuf[i];
|
||||
uint8 c = inbuf[i];
|
||||
|
||||
if (in_prefix) {
|
||||
if (c == '>') {
|
||||
|
|
@ -56,7 +56,7 @@ private class Geary.RFC822.FilterPlain : GMime.Filter {
|
|||
outprespace = this.outpre;
|
||||
}
|
||||
|
||||
public override void complete(char[] inbuf, size_t prespace, out unowned char[] processed_buffer,
|
||||
public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
|
||||
out size_t outprespace) {
|
||||
filter(inbuf, prespace, out processed_buffer, out outprespace);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,11 +42,17 @@ public class Geary.RFC822.MailboxAddress :
|
|||
}
|
||||
|
||||
private static string decode_name(string name) {
|
||||
return GMime.utils_header_decode_phrase(prepare_header_text_part(name));
|
||||
return GMime.utils_header_decode_phrase(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
prepare_header_text_part(name)
|
||||
);
|
||||
}
|
||||
|
||||
private static string decode_address_part(string mailbox) {
|
||||
return GMime.utils_header_decode_text(prepare_header_text_part(mailbox));
|
||||
return GMime.utils_header_decode_text(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
prepare_header_text_part(mailbox)
|
||||
);
|
||||
}
|
||||
|
||||
private static bool display_name_needs_quoting(string name) {
|
||||
|
|
@ -118,8 +124,9 @@ public class Geary.RFC822.MailboxAddress :
|
|||
// _internet_address_decode_name() function.
|
||||
|
||||
// see if a broken mailer has sent raw 8-bit information
|
||||
string text = GMime.utils_text_is_8bit(part, part.length)
|
||||
? part : GMime.utils_decode_8bit(part, part.length);
|
||||
string text = GMime.utils_text_is_8bit(part.data)
|
||||
? part : GMime.utils_decode_8bit(Geary.RFC822.get_parser_options(),
|
||||
part.data);
|
||||
|
||||
// unquote the string then decode the text
|
||||
GMime.utils_unquote_string(text);
|
||||
|
|
@ -222,16 +229,19 @@ public class Geary.RFC822.MailboxAddress :
|
|||
}
|
||||
|
||||
public MailboxAddress.from_rfc822_string(string rfc822) throws RFC822Error {
|
||||
InternetAddressList addrlist = InternetAddressList.parse_string(rfc822);
|
||||
GMime.InternetAddressList addrlist = GMime.InternetAddressList.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
rfc822
|
||||
);
|
||||
if (addrlist == null)
|
||||
return;
|
||||
|
||||
int length = addrlist.length();
|
||||
for (int ctr = 0; ctr < length; ctr++) {
|
||||
InternetAddress? addr = addrlist.get_address(ctr);
|
||||
GMime.InternetAddress? addr = addrlist.get_address(ctr);
|
||||
|
||||
// TODO: Handle group lists
|
||||
InternetAddressMailbox? mbox_addr = addr as InternetAddressMailbox;
|
||||
GMime.InternetAddressMailbox? mbox_addr = addr as GMime.InternetAddressMailbox;
|
||||
if (mbox_addr != null) {
|
||||
this.gmime(mbox_addr);
|
||||
return;
|
||||
|
|
@ -240,11 +250,11 @@ public class Geary.RFC822.MailboxAddress :
|
|||
throw new RFC822Error.INVALID("Could not parse RFC822 address: %s", rfc822);
|
||||
}
|
||||
|
||||
public MailboxAddress.gmime(InternetAddressMailbox mailbox) {
|
||||
public MailboxAddress.gmime(GMime.InternetAddressMailbox mailbox) {
|
||||
// GMime strips source route for us, so the address part
|
||||
// should only ever contain a single '@'
|
||||
string? name = mailbox.get_name();
|
||||
if (name != null) {
|
||||
if (name != "") {
|
||||
this.name = decode_name(name);
|
||||
}
|
||||
|
||||
|
|
@ -456,7 +466,11 @@ public class Geary.RFC822.MailboxAddress :
|
|||
public string to_rfc822_string() {
|
||||
return has_distinct_name()
|
||||
? "%s <%s>".printf(
|
||||
GMime.utils_header_encode_phrase(this.name),
|
||||
GMime.utils_header_encode_phrase(
|
||||
Geary.RFC822.get_format_options(),
|
||||
this.name,
|
||||
"iso-8859-1"
|
||||
),
|
||||
to_rfc822_address()
|
||||
)
|
||||
: to_rfc822_address();
|
||||
|
|
|
|||
|
|
@ -74,27 +74,30 @@ public class Geary.RFC822.MailboxAddresses :
|
|||
}
|
||||
|
||||
public MailboxAddresses.from_rfc822_string(string rfc822) {
|
||||
InternetAddressList addrlist = InternetAddressList.parse_string(rfc822);
|
||||
GMime.InternetAddressList addrlist = GMime.InternetAddressList.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
rfc822
|
||||
);
|
||||
if (addrlist == null)
|
||||
return;
|
||||
|
||||
int length = addrlist.length();
|
||||
for (int ctr = 0; ctr < length; ctr++) {
|
||||
InternetAddress? addr = addrlist.get_address(ctr);
|
||||
GMime.InternetAddress? addr = addrlist.get_address(ctr);
|
||||
|
||||
InternetAddressMailbox? mbox_addr = addr as InternetAddressMailbox;
|
||||
GMime.InternetAddressMailbox? mbox_addr = addr as GMime.InternetAddressMailbox;
|
||||
if (mbox_addr != null) {
|
||||
this.addrs.add(new MailboxAddress.gmime(mbox_addr));
|
||||
} else {
|
||||
// XXX this is pretty bad - we just flatten the
|
||||
// group's addresses into this list, merging lists and
|
||||
// losing the group names.
|
||||
InternetAddressGroup? mbox_group = addr as InternetAddressGroup;
|
||||
GMime.InternetAddressGroup? mbox_group = addr as GMime.InternetAddressGroup;
|
||||
if (mbox_group != null) {
|
||||
InternetAddressList group_list = mbox_group.get_members();
|
||||
GMime.InternetAddressList group_list = mbox_group.get_members();
|
||||
for (int i = 0; i < group_list.length(); i++) {
|
||||
InternetAddressMailbox? group_addr =
|
||||
addrlist.get_address(i) as InternetAddressMailbox;
|
||||
GMime.InternetAddressMailbox? group_addr =
|
||||
addrlist.get_address(i) as GMime.InternetAddressMailbox;
|
||||
if (group_addr != null) {
|
||||
this.addrs.add(new MailboxAddress.gmime(group_addr));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -173,27 +173,13 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.MessageData.Abs
|
|||
public DateTime value { get; private set; }
|
||||
|
||||
public Date(string rfc822) throws ImapError {
|
||||
int offset = 0;
|
||||
int64 time_t_utc = GMime.utils_header_decode_date(rfc822, out offset);
|
||||
if (time_t_utc == 0)
|
||||
throw new ImapError.PARSE_ERROR(
|
||||
"Unable to parse \"%s\": Not ISO-8601 date", rfc822
|
||||
);
|
||||
|
||||
DateTime? value = new DateTime.from_unix_utc(time_t_utc);
|
||||
DateTime? value = GMime.utils_header_decode_date(rfc822);
|
||||
if (value == null) {
|
||||
throw new ImapError.PARSE_ERROR(
|
||||
"Unable to parse \"%s\": Outside supported range", rfc822
|
||||
);
|
||||
}
|
||||
this.value = value;
|
||||
|
||||
if (offset != 0) {
|
||||
this.value = value.to_timezone(
|
||||
new GLib.TimeZone("%+05d".printf(offset))
|
||||
);
|
||||
}
|
||||
|
||||
this.original = rfc822;
|
||||
}
|
||||
|
||||
|
|
@ -206,18 +192,7 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.MessageData.Abs
|
|||
* Returns the {@link Date} in RFC 822 format.
|
||||
*/
|
||||
public string to_rfc822_string() {
|
||||
// Although GMime documents its conversion methods as
|
||||
// requiring the tz offset in hours, it appears the number is
|
||||
// handed directly to the string (i.e. an offset of -7:30 becomes
|
||||
// "-0007", whereas we want "-0730").
|
||||
int hours = (int) GLib.Math.floor(value.get_utc_offset() / TimeSpan.HOUR);
|
||||
int minutes = (int) (
|
||||
(value.get_utc_offset() % TimeSpan.HOUR) / (double) TimeSpan.HOUR * 60
|
||||
);
|
||||
return GMime.utils_header_format_date(
|
||||
(time_t) this.value.to_utc().to_unix(),
|
||||
(hours * 100) + minutes
|
||||
);
|
||||
return GMime.utils_header_format_date(this.value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -261,7 +236,7 @@ public class Geary.RFC822.Subject : Geary.MessageData.StringMessageData,
|
|||
}
|
||||
|
||||
public Subject.decode(string value) {
|
||||
base (GMime.utils_header_decode_text(value));
|
||||
base (GMime.utils_header_decode_text(Geary.RFC822.get_parser_options(), value));
|
||||
original = value;
|
||||
}
|
||||
|
||||
|
|
@ -337,9 +312,8 @@ public class Geary.RFC822.Header : Geary.MessageData.BlockMessageData, Geary.RFC
|
|||
|
||||
GMime.Parser parser = new GMime.Parser.with_stream(Utils.create_stream_mem(buffer));
|
||||
parser.set_respect_content_length(false);
|
||||
parser.set_scan_from(false);
|
||||
|
||||
message = parser.construct_message();
|
||||
message = parser.construct_message(Geary.RFC822.get_parser_options());
|
||||
if (message == null)
|
||||
throw new RFC822Error.INVALID("Unable to parse RFC 822 headers");
|
||||
|
||||
|
|
@ -347,17 +321,22 @@ public class Geary.RFC822.Header : Geary.MessageData.BlockMessageData, Geary.RFC
|
|||
}
|
||||
|
||||
public string? get_header(string name) throws RFC822Error {
|
||||
return get_headers().get(name);
|
||||
GMime.Header header = get_headers().get_header(name);
|
||||
if (header != null)
|
||||
// We should not parse the raw-value here, but use GMime's parsing
|
||||
// functionality instead.
|
||||
// See: https://gitlab.gnome.org/GNOME/geary/merge_requests/382#note_669699
|
||||
return GMime.utils_header_unfold(header.get_raw_value());
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public string[] get_header_names() throws RFC822Error {
|
||||
if (this.names == null) {
|
||||
this.names = new string[0];
|
||||
GMime.HeaderIter iter = new GMime.HeaderIter();
|
||||
if (get_headers().get_iter(iter) && iter.first()) {
|
||||
do {
|
||||
names += iter.get_name();
|
||||
} while (iter.next());
|
||||
GMime.HeaderList headers = get_headers();
|
||||
for (int i = 0; i < headers.get_count(); i++) {
|
||||
names += headers.get_header_at(i).get_name();
|
||||
}
|
||||
}
|
||||
return this.names;
|
||||
|
|
@ -388,7 +367,7 @@ public class Geary.RFC822.PreviewText : Geary.RFC822.Text {
|
|||
// Parse the header.
|
||||
GMime.Stream header_stream = Utils.create_stream_mem(preview_header);
|
||||
GMime.Parser parser = new GMime.Parser.with_stream(header_stream);
|
||||
GMime.Part? gpart = parser.construct_part() as GMime.Part;
|
||||
GMime.Part? gpart = parser.construct_part(Geary.RFC822.get_parser_options()) as GMime.Part;
|
||||
if (gpart != null) {
|
||||
Part part = new Part(gpart);
|
||||
|
||||
|
|
@ -402,7 +381,7 @@ public class Geary.RFC822.PreviewText : Geary.RFC822.Text {
|
|||
new GMime.StreamMem.with_buffer(preview.get_uint8_array()),
|
||||
gpart.get_content_encoding()
|
||||
);
|
||||
gpart.set_content_object(body);
|
||||
gpart.set_content(body);
|
||||
|
||||
try {
|
||||
Memory.Buffer preview_buffer = part.write_to_buffer(
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
*/
|
||||
public delegate string? InlinePartReplacer(Part part);
|
||||
|
||||
private const string HEADER_SENDER = "Sender";
|
||||
private const string HEADER_IN_REPLY_TO = "In-Reply-To";
|
||||
private const string HEADER_REFERENCES = "References";
|
||||
private const string HEADER_MAILER = "X-Mailer";
|
||||
|
|
@ -89,7 +88,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
public Message(Full full) throws RFC822Error {
|
||||
GMime.Parser parser = new GMime.Parser.with_stream(Utils.create_stream_mem(full.buffer));
|
||||
|
||||
message = parser.construct_message();
|
||||
message = parser.construct_message(Geary.RFC822.get_parser_options());
|
||||
if (message == null)
|
||||
throw new RFC822Error.INVALID("Unable to parse RFC 822 message");
|
||||
|
||||
|
|
@ -115,7 +114,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
stream_cat.add_source(new GMime.StreamMem.with_buffer(body.buffer.get_bytes().get_data()));
|
||||
|
||||
GMime.Parser parser = new GMime.Parser.with_stream(stream_cat);
|
||||
message = parser.construct_message();
|
||||
message = parser.construct_message(Geary.RFC822.get_parser_options());
|
||||
if (message == null)
|
||||
throw new RFC822Error.INVALID("Unable to parse RFC 822 message");
|
||||
|
||||
|
|
@ -136,67 +135,71 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
this.from = email.from;
|
||||
this.date = email.date;
|
||||
|
||||
// GMimeMessage.set_sender actually sets the From header - and
|
||||
// although the API docs make it sound otherwise, it also
|
||||
// supports a list of addresses
|
||||
message.set_sender(this.from.to_rfc822_string());
|
||||
message.set_date_as_string(this.date.serialize());
|
||||
if (message_id != null) {
|
||||
this.message_id = new MessageID(message_id);
|
||||
message.set_message_id(message_id);
|
||||
this.message.set_date(this.date.value);
|
||||
|
||||
if (email.from != null) {
|
||||
foreach (RFC822.MailboxAddress mailbox in email.from)
|
||||
this.message.add_mailbox(FROM, mailbox.name, mailbox.address);
|
||||
}
|
||||
|
||||
// Optional headers
|
||||
if (email.to != null) {
|
||||
this.to = email.to;
|
||||
foreach (RFC822.MailboxAddress mailbox in email.to)
|
||||
this.message.add_recipient(GMime.RecipientType.TO, mailbox.name, mailbox.address);
|
||||
this.message.add_mailbox(TO, mailbox.name, mailbox.address);
|
||||
}
|
||||
|
||||
if (email.cc != null) {
|
||||
this.cc = email.cc;
|
||||
foreach (RFC822.MailboxAddress mailbox in email.cc)
|
||||
this.message.add_recipient(GMime.RecipientType.CC, mailbox.name, mailbox.address);
|
||||
this.message.add_mailbox(CC, mailbox.name, mailbox.address);
|
||||
}
|
||||
|
||||
if (email.bcc != null) {
|
||||
this.bcc = email.bcc;
|
||||
foreach (RFC822.MailboxAddress mailbox in email.bcc)
|
||||
this.message.add_recipient(GMime.RecipientType.BCC, mailbox.name, mailbox.address);
|
||||
this.message.add_mailbox(BCC, mailbox.name, mailbox.address);
|
||||
}
|
||||
|
||||
if (email.sender != null) {
|
||||
this.sender = email.sender;
|
||||
this.message.set_header(HEADER_SENDER,
|
||||
email.sender.to_rfc822_string());
|
||||
this.message.add_mailbox(SENDER, this.sender.name, this.sender.address);
|
||||
}
|
||||
|
||||
if (email.reply_to != null) {
|
||||
this.reply_to = email.reply_to;
|
||||
this.message.set_reply_to(email.reply_to.to_rfc822_string());
|
||||
foreach (RFC822.MailboxAddress mailbox in email.reply_to)
|
||||
this.message.add_mailbox(REPLY_TO, mailbox.name, mailbox.address);
|
||||
}
|
||||
|
||||
if (email.in_reply_to != null) {
|
||||
this.in_reply_to = email.in_reply_to;
|
||||
// We could use `this.message.add_mailbox()` in a similar way like
|
||||
// we did for the other headers, but this would require to change
|
||||
// the type of `email.in_reply_to` and `this.in_reply_to` from
|
||||
// `RFC822.MessageIDList` to `RFC822.MailboxAddresses`.
|
||||
this.message.set_header(HEADER_IN_REPLY_TO,
|
||||
email.in_reply_to.to_rfc822_string());
|
||||
email.in_reply_to.to_rfc822_string(),
|
||||
Geary.RFC822.get_charset());
|
||||
}
|
||||
|
||||
if (email.references != null) {
|
||||
this.references = email.references;
|
||||
this.message.set_header(HEADER_REFERENCES,
|
||||
email.references.to_rfc822_string());
|
||||
email.references.to_rfc822_string(),
|
||||
Geary.RFC822.get_charset());
|
||||
}
|
||||
|
||||
if (email.subject != null) {
|
||||
this.subject = email.subject;
|
||||
this.message.set_subject(email.subject.value);
|
||||
this.message.set_subject(email.subject.value,
|
||||
Geary.RFC822.get_charset());
|
||||
}
|
||||
|
||||
// User-Agent
|
||||
if (!Geary.String.is_empty(email.mailer)) {
|
||||
this.mailer = email.mailer;
|
||||
this.message.set_header(HEADER_MAILER, email.mailer);
|
||||
this.message.set_header(HEADER_MAILER, email.mailer,
|
||||
Geary.RFC822.get_charset());
|
||||
}
|
||||
|
||||
// Build the message's body mime parts
|
||||
|
|
@ -385,28 +388,15 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
// create the new object. Kinda sucks, but our hands are tied.
|
||||
this.from_buffer(email.message_to_memory_buffer(false, false));
|
||||
|
||||
// GMime also drops the ball for the *new* message. When it comes out of the GMime
|
||||
// Parser, its "mime part" somehow isn't realizing it has a Content-Type header
|
||||
// already, so whenever you manipulate the headers, it adds a duplicate one. This
|
||||
// odd looking hack ensures that any header manipulation is done while the "mime
|
||||
// part" is an empty object, and when we re-set the "mime part", there's only the
|
||||
// one Content-Type header. In other words, this hack prevents the duplicate
|
||||
// header, somehow.
|
||||
GMime.Object original_mime_part = message.get_mime_part();
|
||||
GMime.Message empty = new GMime.Message(true);
|
||||
message.set_mime_part(empty.get_mime_part());
|
||||
|
||||
message.remove_header(HEADER_BCC);
|
||||
bcc = null;
|
||||
|
||||
message.set_mime_part(original_mime_part);
|
||||
this.message.remove_header(HEADER_BCC);
|
||||
this.bcc = null;
|
||||
}
|
||||
|
||||
private GMime.Object? coalesce_related(Gee.List<GMime.Object> parts,
|
||||
string type) {
|
||||
GMime.Object? part = coalesce_parts(parts, "related");
|
||||
if (parts.size > 1) {
|
||||
part.set_header("Type", type);
|
||||
part.set_header("Type", type, Geary.RFC822.get_charset());
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
|
@ -433,11 +423,12 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
FileQueryInfoFlags.NONE
|
||||
);
|
||||
|
||||
GMime.Part part = new GMime.Part();
|
||||
GMime.Part part = new GMime.Part.with_type("text", "plain");
|
||||
part.set_disposition(disposition.serialize());
|
||||
part.set_filename(file.get_basename());
|
||||
|
||||
GMime.ContentType content_type = new GMime.ContentType.from_string(
|
||||
GMime.ContentType content_type = GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
file_info.get_content_type()
|
||||
);
|
||||
part.set_content_type(content_type);
|
||||
|
|
@ -468,7 +459,10 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
);
|
||||
}
|
||||
|
||||
GMime.ContentType? content_type = new GMime.ContentType.from_string(mime_type.get_mime_type());
|
||||
GMime.ContentType? content_type = GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
mime_type.get_mime_type()
|
||||
);
|
||||
|
||||
if (content_type == null) {
|
||||
throw new RFC822Error.INVALID(
|
||||
|
|
@ -476,7 +470,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
);
|
||||
}
|
||||
|
||||
GMime.Part part = new GMime.Part();
|
||||
GMime.Part part = new GMime.Part.with_type("text", "plain");
|
||||
part.set_disposition(disposition.serialize());
|
||||
part.set_filename(basename);
|
||||
part.set_content_type(content_type);
|
||||
|
|
@ -515,7 +509,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
}
|
||||
|
||||
part.set_content_encoding(encoding);
|
||||
part.set_content_object(
|
||||
part.set_content(
|
||||
new GMime.DataWrapper.with_stream(
|
||||
stream, GMime.ContentEncoding.BINARY
|
||||
)
|
||||
|
|
@ -536,7 +530,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
Geary.Email email = new Geary.Email(id);
|
||||
|
||||
email.set_message_header(new Geary.RFC822.Header(new Geary.Memory.StringBuffer(
|
||||
message.get_headers())));
|
||||
message.get_headers(Geary.RFC822.get_format_options()))));
|
||||
email.set_send_date(date);
|
||||
email.set_originators(from, sender, reply_to);
|
||||
email.set_receivers(to, cc, bcc);
|
||||
|
|
@ -884,68 +878,76 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
}
|
||||
|
||||
private void stock_from_gmime() {
|
||||
this.message.get_header_list().foreach((name, value) => {
|
||||
switch (name.down()) {
|
||||
case "from":
|
||||
this.from = append_address(this.from, value);
|
||||
break;
|
||||
GMime.HeaderList headers = this.message.get_header_list();
|
||||
for (int i = 0; i < headers.get_count(); i++) {
|
||||
GMime.Header header = headers.get_header_at(i);
|
||||
string name = header.get_name();
|
||||
// We should not parse the raw-value here, but use GMime's parsing
|
||||
// functionality instead.
|
||||
// See: https://gitlab.gnome.org/GNOME/geary/merge_requests/382#note_669699
|
||||
string value = GMime.utils_header_unfold(header.get_raw_value());
|
||||
switch (name.down()) {
|
||||
case "from":
|
||||
this.from = append_address(this.from, value);
|
||||
break;
|
||||
|
||||
case "sender":
|
||||
try {
|
||||
this.sender = new RFC822.MailboxAddress.from_rfc822_string(value);
|
||||
} catch (Error err) {
|
||||
debug("Could parse subject: %s", err.message);
|
||||
}
|
||||
break;
|
||||
case "sender":
|
||||
try {
|
||||
this.sender = new RFC822.MailboxAddress.from_rfc822_string(value);
|
||||
} catch (Error err) {
|
||||
debug("Could parse subject: %s", err.message);
|
||||
}
|
||||
break;
|
||||
|
||||
case "reply-to":
|
||||
this.reply_to = append_address(this.reply_to, value);
|
||||
break;
|
||||
case "reply-to":
|
||||
this.reply_to = append_address(this.reply_to, value);
|
||||
break;
|
||||
|
||||
case "to":
|
||||
this.to = append_address(this.to, value);
|
||||
break;
|
||||
case "to":
|
||||
this.to = append_address(this.to, value);
|
||||
break;
|
||||
|
||||
case "cc":
|
||||
this.cc = append_address(this.cc, value);
|
||||
break;
|
||||
case "cc":
|
||||
this.cc = append_address(this.cc, value);
|
||||
break;
|
||||
|
||||
case "bcc":
|
||||
this.bcc = append_address(this.bcc, value);
|
||||
break;
|
||||
case "bcc":
|
||||
this.bcc = append_address(this.bcc, value);
|
||||
break;
|
||||
|
||||
case "subject":
|
||||
this.subject = new RFC822.Subject.decode(value);
|
||||
break;
|
||||
case "subject":
|
||||
this.subject = new RFC822.Subject.decode(value);
|
||||
break;
|
||||
|
||||
case "date":
|
||||
try {
|
||||
this.date = new Geary.RFC822.Date(value);
|
||||
} catch (Error err) {
|
||||
debug("Could not parse date: %s", err.message);
|
||||
}
|
||||
break;
|
||||
case "date":
|
||||
try {
|
||||
this.date = new Geary.RFC822.Date(value);
|
||||
} catch (Error err) {
|
||||
debug("Could not parse date: %s", err.message);
|
||||
}
|
||||
break;
|
||||
|
||||
case "message-id":
|
||||
this.message_id = new MessageID(value);
|
||||
break;
|
||||
case "message-id":
|
||||
this.message_id = new MessageID(value);
|
||||
break;
|
||||
|
||||
case "in-reply-to":
|
||||
this.in_reply_to = append_message_id(this.in_reply_to, value);
|
||||
break;
|
||||
case "in-reply-to":
|
||||
this.in_reply_to = append_message_id(this.in_reply_to, value);
|
||||
break;
|
||||
|
||||
case "references":
|
||||
this.references = append_message_id(this.references, value);
|
||||
break;
|
||||
case "references":
|
||||
this.references = append_message_id(this.references, value);
|
||||
break;
|
||||
|
||||
case "x-mailer":
|
||||
this.mailer = GMime.utils_header_decode_text(value);
|
||||
break;
|
||||
case "x-mailer":
|
||||
this.mailer = GMime.utils_header_decode_text(Geary.RFC822.get_parser_options(), value);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
default:
|
||||
// do nothing
|
||||
break;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private MailboxAddresses append_address(MailboxAddresses? existing,
|
||||
|
|
@ -990,11 +992,11 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
|
||||
if (requested_disposition == Mime.DispositionType.UNSPECIFIED || disposition == requested_disposition) {
|
||||
GMime.Stream stream = new GMime.StreamMem();
|
||||
message.write_to_stream(stream);
|
||||
message.write_to_stream(Geary.RFC822.get_format_options(), stream);
|
||||
GMime.DataWrapper data = new GMime.DataWrapper.with_stream(stream,
|
||||
GMime.ContentEncoding.BINARY); // Equivalent to no encoding
|
||||
GMime.Part part = new GMime.Part.with_type("message", "rfc822");
|
||||
part.set_content_object(data);
|
||||
part.set_content(data);
|
||||
part.set_filename((message.get_subject() ?? _("(no subject)")) + ".eml");
|
||||
attachments.add(new Part(part));
|
||||
}
|
||||
|
|
@ -1017,7 +1019,7 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
#if WITH_TNEF_SUPPORT
|
||||
if (content_type.is_type("application", "vnd.ms-tnef")) {
|
||||
GMime.StreamMem stream = new GMime.StreamMem();
|
||||
((GMime.Part) root).get_content_object().write_to_stream(stream);
|
||||
((GMime.Part) root).get_content().write_to_stream(stream);
|
||||
ByteArray tnef_data = stream.get_byte_array();
|
||||
Ytnef.TNEFStruct tn;
|
||||
if (Ytnef.ParseMemory(tnef_data.data, out tn) == 0) {
|
||||
|
|
@ -1050,10 +1052,10 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
string filename = (string) filenameProp.data;
|
||||
uint8[] data = Bytes.unref_to_data(new Bytes(a.FileData.data));
|
||||
|
||||
GMime.Part part = new GMime.Part();
|
||||
GMime.Part part = new GMime.Part.with_type("text", "plain");
|
||||
part.set_filename(filename);
|
||||
part.set_content_type(new GMime.ContentType.from_string(GLib.ContentType.guess(filename, data, null)));
|
||||
part.set_content_object(new GMime.DataWrapper.with_stream(new GMime.StreamMem.with_buffer(data), GMime.ContentEncoding.BINARY));
|
||||
part.set_content_type(GMime.ContentType.parse(Geary.RFC822.get_parser_options(), GLib.ContentType.guess(filename, data, null)));
|
||||
part.set_content(new GMime.DataWrapper.with_stream(new GMime.StreamMem.with_buffer(data), GMime.ContentEncoding.BINARY));
|
||||
return part;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -1092,19 +1094,29 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
stream.set_owner(false);
|
||||
|
||||
GMime.StreamFilter stream_filter = new GMime.StreamFilter(stream);
|
||||
stream_filter.add(new GMime.FilterCRLF(encoded, dotstuffed));
|
||||
if (encoded) {
|
||||
stream_filter.add(new GMime.FilterUnix2Dos(false));
|
||||
} else {
|
||||
stream_filter.add(new GMime.FilterDos2Unix(false));
|
||||
}
|
||||
if (dotstuffed) {
|
||||
stream_filter.add(new GMime.FilterSmtpData());
|
||||
}
|
||||
|
||||
if (message.write_to_stream(stream_filter) < 0)
|
||||
throw new RFC822Error.FAILED("Unable to write RFC822 message to memory buffer");
|
||||
if (message.write_to_stream(Geary.RFC822.get_format_options(), stream_filter) < 0)
|
||||
throw new RFC822Error.FAILED("Unable to write RFC822 message to filter stream");
|
||||
|
||||
if (stream_filter.flush() != 0)
|
||||
throw new RFC822Error.FAILED("Unable to flush RFC822 message to memory stream");
|
||||
|
||||
if (stream.flush() != 0)
|
||||
throw new RFC822Error.FAILED("Unable to flush RFC822 message to memory buffer");
|
||||
|
||||
return new Memory.ByteBuffer.from_byte_array(byte_array);
|
||||
}
|
||||
|
||||
public string to_string() {
|
||||
return message.to_string();
|
||||
return message.to_string(Geary.RFC822.get_format_options());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1152,11 +1164,13 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
// Base64-encoded text needs to have CR's added after LF's
|
||||
// before encoding, otherwise it breaks format=flowed. See
|
||||
// Bug 753528.
|
||||
filter_stream.add(new GMime.FilterCRLF(true, false));
|
||||
filter_stream.add(new GMime.FilterUnix2Dos(false));
|
||||
}
|
||||
|
||||
GMime.ContentType complete_type =
|
||||
new GMime.ContentType.from_string(content_type);
|
||||
GMime.ContentType complete_type = GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
content_type
|
||||
);
|
||||
complete_type.set_parameter("charset", charset);
|
||||
if (is_flowed) {
|
||||
complete_type.set_parameter("format", "flowed");
|
||||
|
|
@ -1166,9 +1180,9 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet {
|
|||
filter_stream, GMime.ContentEncoding.DEFAULT
|
||||
);
|
||||
|
||||
GMime.Part body_part = new GMime.Part();
|
||||
GMime.Part body_part = new GMime.Part.with_type("text", "plain");
|
||||
body_part.set_content_type(complete_type);
|
||||
body_part.set_content_object(body);
|
||||
body_part.set_content(body);
|
||||
body_part.set_content_encoding(encoding);
|
||||
return body_part;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ public class Geary.RFC822.Part : Object {
|
|||
BodyFormatting format = BodyFormatting.NONE)
|
||||
throws RFC822Error {
|
||||
GMime.DataWrapper? wrapper = (this.source_part != null)
|
||||
? this.source_part.get_content_object() : null;
|
||||
? this.source_part.get_content() : null;
|
||||
if (wrapper == null) {
|
||||
throw new RFC822Error.INVALID(
|
||||
"Could not get the content wrapper for content-type %s",
|
||||
|
|
@ -201,7 +201,7 @@ public class Geary.RFC822.Part : Object {
|
|||
if ((this.source_part == null ||
|
||||
this.source_part.encoding != BASE64) &&
|
||||
!(content_type.media_subtype in CR_PRESERVING_TEXT_TYPES)) {
|
||||
filter.add(new GMime.FilterCRLF(false, false));
|
||||
filter.add(new GMime.FilterDos2Unix(false));
|
||||
}
|
||||
|
||||
if (flowed) {
|
||||
|
|
@ -226,12 +226,18 @@ public class Geary.RFC822.Part : Object {
|
|||
filter.add(new Geary.RFC822.FilterBlockquotes());
|
||||
}
|
||||
|
||||
wrapper.write_to_stream(filter);
|
||||
filter.flush();
|
||||
if (wrapper.write_to_stream(filter) < 0)
|
||||
throw new RFC822Error.FAILED("Unable to write textual RFC822 part to filter stream");
|
||||
if (filter.flush() != 0)
|
||||
throw new RFC822Error.FAILED("Unable to flush textual RFC822 part to destination stream");
|
||||
if (destination.flush() != 0)
|
||||
throw new RFC822Error.FAILED("Unable to flush textual RFC822 part to destination");
|
||||
} else {
|
||||
// Keep as binary
|
||||
wrapper.write_to_stream(destination);
|
||||
destination.flush();
|
||||
if (wrapper.write_to_stream(destination) < 0)
|
||||
throw new RFC822Error.FAILED("Unable to write binary RFC822 part to destination stream");
|
||||
if (destination.flush() != 0)
|
||||
throw new RFC822Error.FAILED("Unable to flush binary RFC822 part to destination");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ public string email_addresses_for_reply(Geary.RFC822.MailboxAddresses? addresses
|
|||
}
|
||||
|
||||
|
||||
public bool comp_char_arr_slice(char[] array, uint start, string comp) {
|
||||
public bool comp_char_arr_slice(uint8[] array, uint start, string comp) {
|
||||
for (int i = 0; i < comp.length; i++) {
|
||||
if (array[start + i] != comp[i])
|
||||
return false;
|
||||
|
|
@ -277,7 +277,7 @@ public async string get_best_charset(GMime.Stream in_stream,
|
|||
},
|
||||
cancellable
|
||||
);
|
||||
return filter.charset();
|
||||
return filter.get_charset();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,11 +19,6 @@ public enum TextFormat {
|
|||
*/
|
||||
public const string UTF8_CHARSET = "UTF-8";
|
||||
|
||||
/**
|
||||
* Official IANA charset encoding name for the ASCII character set.
|
||||
*/
|
||||
public const string ASCII_CHARSET = "US-ASCII";
|
||||
|
||||
private int init_count = 0;
|
||||
|
||||
internal Regex? invalid_filename_character_re = null;
|
||||
|
|
@ -32,18 +27,8 @@ public void init() {
|
|||
if (init_count++ != 0)
|
||||
return;
|
||||
|
||||
GMime.init(GMime.ENABLE_RFC2047_WORKAROUNDS);
|
||||
|
||||
// This has the effect of ensuring all non US-ASCII and non-ISO-8859-1
|
||||
// headers are always encoded as UTF-8. This should be fine because
|
||||
// message bodies are also always sent as UTF-8.
|
||||
const string?[] USER_CHARSETS = {
|
||||
UTF8_CHARSET,
|
||||
// GMime.set_user_charsets calls g_strdupv under the hood, so
|
||||
// the array needs to be null-terminated
|
||||
null
|
||||
};
|
||||
GMime.set_user_charsets(USER_CHARSETS);
|
||||
GMime.init();
|
||||
GMime.ParserOptions.get_default().set_allow_addresses_without_domain(true);
|
||||
|
||||
try {
|
||||
invalid_filename_character_re = new Regex("[/\\0]");
|
||||
|
|
@ -52,6 +37,17 @@ public void init() {
|
|||
}
|
||||
}
|
||||
|
||||
public GMime.FormatOptions get_format_options() {
|
||||
return GMime.FormatOptions.get_default().clone();
|
||||
}
|
||||
|
||||
public GMime.ParserOptions get_parser_options() {
|
||||
return GMime.ParserOptions.get_default().clone();
|
||||
}
|
||||
|
||||
public string? get_charset() {
|
||||
return UTF8_CHARSET;
|
||||
}
|
||||
|
||||
internal bool is_utf_8(string charset) {
|
||||
string up = charset.up();
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ if enable_valadoc
|
|||
'--pkg', 'gio-2.0',
|
||||
'--pkg', 'gee-0.8',
|
||||
'--pkg', 'sqlite3',
|
||||
'--pkg', 'gmime-2.6',
|
||||
'--pkg', 'gmime-3.0',
|
||||
'--pkg', 'javascriptcoregtk-4.0',
|
||||
'--pkg', 'libxml-2.0',
|
||||
'--pkg', 'libunwind',
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class Geary.ImapDB.AttachmentTest : TestCase {
|
|||
|
||||
public void new_from_minimal_mime_part() throws Error {
|
||||
GMime.Part part = new_part(null, ATTACHMENT_BODY.data);
|
||||
part.set_header("Content-Type", "");
|
||||
part.set_header("Content-Type", "", Geary.RFC822.get_charset());
|
||||
|
||||
Attachment test = new Attachment.from_part(
|
||||
1, new Geary.RFC822.Part(part)
|
||||
|
|
@ -51,7 +51,8 @@ class Geary.ImapDB.AttachmentTest : TestCase {
|
|||
part.set_content_id(ID);
|
||||
part.set_content_description(DESC);
|
||||
part.set_content_disposition(
|
||||
new GMime.ContentDisposition.from_string(
|
||||
GMime.ContentDisposition.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
"attachment; filename=%s".printf(NAME)
|
||||
)
|
||||
);
|
||||
|
|
@ -74,7 +75,10 @@ class Geary.ImapDB.AttachmentTest : TestCase {
|
|||
public void new_from_inline_mime_part() throws Error {
|
||||
GMime.Part part = new_part(null, ATTACHMENT_BODY.data);
|
||||
part.set_content_disposition(
|
||||
new GMime.ContentDisposition.from_string("inline")
|
||||
GMime.ContentDisposition.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
"inline"
|
||||
)
|
||||
);
|
||||
|
||||
Attachment test = new Attachment.from_part(
|
||||
|
|
@ -205,7 +209,8 @@ CREATE TABLE MessageAttachmentTable (
|
|||
part.set_content_id(ID);
|
||||
part.set_content_description(DESCRIPTION);
|
||||
part.set_content_disposition(
|
||||
new GMime.ContentDisposition.from_string(
|
||||
GMime.ContentDisposition.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
"inline; filename=%s;".printf(FILENAME)
|
||||
));
|
||||
|
||||
|
|
@ -350,14 +355,17 @@ VALUES (2, 'text/plain');
|
|||
private GMime.Part new_part(string? mime_type,
|
||||
uint8[] body,
|
||||
GMime.ContentEncoding encoding = GMime.ContentEncoding.DEFAULT) {
|
||||
GMime.Part part = new GMime.Part();
|
||||
GMime.Part part = new GMime.Part.with_type("text", "plain");
|
||||
if (mime_type != null) {
|
||||
part.set_content_type(new GMime.ContentType.from_string(mime_type));
|
||||
part.set_content_type(GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
mime_type
|
||||
));
|
||||
}
|
||||
GMime.DataWrapper body_wrapper = new GMime.DataWrapper.with_stream(
|
||||
new GMime.StreamMem.with_buffer(body),
|
||||
encoding
|
||||
);
|
||||
part.set_content_object(body_wrapper);
|
||||
part.set_content(body_wrapper);
|
||||
return part;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ class Geary.RFC822.MailboxAddressTest : TestCase {
|
|||
add_test("is_valid_address", is_valid_address);
|
||||
add_test("unescaped_constructor", unescaped_constructor);
|
||||
add_test("from_rfc822_string_encoded", from_rfc822_string_encoded);
|
||||
add_test("prepare_header_text_part", prepare_header_text_part);
|
||||
// latter depends on the former, so test that first
|
||||
add_test("has_distinct_name", has_distinct_name);
|
||||
add_test("is_spoofed", is_spoofed);
|
||||
|
|
@ -140,23 +141,37 @@ class Geary.RFC822.MailboxAddressTest : TestCase {
|
|||
|
||||
// Courtesy Mailsploit https://www.mailsploit.com
|
||||
addr = new MailboxAddress.from_rfc822_string("\"=?utf-8?b?dGVzdCIgPHBvdHVzQHdoaXRlaG91c2UuZ292Pg==?==?utf-8?Q?=00=0A?=\" <demo@mailsploit.com>");
|
||||
assert(addr.name == "test <potus@whitehouse.gov>?\n");
|
||||
assert(addr.name == "test <potus@whitehouse.gov>?");
|
||||
assert(addr.address == "demo@mailsploit.com");
|
||||
|
||||
// Courtesy Mailsploit https://www.mailsploit.com
|
||||
addr = new MailboxAddress.from_rfc822_string("\"=?utf-8?Q?=42=45=47=49=4E=20=2F=20=28=7C=29=7C=3C=7C=3E=7C=40=7C=2C=7C=3B=7C=3A=7C=5C=7C=22=7C=2F=7C=5B=7C=5D=7C=3F=7C=2E=7C=3D=20=2F=20=00=20=50=41=53=53=45=44=20=4E=55=4C=4C=20=42=59=54=45=20=2F=20=0D=0A=20=50=41=53=53=45=44=20=43=52=4C=46=20=2F=20?==?utf-8?b?RU5E=?=\"");
|
||||
assert(addr.name == null);
|
||||
assert(addr.address == "BEGIN / (|)|<|>|@|,|;|:|\\|\"|/|[|]|?|.|= / ? PASSED NULL BYTE / \r\n PASSED CRLF / END");
|
||||
|
||||
addr = new MailboxAddress.from_rfc822_string("=?UTF-8?Q?=22Firstname_=22=C2=AF\\=5F=28=E3=83=84=29=5F/=C2=AF=22_Lastname_via?==?UTF-8?Q?_Vendor=22_<system@vendor.com>?=");
|
||||
assert(addr.name == "Firstname ¯_(ツ)_/¯ Lastname via=?UTF-8?Q?_Vendor=22_");
|
||||
assert(addr.mailbox == "system");
|
||||
assert(addr.domain == "vendor.com");
|
||||
} catch (Error err) {
|
||||
assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
public void prepare_header_text_part() throws GLib.Error {
|
||||
// Test if prepare_header_text_part() can handle crappy input without grilling the CPU
|
||||
MailboxAddress addr = new MailboxAddress.imap(
|
||||
"=?UTF-8?Q?=22Firstname_=22=C2=AF\\=5F=28=E3=83=84=29=5F/=C2=AF=22_Lastname_via?==?UTF-8?Q?_Vendor=22_<system@vendor.com>?=",
|
||||
null,
|
||||
"=?UTF-8?Q?=22Firstname_=22=C2=AF\\=5F=28=E3=83=84=29=5F/=C2=AF=22_Lastname_via?==?UTF-8?Q?_Vendor=22_<system@vendor.com>?=",
|
||||
"vendor.com");
|
||||
assert(addr.name == "\"Firstname \"¯_(ツ)_/¯\" Lastname via Vendor\" <system@vendor.com>");
|
||||
assert(addr.mailbox == "\"Firstname \"¯_(ツ)_/¯\" Lastname via Vendor\" <system@vendor.com>");
|
||||
|
||||
// A second test with the input that have been passed to prepare_header_text_part() by the pre-GMime3 tests
|
||||
addr = new MailboxAddress.imap(
|
||||
"\"Firstname \"¯_(ツ)_/¯\" Lastname via=?UTF-8?Q?_Vendor=22_",
|
||||
null,
|
||||
"system",
|
||||
"vendor.com");
|
||||
assert(addr.name == "Firstname ¯_(ツ)_/¯ Lastname via=?UTF-8?Q?_Vendor=22_");
|
||||
}
|
||||
|
||||
public void has_distinct_name() throws Error {
|
||||
assert(new MailboxAddress("example", "example@example.com").has_distinct_name() == true);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,10 @@ class Geary.RFC822.PartTest : TestCase {
|
|||
part.set_content_id(ID);
|
||||
part.set_content_description(DESC);
|
||||
part.set_content_disposition(
|
||||
new GMime.ContentDisposition.from_string("inline")
|
||||
GMime.ContentDisposition.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
"inline"
|
||||
)
|
||||
);
|
||||
|
||||
Part test = new Part(part);
|
||||
|
|
@ -91,15 +94,18 @@ class Geary.RFC822.PartTest : TestCase {
|
|||
|
||||
private GMime.Part new_part(string? mime_type,
|
||||
uint8[] body) {
|
||||
GMime.Part part = new GMime.Part();
|
||||
GMime.Part part = new GMime.Part.with_type("text", "plain");
|
||||
if (mime_type != null) {
|
||||
part.set_content_type(new GMime.ContentType.from_string(mime_type));
|
||||
part.set_content_type(GMime.ContentType.parse(
|
||||
Geary.RFC822.get_parser_options(),
|
||||
mime_type
|
||||
));
|
||||
}
|
||||
GMime.DataWrapper body_wrapper = new GMime.DataWrapper.with_stream(
|
||||
new GMime.StreamMem.with_buffer(body),
|
||||
GMime.ContentEncoding.BINARY
|
||||
);
|
||||
part.set_content_object(body_wrapper);
|
||||
part.set_content(body_wrapper);
|
||||
part.encode(GMime.EncodingConstraint.7BIT);
|
||||
return part;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
<template class="ComposerHeaderbar" parent="GtkHeaderBar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="detach_start">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
|||
|
|
@ -48,12 +48,6 @@
|
|||
<attribute name="action">win.compose-as-html</attribute>
|
||||
</item>
|
||||
</section>
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Show Extended Fields</attribute>
|
||||
<attribute name="action">win.show-extended</attribute>
|
||||
</item>
|
||||
</section>
|
||||
</menu>
|
||||
|
||||
<menu id="plain_menu_model">
|
||||
|
|
@ -63,12 +57,6 @@
|
|||
<attribute name="action">win.compose-as-html</attribute>
|
||||
</item>
|
||||
</section>
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Show Extended Fields</attribute>
|
||||
<attribute name="action">win.show-extended-headers</attribute>
|
||||
</item>
|
||||
</section>
|
||||
</menu>
|
||||
|
||||
<menu id="context_menu_model">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<!-- Generated with glade 3.22.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<template class="ComposerWidget" parent="GtkEventBox">
|
||||
|
|
@ -40,194 +40,32 @@
|
|||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkGrid" id="recipients">
|
||||
<object class="GtkBox" id="recipients">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_start">6</property>
|
||||
<property name="margin_end">6</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="to_label">
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="label" translatable="yes" comments="Address(es) e-mail is to be sent to">_To</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="cc_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="label" translatable="yes">_Cc</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="to_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="cc_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="subject_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="on_subject_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="subject_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="label" translatable="yes">_Subject</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">subject_entry</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="bcc_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="label" translatable="yes">_Bcc</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="bcc_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="reply_to_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="label" translatable="yes">_Reply-To</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="reply_to_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="from_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes" comments="Geary account mail will be sent from">From</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="from_container">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="from_single">
|
||||
<object class="GtkLabel" id="from_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes" comments="Geary account mail will be sent from">From</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
@ -236,10 +74,35 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="from_multiple">
|
||||
<object class="GtkBox" id="from_container">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="changed" handler="on_envelope_changed" swapped="no"/>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="from_single">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="from_multiple">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="changed" handler="on_envelope_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
@ -249,8 +112,280 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="to_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes" comments="Address(es) e-mail is to be sent to">_To</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="to_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Show Cc, Bcc, and Reply-To fields</property>
|
||||
<property name="action_name">win.show-extended-headers</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">view-more-horizontal-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">13</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="extended_fields_revealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="cc_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes">_Cc</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="cc_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="bcc_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes">_Bcc</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="bcc_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="reply_to_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes">_Reply-To</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">to_box</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="reply_to_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">14</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="subject_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="label" translatable="yes">_Subject</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="justify">right</property>
|
||||
<property name="mnemonic_widget">subject_entry</property>
|
||||
<property name="xalign">1</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="subject_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="on_subject_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">15</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
@ -859,6 +994,9 @@
|
|||
<class name="top"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="index">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -910,4 +1048,14 @@
|
|||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkSizeGroup" id="field_labels">
|
||||
<widgets>
|
||||
<widget name="from_label"/>
|
||||
<widget name="to_label"/>
|
||||
<widget name="cc_label"/>
|
||||
<widget name="bcc_label"/>
|
||||
<widget name="reply_to_label"/>
|
||||
<widget name="subject_label"/>
|
||||
</widgets>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue