From 3af290e80273c195916883de75d7ae9c4b820a93 Mon Sep 17 00:00:00 2001 From: Juliano Dorneles dos Santos Date: Sun, 21 May 2023 15:50:07 +0000 Subject: [PATCH 01/26] Translated using Weblate (Portuguese) Currently translated at 100.0% (262 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/pt/ --- po/pt.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/pt.po b/po/pt.po index 4e41b14a9..454c551a2 100644 --- a/po/pt.po +++ b/po/pt.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2023-03-13 11:40+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2023-05-22 16:48+0000\n" +"Last-Translator: Juliano Dorneles dos Santos \n" "Language-Team: Portuguese \n" +"main/pt/>\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.16.2-dev\n" +"X-Generator: Weblate 4.18-dev\n" #: data/app.drey.PaperPlane.desktop.in.in:3 #: data/app.drey.PaperPlane.metainfo.xml.in.in:7 @@ -1038,7 +1038,7 @@ msgstr "Imagens" #: src/session/content/chat_action_bar.rs:790 msgid "Unmute" -msgstr "Desmutar" +msgstr "Restaurar som" #: src/session/content/chat_action_bar.rs:792 msgid "Mute" From 0b1bfdb8a1a7d9cede258f591d802409b5842476 Mon Sep 17 00:00:00 2001 From: Karol Lademan Date: Thu, 25 May 2023 16:07:36 +0000 Subject: [PATCH 02/26] Translated using Weblate (Polish) Currently translated at 100.0% (262 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/pl/ --- po/pl.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/po/pl.po b/po/pl.po index a7280d57b..2e9cb39d4 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,17 +8,17 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2023-03-13 11:40+0000\n" -"Last-Translator: Maciek-Hetman \n" -"Language-Team: Polish \n" +"PO-Revision-Date: 2023-05-26 16:48+0000\n" +"Last-Translator: Karol Lademan \n" +"Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.16.2-dev\n" +"X-Generator: Weblate 4.18-dev\n" #: data/app.drey.PaperPlane.desktop.in.in:3 #: data/app.drey.PaperPlane.metainfo.xml.in.in:7 @@ -763,7 +763,6 @@ msgstr[1] "widziano {num} godziny temu" msgstr[2] "widziano {num} godzin temu" #: src/strings.rs:421 -#, fuzzy msgid "last seen {num} minute ago" msgid_plural "last seen {num} minutes ago" msgstr[0] "widziano minutę temu" From 5cf8b5d63fbcd0942c064c2150987ad17322d7db Mon Sep 17 00:00:00 2001 From: Juliano Dorneles dos Santos Date: Sun, 28 May 2023 14:46:44 +0000 Subject: [PATCH 03/26] Translated using Weblate (Portuguese) Currently translated at 100.0% (262 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/pt/ --- po/pt.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/pt.po b/po/pt.po index 454c551a2..38a15b182 100644 --- a/po/pt.po +++ b/po/pt.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2023-05-22 16:48+0000\n" +"PO-Revision-Date: 2023-05-28 17:33+0000\n" "Last-Translator: Juliano Dorneles dos Santos \n" "Language-Team: Portuguese \n" @@ -1042,7 +1042,7 @@ msgstr "Restaurar som" #: src/session/content/chat_action_bar.rs:792 msgid "Mute" -msgstr "Mutar" +msgstr "Silenciar" #: src/session/content/chat_history.rs:230 msgid "Leave chat?" From 2cf879fcb9dac8886095c6eb6de0834e96f4a398 Mon Sep 17 00:00:00 2001 From: JULIANE LEITE Date: Sat, 3 Jun 2023 01:01:51 +0000 Subject: [PATCH 04/26] Translated using Weblate (Russian) Currently translated at 81.6% (214 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/ru/ --- po/ru.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/po/ru.po b/po/ru.po index e594a40de..1e2169cf8 100644 --- a/po/ru.po +++ b/po/ru.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2023-04-23 14:47+0000\n" -"Last-Translator: \"Кроватко Одеялкин (Кроватко)\" \n" -"Language-Team: Russian \n" +"PO-Revision-Date: 2023-06-04 01:48+0000\n" +"Last-Translator: JULIANE LEITE \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1141,6 +1141,7 @@ msgid "Do you want to delete this message for everyone?" msgstr "Вы хотите удалить это сообщение для всех?" #: src/session/content/message_row/mod.rs:173 +#, fuzzy msgid "Do you want to delete this message?" msgstr "Вы хотите удалить это сообщение?" From 744428d105e8350239011f1bfdefc7d766864a51 Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Thu, 8 Jun 2023 21:34:15 +0200 Subject: [PATCH 05/26] chore(cargo): Update dependencies --- Cargo.lock | 116 ++++++++++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ed6da7cd..fdff4d484 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,13 +10,19 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -97,9 +103,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cairo-rs" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8af54f5d48af1226928adc1f57edd22f5df1349e7da1fc96ae15cf43db0e871" +checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a" dependencies = [ "bitflags", "cairo-sys-rs", @@ -111,9 +117,9 @@ dependencies = [ [[package]] name = "cairo-sys-rs" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55382a01d30e5e53f185eee269124f5e21ab526595b872751278dfbb463594e" +checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1" dependencies = [ "glib-sys", "libc", @@ -137,9 +143,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" +checksum = "e70d3ad08698a0568b0562f22710fe6bfc1f4a61a367c77d0398c562eadd453a" dependencies = [ "smallvec", "target-lexicon", @@ -153,12 +159,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", - "num-integer", "num-traits", "serde", "winapi", @@ -285,9 +291,9 @@ dependencies = [ [[package]] name = "field-offset" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", "rustc_version", @@ -396,9 +402,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b023fbe0c6b407bd3d9805d107d9800da3829dc5a676653210f1d5f16d7f59bf" +checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717" dependencies = [ "bitflags", "gdk-pixbuf-sys", @@ -410,9 +416,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf-sys" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b41bd2b44ed49d99277d3925652a163038bd5ed943ec9809338ffb2f4391e3b" +checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb" dependencies = [ "gio-sys", "glib-sys", @@ -476,9 +482,9 @@ dependencies = [ [[package]] name = "gio" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d14522e56c6bcb6f7a3aebc25cbcfb06776af4c0c25232b601b4383252d7cb92" +checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a" dependencies = [ "bitflags", "futures-channel", @@ -496,9 +502,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.17.4" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1d43b0d7968b48455244ecafe41192871257f5740aa6b095eb19db78e362a5" +checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3" dependencies = [ "glib-sys", "gobject-sys", @@ -509,9 +515,9 @@ dependencies = [ [[package]] name = "glib" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f1de7cbde31ea4f0a919453a2dcece5d54d5b70e08f8ad254dc4840f5f09b6" +checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b" dependencies = [ "bitflags", "futures-channel", @@ -532,9 +538,9 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7206c5c03851ef126ea1444990e81fdd6765fb799d5bc694e4897ca01bb97f" +checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26" dependencies = [ "anyhow", "heck", @@ -547,9 +553,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.17.4" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f00ad0a1bf548e61adfff15d83430941d9e1bb620e334f779edd1c745680a5" +checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0" dependencies = [ "libc", "system-deps", @@ -563,9 +569,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "gobject-sys" -version = "0.17.4" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e75b0000a64632b2d8ca3cf856af9308e3a970844f6e9659bd197f026793d0" +checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062" dependencies = [ "glib-sys", "libc", @@ -574,9 +580,9 @@ dependencies = [ [[package]] name = "graphene-rs" -version = "0.17.1" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cf11565bb0e4dfc2f99d4775b6c329f0d40a2cff9c0066214d31a0e1b46256" +checksum = "def4bb01265b59ed548b05455040d272d989b3012c42d4c1bbd39083cb9b40d9" dependencies = [ "glib", "graphene-sys", @@ -585,9 +591,9 @@ dependencies = [ [[package]] name = "graphene-sys" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf80a4849a8d9565410a8fec6fc3678e9c617f4ac7be182ca55ab75016e07af9" +checksum = "1856fc817e6a6675e36cea0bd9a3afe296f5d9709d1e2d3182803ac77f0ab21d" dependencies = [ "glib-sys", "libc", @@ -734,9 +740,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -878,9 +884,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.144" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "libloading" @@ -934,9 +940,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] @@ -1028,15 +1034,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "pango" -version = "0.17.4" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c280b82a881e4208afb3359a8e7fde27a1b272280981f1f34610bed5770d37" +checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48" dependencies = [ "bitflags", "gio", @@ -1048,9 +1054,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.17.0" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4293d0f0b5525eb5c24734d30b0ed02cd02aa734f216883f376b54de49625de8" +checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195" dependencies = [ "glib-sys", "gobject-sys", @@ -1175,9 +1181,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" dependencies = [ "unicode-ident", ] @@ -1209,9 +1215,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.3" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", @@ -1293,18 +1299,18 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.163" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.163" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", @@ -1502,9 +1508,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" dependencies = [ "itoa", "serde", From 86eb25e9d73023e96a0b5bc546c1b85c31a0a36e Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Thu, 8 Jun 2023 21:53:41 +0200 Subject: [PATCH 06/26] chore(metainfo): Update changelog --- data/app.drey.PaperPlane.metainfo.xml.in.in | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/data/app.drey.PaperPlane.metainfo.xml.in.in b/data/app.drey.PaperPlane.metainfo.xml.in.in index d0a35deaa..036c8e107 100644 --- a/data/app.drey.PaperPlane.metainfo.xml.in.in +++ b/data/app.drey.PaperPlane.metainfo.xml.in.in @@ -41,6 +41,20 @@ https://github.com/paper-plane-developers/paper-plane/issues + + +

The second beta release of Paper Plane 0.1.0 contains the following features, fixes and chores:

+
    +
  • Blueprint compiler has been updated to version 0.8.1, thanks to @alissonlauffer.
  • +
  • The chat history now has a background image, which is animated when new messages arrive, thanks to @yuraiz.
  • +
  • A bug was fixed that lead to an application crash if selecting non-existing chats from the contacts window, thank to @alissonlauffer.
  • +
  • Avatars of deleted accounts now have a ghost icon set, thanks to @karl0d.
  • +
  • The application will now be built with more aggressive compiler options, which should result in a smaller and maybe faster binary.
  • +
  • Dependencies have been updated.
  • +
  • Portuguese and Polish translation have been updated, thanks to @jvlianodorneles and @karl0d.
  • +
+
+

Paper Plane 0.1.0-beta.1 is the first release for enthusiasts to try out and play around with.

From 647435439893e3b1a55faf1000b771a593b9cd3c Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Thu, 8 Jun 2023 21:55:40 +0200 Subject: [PATCH 07/26] chore: Release v0.1.0-beta.2 --- Cargo.lock | 2 +- Cargo.toml | 2 +- meson.build | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fdff4d484..b418f822c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1066,7 +1066,7 @@ dependencies = [ [[package]] name = "paper-plane" -version = "0.1.0-beta.1" +version = "0.1.0-beta.2" dependencies = [ "anyhow", "ellipse", diff --git a/Cargo.toml b/Cargo.toml index da061b6e5..cd8457ddc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "paper-plane" -version = "0.1.0-beta.1" +version = "0.1.0-beta.2" authors = ["Marco Melorio ", "Marcus Behrendt "] edition = "2021" diff --git a/meson.build b/meson.build index 22cc616e6..7ac56d094 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project( 'paper-plane', 'rust', - version: '0.1.0-beta.1', + version: '0.1.0-beta.2', meson_version: '>= 0.59', ) From 42d1abd38977205f481304c1aa3293291d4f1754 Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sat, 10 Jun 2023 22:22:00 +0200 Subject: [PATCH 08/26] chore(desktop-file): Add registered categories These categories were taken form the desktop file of the official client. --- data/app.drey.PaperPlane.desktop.in.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/app.drey.PaperPlane.desktop.in.in b/data/app.drey.PaperPlane.desktop.in.in index 058f804b1..63178c89a 100644 --- a/data/app.drey.PaperPlane.desktop.in.in +++ b/data/app.drey.PaperPlane.desktop.in.in @@ -4,7 +4,7 @@ Comment=Chat over Telegram on a modern and elegant client Type=Application Exec=paper-plane Terminal=false -Categories=GNOME;GTK; +Categories=GNOME;GTK;Chat;Network;InstantMessaging; Keywords=Gnome;GTK; # Translators: Do NOT translate or transliterate this text (this is an icon file name)! Icon=@icon@ From 7fab519cb7b64bfe79d5c09eaea4adbb5777e9d9 Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sat, 10 Jun 2023 22:30:29 +0200 Subject: [PATCH 09/26] chore(desktop-file): Add some useful keywords Some of them were taken form the desktop file of the official client. --- data/app.drey.PaperPlane.desktop.in.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/app.drey.PaperPlane.desktop.in.in b/data/app.drey.PaperPlane.desktop.in.in index 63178c89a..2524464d7 100644 --- a/data/app.drey.PaperPlane.desktop.in.in +++ b/data/app.drey.PaperPlane.desktop.in.in @@ -5,7 +5,7 @@ Type=Application Exec=paper-plane Terminal=false Categories=GNOME;GTK;Chat;Network;InstantMessaging; -Keywords=Gnome;GTK; +Keywords=Gnome;GTK;telegram;tg;chat;im;messaging;messenger; # Translators: Do NOT translate or transliterate this text (this is an icon file name)! Icon=@icon@ StartupNotify=true From 376261d3193a5199429eb961339590ffe6c14513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sabri=20=C3=9Cnal?= Date: Sat, 10 Jun 2023 16:04:50 +0000 Subject: [PATCH 10/26] chore(l10n): Update Turkish translation Currently translated at 100.0% (262 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/tr/ --- po/tr.po | 456 +++++++++++++++++++++++++------------------------------ 1 file changed, 203 insertions(+), 253 deletions(-) diff --git a/po/tr.po b/po/tr.po index 0e01b0403..d39c202b6 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2022-09-23 23:26+0000\n" +"PO-Revision-Date: 2023-06-10 19:01+0000\n" "Last-Translator: Sabri Ünal \n" -"Language-Team: Turkish \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.18-dev\n" #: data/app.drey.PaperPlane.desktop.in.in:3 #: data/app.drey.PaperPlane.metainfo.xml.in.in:7 @@ -54,12 +54,12 @@ msgid "Recently used sessions" msgstr "Son kullanılan oturumlar" #: data/app.drey.PaperPlane.gschema.xml.in:22 -#, fuzzy msgid "" "A list of most recently used sessions, sorted by their database directory " "names" msgstr "" -"Veritabanı dizin adlarına göre son kullanılan oturumların sıralı listesi" +"En son kullanılan oturumların veri tabanı dizin adlarına göre sıralanmış bir " +"listesi" #: data/app.drey.PaperPlane.gschema.xml.in:31 #: data/resources/ui/preferences-window.blp:7 @@ -99,34 +99,32 @@ msgid "Select a chat to start messaging." msgstr "Mesajlaşmaya başlamak için bir sohbet seçin." #: data/resources/ui/content-chat-action-bar.blp:68 -#, fuzzy msgid "Message" -msgstr "Sesli mesaj" +msgstr "İleti" #: data/resources/ui/content-chat-action-bar.blp:96 msgid "Unblock" -msgstr "" +msgstr "Engellemeyi Kaldır" #: data/resources/ui/content-chat-action-bar.blp:113 msgid "Join" -msgstr "" +msgstr "Katıl" #: data/resources/ui/content-chat-history.ui:74 msgid "Scroll to bottom" -msgstr "" +msgstr "En alta kaydır" #: data/resources/ui/content-chat-history.ui:154 msgid "View Info" msgstr "Bilgileri Görüntüle" #: data/resources/ui/content-chat-history.ui:158 -#, fuzzy msgid "Leave Chat" -msgstr "Sohbetlerde Ara" +msgstr "Konuşmadan Ayrıl" #: data/resources/ui/content-send-photo-dialog.blp:29 msgid "Caption" -msgstr "" +msgstr "Başlık" #: data/resources/ui/login.blp:25 msgid "_Previous" @@ -138,7 +136,7 @@ msgstr "_Sonraki" #: data/resources/ui/login.blp:68 msgid "Welcome" -msgstr "" +msgstr "Hoş Geldiniz" #: data/resources/ui/login.blp:88 msgid "_Log in using QR code" @@ -163,7 +161,7 @@ msgstr "Kod" #: data/resources/ui/login.blp:185 msgid "The code cannot be sent anymore." -msgstr "" +msgstr "Kod artık gönderilemez." #: data/resources/ui/login.blp:218 msgid "Register New Account" @@ -206,14 +204,12 @@ msgid "Use Recovery Code" msgstr "Kurtarma Kodunu Kullanın" #: data/resources/ui/login.blp:363 -#, fuzzy msgid "" "When you set your cloud password, you provided a recovery e-mail address. A " "code can be sent there to reset your password." msgstr "" -"Bulut parolalarınızı ayarlarken bir kurtarma e-posta adresi verdiniz. Bu e-" -"posta adresine parolanızı sıfırlamak için kullanabileceğiniz bir kod " -"gönderebiliriz." +"Bulut parolanızı ayarladığınızda, bir kurtarma e-posta adresi sağladınız. " +"Parolanızı sıfırlamak için oraya bir kod gönderilebilir." #: data/resources/ui/login.blp:379 msgid "_Send recovery code" @@ -228,36 +224,32 @@ msgid "_Delete Account" msgstr "_Hesabı Sil" #: data/resources/ui/login.blp:460 -#, fuzzy msgid "Enter the code e-mailed to you" -msgstr "E-Posta ile Gönderilen Kodu Girin" +msgstr "Size e-posta ile gönderilen kodu girin" #: data/resources/ui/login.blp:493 -#, fuzzy msgid "Unable to access your e-mail?" -msgstr "_E-postanıza erişemiyor musunuz?" +msgstr "E-postanıza erişemiyor musunuz?" #: data/resources/ui/message-menu.blp:6 msgid "_Reply" -msgstr "" +msgstr "_Yanıtla" #: data/resources/ui/message-menu.blp:12 msgid "_Edit" -msgstr "" +msgstr "_Düzenle" #: data/resources/ui/message-menu.blp:18 -#, fuzzy msgid "Delete for Ever_yone" -msgstr "_Hesabı Sil" +msgstr "_Herkes İçin Sil" #: data/resources/ui/message-menu.blp:24 -#, fuzzy msgid "_Delete for Me" -msgstr "_Hesabı Sil" +msgstr "_Benim İçin Sil" #: data/resources/ui/phone-number-input.blp:12 msgid "Country" -msgstr "" +msgstr "Ülke" #: data/resources/ui/phone-number-input.blp:18 msgid "Phone Number" @@ -273,15 +265,15 @@ msgstr "Koyu Tema" #: data/resources/ui/preferences-window.blp:29 msgid "Storage" -msgstr "" +msgstr "Depolama" #: data/resources/ui/preferences-window.blp:32 msgid "Cache Size" -msgstr "" +msgstr "Önbellek Boyutu" #: data/resources/ui/preferences-window.blp:42 msgid "Clear Cache" -msgstr "" +msgstr "Önbelleği Temizle" #: data/resources/ui/shortcuts.blp:11 msgctxt "shortcut window" @@ -309,15 +301,14 @@ msgid "Search Chats" msgstr "Sohbetlerde Ara" #: data/resources/ui/shortcuts.blp:34 -#, fuzzy msgctxt "shortcut window" msgid "Chat History" -msgstr "Sohbet Listesi" +msgstr "Sohbet Geçmişi" #: data/resources/ui/shortcuts.blp:37 msgctxt "shortcut window" msgid "Send Photo from Clipboard" -msgstr "" +msgstr "Panodan Fotoğraf Gönder" #: data/resources/ui/sidebar.ui:6 msgid "_Log Out" @@ -325,7 +316,7 @@ msgstr "_Oturumu Kapat" #: data/resources/ui/sidebar.ui:12 msgid "_Contacts" -msgstr "" +msgstr "_Kişiler" #: data/resources/ui/sidebar.ui:18 msgid "_Preferences" @@ -341,57 +332,52 @@ msgstr "Paper Plane _Hakkında" #: data/resources/ui/sidebar-row-menu.blp:6 msgid "_Pin" -msgstr "" +msgstr "_Sabitle" #: data/resources/ui/sidebar-row-menu.blp:12 msgid "_Unpin" -msgstr "" +msgstr "_Sabitlemeyi Kaldır" #: data/resources/ui/sidebar-row-menu.blp:18 msgid "_Mark as Unread" -msgstr "" +msgstr "Okunmadı Olarak _İmle" #: data/resources/ui/sidebar-row-menu.blp:24 msgid "Mark as _Read" -msgstr "" +msgstr "_Okundu Olarak İmle" #: data/resources/ui/sidebar-search.ui:12 -#, fuzzy msgid "Search" -msgstr "Sohbetlerde Ara" +msgstr "Ara" #: data/resources/ui/sidebar-search.ui:75 -#, fuzzy msgid "No Search Results" -msgstr "Sohbetlerde Ara" +msgstr "Arama Sonucu Bulunamadı" #: data/resources/ui/sidebar-search.ui:76 msgid "Try a different search." -msgstr "" +msgstr "Farklı bir arama deneyin." #: src/application.rs:166 -#, fuzzy msgid "Paper Plane developers" -msgstr "Paper Plane" +msgstr "Paper Plane geliştiricileri" #: src/application.rs:182 msgid "Sponsors" -msgstr "" +msgstr "Sponsorlar" #: src/expressions.rs:24 src/session/sidebar/search/item_row.rs:112 #: src/session/sidebar/search/mod.rs:205 -#, fuzzy msgid "Saved Messages" -msgstr "Sesli mesaj" +msgstr "Kayıtlı İletiler" #: src/expressions.rs:26 src/expressions.rs:48 src/strings.rs:383 -#, fuzzy msgid "Deleted Account" -msgstr "_Hesabı Sil" +msgstr "Silinmiş Hesap" #: src/expressions.rs:92 msgid "The admins of this group have restricted you from writing here" -msgstr "" +msgstr "Bu grubun yöneticileri buraya yazmanızı kısıtladı" #. Translators: This is a time representation, without seconds. #. Here you may want to change to a 24-hours representation, based on your locale. @@ -405,53 +391,48 @@ msgstr "%H:%M" #. Here you may want to change to a 24-hours representation and change order, based on your locale. #. You can use this site to learn more: https://www.strfti.me/ #: src/expressions.rs:110 -#, fuzzy msgid "%B %e, %Y %l:%M %p" -msgstr "%e %B %Y" +msgstr "%B %e, %Y %l:%M %p" #: src/expressions.rs:120 msgid "Writing messages isn't allowed in this group." -msgstr "" +msgstr "Bu grupta ileti yazmaya izin verilmemektedir." #: src/login.rs:372 -#, fuzzy msgid "" "One way to continue using your account is to delete and then recreate it" msgstr "" -"Hesabınızı kullanmaya devam etmenin bir yolu, hesabınızı silip yeniden " -"oluşturmaktır" +"Hesabınızı kullanmaya devam etmenin bir yolu onu silip yeniden oluşturmaktır" #: src/login.rs:377 -#, fuzzy msgid "" "Since you have not provided a recovery e-mail address, the only way to " "continue using your account is to delete and then recreate it" msgstr "" -"Bir kurtarma e-posta adresi vermediğiniz için hesabınızı kullanmaya devam " -"etmenin tek yolu hesabınızı silip yeniden oluşturmaktır" +"Bir kurtarma e-posta adresi sağlamadığınız için, hesabınızı kullanmaya devam " +"etmenin tek yolu hesabınızı silmek ve ardından yeniden oluşturmaktır" #: src/login.rs:385 msgid "" "Please note, you will lose all your chats and messages, along with any media " "and files you shared!" msgstr "" -"Lütfen tüm sohbetlerinizi ve mesajlarınızı, paylaştığınız medya ve " +"Lütfen tüm sohbetlerinizi ve iletilerinizi, paylaştığınız ortam ve " "dosyalarla birlikte kaybedeceğinizi unutmayın!" #: src/login.rs:676 -#, fuzzy msgid "Do you accept the Terms of Service?" -msgstr "Hizmet Koşullarını Kabul Ediyor musunuz?" +msgstr "Hizmet Koşullarını kabul ediyor musunuz?" #: src/login.rs:677 src/session/content/chat_history.rs:233 #: src/session/content/message_row/mod.rs:183 msgid "_No" -msgstr "" +msgstr "_ Hayır" #: src/login.rs:677 src/session/content/chat_history.rs:233 #: src/session/content/message_row/mod.rs:183 msgid "_Yes" -msgstr "" +msgstr "_Evet" #: src/login.rs:680 msgid "Terms of Service" @@ -459,7 +440,7 @@ msgstr "Hizmet Koşulları" #: src/login.rs:681 src/login.rs:991 msgid "_OK" -msgstr "" +msgstr "_Tamam" #: src/login.rs:903 msgid "Warning" @@ -472,365 +453,353 @@ msgid "" "\n" "Do you want to delete your account?" msgstr "" -"Paylaştığınız tüm medya ve dosyalarla birlikte tüm sohbetlerinizi ve " -"mesajlarınızı kaybedeceksiniz!\n" +"Paylaştığınız tüm ortam ve dosyalarla birlikte tüm sohbetlerinizi ve " +"iletilerinizi kaybedeceksiniz!\n" "\n" "Hesabınızı silmek istiyor musunuz?" #: src/login.rs:911 msgid "_Cancel" -msgstr "" +msgstr "İ_ptal" #: src/login.rs:984 msgid "Sorry" msgstr "Üzgünüm" #: src/login.rs:986 -#, fuzzy msgid "" "If you can't restore access to the e-mail, your remaining options are either " "to remember your password or to delete and then recreate your account." msgstr "" -"E-postaya erişim sağlayamıyoranız, geriye kalan seçenekleriniz ya parolanızı " -"hatırlamak ya da hesabınızı silip yeniden oluşturmaktır." +"E-postaya erişimi geri getiremiyorsanız, geriye kalan seçenekleriniz ya " +"parolanızı hatırlamak ya da hesabınızı silip yeniden oluşturmaktır." #. Translators: This is an authentication method #: src/login.rs:1058 -#, fuzzy msgid "Telegram" -msgstr "Paper Plane" +msgstr "Telegram" #. Translators: This is an authentication method #: src/login.rs:1060 msgid "SMS" -msgstr "" +msgstr "SMS" #. Translators: This is an authentication method #: src/login.rs:1062 msgid "Call" -msgstr "" +msgstr "Çağrı" #. Translators: This is an authentication method #: src/login.rs:1064 msgid "Flash Call" -msgstr "" +msgstr "Hızlı Çağrı" #. Translators: This is an authentication method #: src/login.rs:1066 -#, fuzzy msgid "Missed Call" -msgstr "Cevapsız arama" +msgstr "Cevapsız Arama" #. Translators: This is an authentication method #: src/login.rs:1068 msgid "Fragment" -msgstr "" +msgstr "Parça" #: src/phone_number_input.rs:204 msgid "You entered an invalid country code." -msgstr "" +msgstr "Geçersiz bir ülke kodu girdiniz." #: src/strings.rs:28 msgid "{sender} is choosing a contact" -msgstr "" +msgstr "{sender} kişi seçiyor" #: src/strings.rs:32 msgid "{sender1} and {sender2} are choosing contacts" -msgstr "" +msgstr "{sender1} ve {sender2} kişi seçiyor" #: src/strings.rs:39 msgid "{num} people are choosing contacts" -msgstr "" +msgstr "{num} kişi, kişi seçiyor" #: src/strings.rs:44 msgid "choosing a contact" -msgstr "" +msgstr "kişi seçme" #: src/strings.rs:51 msgid "{sender} is choosing a location" -msgstr "" +msgstr "{sender} konum seçiyor" #: src/strings.rs:55 msgid "{sender1} and {sender2} are choosing locations" -msgstr "" +msgstr "{sender1} ve {sender2} konum seçiyor" #: src/strings.rs:62 msgid "{num} people are choosing locations" -msgstr "" +msgstr "{num} kişi konum seçiyor" #: src/strings.rs:67 msgid "choosing a location" -msgstr "" +msgstr "konum seçme" #: src/strings.rs:74 msgid "{sender} is choosing a sticker" -msgstr "" +msgstr "{sender} çıkartma seçiyor" #: src/strings.rs:78 msgid "{sender1} and {sender2} are choosing stickers" -msgstr "" +msgstr "{sender1} ve {sender2} çıkartma seçiyor" #: src/strings.rs:85 msgid "{num} people are choosing stickers" -msgstr "" +msgstr "{num} kişi çıkartma seçiyor" #: src/strings.rs:90 msgid "choosing a sticker" -msgstr "" +msgstr "çıkartma seçme" #: src/strings.rs:97 -#, fuzzy msgid "{sender} is recording a video" -msgstr "Gelen görüntülü arama" +msgstr "{sender} video kaydediyor" #: src/strings.rs:101 msgid "{sender1} and {sender2} are recording videos" -msgstr "" +msgstr "{sender1} ve {sender2} video kaydediyor" #: src/strings.rs:108 -#, fuzzy msgid "{num} people are recording videos" -msgstr "Gelen görüntülü arama" +msgstr "{num} kişi video kaydediyor" #: src/strings.rs:113 -#, fuzzy msgid "recording a video" -msgstr "Gelen görüntülü arama" +msgstr "video kaydetme" #: src/strings.rs:120 -#, fuzzy msgid "{sender} is recording a video note" -msgstr "Gelen görüntülü arama" +msgstr "{sender} bir video notu kaydediyor" #: src/strings.rs:124 msgid "{sender1} and {sender2} are recording video notes" -msgstr "" +msgstr "{sender1} ve {sender2} video notu kaydediyor" #: src/strings.rs:131 msgid "{num} people are recording video notes" -msgstr "" +msgstr "{num} kişi video notu kaydediyor" #: src/strings.rs:136 msgid "recording a video note" -msgstr "" +msgstr "video notu kaydetme" #: src/strings.rs:143 -#, fuzzy msgid "{sender} is recording a voice note" -msgstr "Gelen görüntülü arama" +msgstr "{sender} sesli not kaydediyor" #: src/strings.rs:147 msgid "{sender1} and {sender2} are recording voice notes" -msgstr "" +msgstr "{sender1} ve {sender2} sesli not kaydediyor" #: src/strings.rs:154 msgid "{num} people are recording voice notes" -msgstr "" +msgstr "{num} kişi sesli not kaydediyor" #: src/strings.rs:159 msgid "recording a voice note" -msgstr "" +msgstr "sesli not kaydetme" #: src/strings.rs:166 msgid "{sender} is playing a game" -msgstr "" +msgstr "{sender} oyun oynuyor" #: src/strings.rs:170 msgid "{sender1} and {sender2} are playing games" -msgstr "" +msgstr "{sender1} ve {sender2} oyun oynuyor" #: src/strings.rs:177 msgid "{num} people are playing games" -msgstr "" +msgstr "{num} kişi oyun oynuyor" #: src/strings.rs:182 msgid "playing a game" -msgstr "" +msgstr "oyun oynama" #: src/strings.rs:189 -#, fuzzy msgid "{sender} is typing" -msgstr "Gruba katıldınız" +msgstr "{sender} yazıyor" #: src/strings.rs:193 msgid "{sender1} and {sender2} are typing" -msgstr "" +msgstr "{sender1} ve {sender2} yazıyor" #: src/strings.rs:199 msgid "{num} people are typing" -msgstr "" +msgstr "{num} kişi yazıyor" #: src/strings.rs:202 msgid "typing" -msgstr "" +msgstr "yazma" #: src/strings.rs:209 msgid "{sender} is uploading a document ({progress}%)" -msgstr "" +msgstr "{sender} belge yüklüyor (%{progress})" #: src/strings.rs:216 msgid "{sender1} and {sender2} are uploading documents" -msgstr "" +msgstr "{sender1} ve {sender2} belge yüklüyor" #: src/strings.rs:223 msgid "{num} people are uploading documents" -msgstr "" +msgstr "{num} kişi belge yüklüyor" #: src/strings.rs:229 msgid "uploading a document ({progress}%)" -msgstr "" +msgstr "belge yükleme (%{progress})" #: src/strings.rs:238 msgid "{sender} is uploading a photo ({progress}%)" -msgstr "" +msgstr "{sender} fotoğraf yüklüyor (%{progress})" #: src/strings.rs:245 -#, fuzzy msgid "{sender1} and {sender2} are uploading photos" -msgstr "Grup fotoğrafını kaldırdınız" +msgstr "{sender1} ve {sender2} fotoğraf yüklüyor" #: src/strings.rs:252 msgid "{num} people are uploading photos" -msgstr "" +msgstr "{num} kişi fotoğraf yüklüyor" #: src/strings.rs:258 msgid "uploading a photo ({progress}%)" -msgstr "" +msgstr "fotoğraf yükleme (%{progress})" #: src/strings.rs:267 msgid "{sender} is uploading a video ({progress}%)" -msgstr "" +msgstr "{sender} video yüklüyor (%{progress})" #: src/strings.rs:274 msgid "{sender1} and {sender2} are uploading videos" -msgstr "" +msgstr "{sender1} ve {sender2} video yüklüyor" #: src/strings.rs:281 msgid "{num} people are uploading videos" -msgstr "" +msgstr "{num} kişi video yüklüyor" #: src/strings.rs:287 msgid "uploading a video ({progress}%)" -msgstr "" +msgstr "video yükleniyor (%{progress})" #: src/strings.rs:296 msgid "{sender} is uploading a video note ({progress}%)" -msgstr "" +msgstr "{sender} video notu yüklüyor (%{progress})" #: src/strings.rs:303 msgid "{sender1} and {sender2} are uploading video notes" -msgstr "" +msgstr "{sender1} ve {sender2} video notu yüklüyor" #: src/strings.rs:310 msgid "{num} people are uploading video notes" -msgstr "" +msgstr "{num} kişi video notu yüklüyor" #: src/strings.rs:316 msgid "uploading a video note ({progress}%)" -msgstr "" +msgstr "video notu yükleniyor (%{progress})" #: src/strings.rs:325 msgid "{sender} is uploading a voice note ({progress}%)" -msgstr "" +msgstr "{sender} sesli not yüklüyor (%{progress})" #: src/strings.rs:332 msgid "{sender1} and {sender2} are uploading voice notes" -msgstr "" +msgstr "{sender1} ve {sender2} sesli not yüklüyor" #: src/strings.rs:339 msgid "{num} people are uploading voice notes" -msgstr "" +msgstr "{num} kişi sesli not yüklüyor" #: src/strings.rs:345 msgid "uploading a voice note ({progress}%)" -msgstr "" +msgstr "sesli not yükleniyor (%{progress})" #: src/strings.rs:354 msgid "{sender} is watching an animation {emoji}" -msgstr "" +msgstr "{sender} animasyon izliyor {emoji}" #: src/strings.rs:361 msgid "{sender1} and {sender2} are watching animations {emoji}" -msgstr "" +msgstr "{sender1} ve {sender2} animasyon izliyor {emoji}" #: src/strings.rs:369 msgid "{num} people are watching animations {emoji}" -msgstr "" +msgstr "{num} kişi animasyon izliyor {emoji}" #: src/strings.rs:374 msgid "watching an animation" -msgstr "" +msgstr "animasyon izleme" #: src/strings.rs:395 msgid "last seen a long time ago" -msgstr "" +msgstr "en son uzun zaman önce görüldü" #: src/strings.rs:396 msgid "online" -msgstr "" +msgstr "çevrim içi" #. Translators: This is an online status with the date #: src/strings.rs:405 #, c-format msgid "last seen %x" -msgstr "" +msgstr "son görülme %x" #. Translators: This is an online status with the last seen time, without seconds #. Here you may want to change to a 24-hours representation, based on your locale. #. You can use this site to learn more: https://www.strfti.me/ #: src/strings.rs:410 msgid "last seen yesterday at %l:%M %p" -msgstr "" +msgstr "son görülme, dün %l:%M %p" #: src/strings.rs:414 msgid "last seen {num} hour ago" msgid_plural "last seen {num} hours ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "son görülme, {num} saat önce" +msgstr[1] "son görülme, {num} saat önce" #: src/strings.rs:421 msgid "last seen {num} minute ago" msgid_plural "last seen {num} minutes ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "son görülme, {num} dakika önce" +msgstr[1] "son görülme, {num} dakika önce" #: src/strings.rs:427 msgid "last seen just now" -msgstr "" +msgstr "son görülme, şimdi" #: src/strings.rs:430 msgid "last seen recently" -msgstr "" +msgstr "son görülme, yakın zamanda" #: src/strings.rs:431 msgid "last seen within a week" -msgstr "" +msgstr "son görülme, bir hafta içinde" #: src/strings.rs:432 msgid "last seen within a month" -msgstr "" +msgstr "son görülme, bir ay içinde" #: src/strings.rs:456 msgid "Photo has expired" -msgstr "" +msgstr "Fotoğrafın süresi doldu" #: src/strings.rs:459 msgid "Video has expired" -msgstr "" +msgstr "Videonun süresi doldu" #: src/strings.rs:460 -#, fuzzy msgid "Video Message" -msgstr "Sesli mesaj" +msgstr "Video İleti" #: src/strings.rs:491 msgid "{sender} took a screenshot!" -msgstr "" +msgstr "{sender} ekran görüntüsü aldı!" #: src/strings.rs:496 -#, fuzzy msgid "Unsupported Message" -msgstr "Desteklenmeyen mesaj" +msgstr "Desteklenmeyen İleti" #: src/strings.rs:502 msgid "GIF" @@ -838,19 +807,19 @@ msgstr "GIF" #: src/strings.rs:504 msgid "GIF, {caption}" -msgstr "" +msgstr "GIF, {caption}" #: src/strings.rs:512 msgid "{title} – {performer}" -msgstr "" +msgstr "{title} – {performer}" #: src/strings.rs:518 msgid "{title} – {performer}, {caption}" -msgstr "" +msgstr "{title} – {performer}, {caption}" #: src/strings.rs:534 msgid "{file_name}, {caption}" -msgstr "" +msgstr "{file_name}, {caption}" #: src/strings.rs:542 msgid "Photo" @@ -858,13 +827,12 @@ msgstr "Fotoğraf" #: src/strings.rs:544 msgid "Photo, {caption}" -msgstr "" +msgstr "Fotoğraf, {caption}" #. Translators: This is a sticker with the associated emoji #: src/strings.rs:550 -#, fuzzy msgid "{emoji} Sticker" -msgstr "Çıkartma" +msgstr "{emoji} Çıkartma" #: src/strings.rs:555 msgid "Video" @@ -872,17 +840,15 @@ msgstr "Video" #: src/strings.rs:557 msgid "Video, {caption}" -msgstr "" +msgstr "Video, {caption}" #: src/strings.rs:563 -#, fuzzy msgid "Voice Message" -msgstr "Sesli mesaj" +msgstr "Sesli İleti" #: src/strings.rs:565 -#, fuzzy msgid "Voice Message, {caption}" -msgstr "Sesli mesaj" +msgstr "Sesli İleti, {caption}" #: src/strings.rs:582 msgid "Declined outgoing video call" @@ -901,7 +867,6 @@ msgid "Declined incoming call" msgstr "Reddedilen gelen arama" #: src/strings.rs:600 -#, fuzzy msgid "Canceled call" msgstr "İptal edilen arama" @@ -910,14 +875,12 @@ msgid "Missed call" msgstr "Cevapsız arama" #: src/strings.rs:615 -#, fuzzy msgid "Outgoing video call ({duration})" -msgstr "Giden görüntülü arama" +msgstr "Giden görüntülü arama ({duration})" #: src/strings.rs:620 -#, fuzzy msgid "Outgoing call ({duration})" -msgstr "Giden arama" +msgstr "Giden arama ({duration})" #: src/strings.rs:625 msgid "Outgoing video call" @@ -928,14 +891,12 @@ msgid "Outgoing call" msgstr "Giden arama" #: src/strings.rs:632 -#, fuzzy msgid "Incoming video call ({duration})" -msgstr "Gelen görüntülü arama" +msgstr "Gelen video arama ({duration})" #: src/strings.rs:637 -#, fuzzy msgid "Incoming call ({duration})" -msgstr "Gelen arama" +msgstr "Gelen arama ({duration})" #: src/strings.rs:642 msgid "Incoming video call" @@ -947,157 +908,149 @@ msgstr "Gelen arama" #: src/strings.rs:651 src/strings.rs:662 msgid "{sender} created the group \"{title}\"" -msgstr "" +msgstr "{sender}, \"{title}\" grubunu oluşturdu" #: src/strings.rs:658 -#, fuzzy msgid "Channel created" -msgstr "Kanal fotoğrafı kaldırıldı" +msgstr "Kanal oluşturuldu" #: src/strings.rs:672 -#, fuzzy msgid "Channel renamed to \"{title}\"" -msgstr "Kanal fotoğrafı kaldırıldı" +msgstr "Kanalın adı \"{title}\" olarak değiştirildi" #: src/strings.rs:677 msgid "{sender} changed the group name to \"{title}\"" -msgstr "" +msgstr "{sender}, grup adını \"{title}\" olarak değiştirdi" #: src/strings.rs:687 -#, fuzzy msgid "Channel photo changed" -msgstr "Kanal fotoğrafı kaldırıldı" +msgstr "Kanal fotoğrafı değiştirildi" #: src/strings.rs:691 -#, fuzzy msgid "{sender} changed the group photo" -msgstr "Grup fotoğrafını kaldırdınız" +msgstr "{sender}, grup fotoğrafını değiştirdi" #: src/strings.rs:699 msgid "Channel photo removed" msgstr "Kanal fotoğrafı kaldırıldı" #: src/strings.rs:703 -#, fuzzy msgid "{sender} removed the group photo" -msgstr "Grup fotoğrafını kaldırdınız" +msgstr "{sender}, grup fotoğrafını kaldırdı" #: src/strings.rs:711 src/strings.rs:746 -#, fuzzy msgid "{sender} joined the group" -msgstr "Gruba katıldınız" +msgstr "{sender} gruba katıldı" #: src/strings.rs:716 msgid "{sender} added {first_user} and {second_user}" -msgstr "" +msgstr "{sender}, {first_user} ve {second_user} kullanıcılarını ekledi" #: src/strings.rs:730 msgid "{sender} added {users}" -msgstr "" +msgstr "{sender}, {users} kullanıcılarını ekledi" #: src/strings.rs:739 msgid "{sender} joined the group via invite link" -msgstr "" +msgstr "{sender} davet linki ile grubuna katıldı" #: src/strings.rs:753 -#, fuzzy msgid "{sender} left the group" -msgstr "Gruptan ayrıldınız" +msgstr "{sender} gruptan ayrıldı" #: src/strings.rs:758 msgid "{sender} removed {user}" -msgstr "" +msgstr "{sender}, {user} kullanıcısını kaldırdı" #: src/strings.rs:777 msgid "{sender} scored {points} in {game}" -msgstr "" +msgstr "{sender}, {game} oyununda {points} yaptı" #: src/strings.rs:786 msgid "{sender} scored {points}" -msgstr "" +msgstr "{sender}, {points} puan yaptı" #: src/strings.rs:810 msgid "{sender} pinned \"{text}\"" -msgstr "" +msgstr "{sender}, \"{text}\" iletisini sabitledi" #: src/strings.rs:812 msgid "{sender} pinned a GIF" -msgstr "" +msgstr "{sender} bir GIF'i sabitledi" #: src/strings.rs:813 msgid "{sender} pinned an audio file" -msgstr "" +msgstr "{sender} bir ses dosyasını sabitledi" #: src/strings.rs:814 msgid "{sender} pinned a file" -msgstr "" +msgstr "{sender} bir dosyayı sabitledi" #: src/strings.rs:815 msgid "{sender} pinned a photo" -msgstr "" +msgstr "{sender} bir fotoğrafı sabitledi" #: src/strings.rs:816 msgid "{sender} pinned a sticker" -msgstr "" +msgstr "{sender} bir çıkartmayı sabitledi" #: src/strings.rs:817 msgid "{sender} pinned a video" -msgstr "" +msgstr "{sender} bir videoyu sabitledi" #: src/strings.rs:818 msgid "{sender} pinned a video message" -msgstr "" +msgstr "{sender} bir video iletiyi sabitledi" #: src/strings.rs:819 msgid "{sender} pinned a voice message" -msgstr "" +msgstr "{sender} bir sesli iletiyi sabitledi" #: src/strings.rs:820 src/strings.rs:822 msgid "{sender} pinned a message" -msgstr "" +msgstr "{sender} bir iletiyi sabitledi" #: src/strings.rs:831 msgid "{sender} joined Telegram" -msgstr "" +msgstr "{sender} Telegram'a katıldı" #: src/session/preferences_window.rs:208 msgid "Cache cleared" -msgstr "" +msgstr "Önbellek temizlendi" #: src/session/content/chat_action_bar.rs:363 #: src/session/content/chat_action_bar.rs:380 msgid "Unknown" -msgstr "" +msgstr "Bilinmiyor" #: src/session/content/chat_action_bar.rs:365 #: src/session/content/chat_action_bar.rs:382 msgid "Deleted Message" -msgstr "" +msgstr "Silinmiş İleti" #: src/session/content/chat_action_bar.rs:376 -#, fuzzy msgid "Edit Message" -msgstr "Sesli mesaj" +msgstr "İletiyi Düzenle" #: src/session/content/chat_action_bar.rs:471 msgid "Images" -msgstr "" +msgstr "Görüntüler" #: src/session/content/chat_action_bar.rs:790 msgid "Unmute" -msgstr "" +msgstr "Sesi aç" #: src/session/content/chat_action_bar.rs:792 msgid "Mute" -msgstr "" +msgstr "Sessiz" #: src/session/content/chat_history.rs:230 msgid "Leave chat?" -msgstr "" +msgstr "Sohbetten ayrılıyor musunuz?" #: src/session/content/chat_history.rs:231 msgid "Do you want to leave this chat?" -msgstr "" +msgstr "Bu sohbetten ayrılmak istiyor musunuz?" #. Translators: This is a date format in the day divider without the year #: src/session/content/chat_history_row.rs:121 @@ -1111,7 +1064,7 @@ msgstr "%e %B %Y" #: src/session/content/chat_info_window.rs:131 msgid "bot" -msgstr "" +msgstr "bot" #: src/session/content/chat_info_window.rs:146 msgid "Mobile" @@ -1125,80 +1078,77 @@ msgstr "Kullanıcı Adı" #: src/session/content/chat_info_window.rs:223 msgid "{num} member" msgid_plural "{num} members" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{num} üye" +msgstr[1] "{num} üye" #: src/session/content/chat_info_window.rs:205 #: src/session/content/chat_info_window.rs:264 msgid "Description" -msgstr "" +msgstr "Açıklama" #: src/session/content/chat_info_window.rs:235 msgid "Link" -msgstr "" +msgstr "Bağlantı" #: src/session/content/chat_info_window.rs:283 msgid "Copied to clipboard" -msgstr "" +msgstr "Panoya kopyalandı" #: src/session/content/message_row/indicators.rs:266 msgid "edited" -msgstr "" +msgstr "düzenlendi" #: src/session/content/message_row/indicators.rs:271 msgid "sponsored" -msgstr "" +msgstr "sponsorlu" #: src/session/content/message_row/mod.rs:171 msgid "Do you want to delete this message for everyone?" -msgstr "" +msgstr "Bu iletiyi herkes için silmek istiyor musunuz?" #: src/session/content/message_row/mod.rs:173 msgid "Do you want to delete this message?" -msgstr "" +msgstr "Bu iletiyi silmek istiyor musunuz?" #: src/session/content/message_row/mod.rs:177 msgid "Confirm Message Deletion" -msgstr "" +msgstr "İleti Silmeyi Onayla" #: src/session/content/message_row/reply.rs:96 msgid "Loading…" -msgstr "" +msgstr "Yükleniyor…" #: src/session/content/message_row/text.rs:131 msgid "This message is unsupported" -msgstr "Bu mesaj desteklenmiyor" +msgstr "Bu ileti desteklenmiyor" #: src/session/sidebar/row.rs:417 -#, fuzzy msgid "Draft:" -msgstr "Taslak" +msgstr "Taslak:" #: src/session/sidebar/row.rs:597 msgid "You" msgstr "Siz" #: src/session/sidebar/search/section_row.rs:130 -#, fuzzy msgid "Chats" -msgstr "Sohbet Listesi" +msgstr "Sohbetler" #: src/session/sidebar/search/section_row.rs:133 msgid "Global Search" -msgstr "" +msgstr "Genel Arama" #: src/session/sidebar/search/section_row.rs:136 msgid "Recent" -msgstr "" +msgstr "Son" #: src/tdlib/country_info.rs:115 msgid "Invalid Country Code" -msgstr "" +msgstr "Geçersiz Ülke Kodu" #: src/tdlib/country_info.rs:124 -#, fuzzy msgid "Test Account" -msgstr "_Hesabı Sil" +msgstr "Test Hesabı" #~ msgid "Welcome to Paper Plane" #~ msgstr "Paper Plane'a Hoş Geldiniz" From d403c2753db8567a2bec5fef4e05cfe978e72ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sabri=20=C3=9Cnal?= Date: Sat, 10 Jun 2023 19:13:30 +0000 Subject: [PATCH 11/26] chore(l10n): Update Turkish translation Currently translated at 100.0% (262 of 262 strings) Translation: Paper Plane/Main Translate-URL: https://hosted.weblate.org/projects/paper-plane/main/tr/ --- po/tr.po | 72 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/po/tr.po b/po/tr.po index d39c202b6..67f71cbd0 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: paper-plane\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-11 22:31+0100\n" -"PO-Revision-Date: 2023-06-10 19:01+0000\n" +"PO-Revision-Date: 2023-06-11 06:14+0000\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" @@ -37,17 +37,17 @@ msgstr "Gnome;GTK;" #: data/app.drey.PaperPlane.gschema.xml.in:6 #: data/app.drey.PaperPlane.gschema.xml.in:7 msgid "Default window width" -msgstr "Varsayılan pencere genişliği" +msgstr "Öntanımlı pencere genişliği" #: data/app.drey.PaperPlane.gschema.xml.in:11 #: data/app.drey.PaperPlane.gschema.xml.in:12 msgid "Default window height" -msgstr "Varsayılan pencere yüksekliği" +msgstr "Öntanımlı pencere yüksekliği" #: data/app.drey.PaperPlane.gschema.xml.in:16 #: data/app.drey.PaperPlane.gschema.xml.in:17 msgid "Default window maximized behaviour" -msgstr "Varsayılan pencere büyütülmüş davranış" +msgstr "Öntanımlı pencere büyütülme davranışı" #: data/app.drey.PaperPlane.gschema.xml.in:21 msgid "Recently used sessions" @@ -140,7 +140,7 @@ msgstr "Hoş Geldiniz" #: data/resources/ui/login.blp:88 msgid "_Log in using QR code" -msgstr "_Karekod kullanarak giriş yapın" +msgstr "_Karekod kullanarak giriş yap" #: data/resources/ui/login.blp:127 msgid "Scan Code" @@ -165,7 +165,7 @@ msgstr "Kod artık gönderilemez." #: data/resources/ui/login.blp:218 msgid "Register New Account" -msgstr "Yeni Hesap Açın" +msgstr "Yeni Hesap Aç" #: data/resources/ui/login.blp:233 msgid "First Name" @@ -173,7 +173,7 @@ msgstr "İsim" #: data/resources/ui/login.blp:237 msgid "Last Name" -msgstr "Soyisim" +msgstr "Soyadı" #: data/resources/ui/login.blp:259 msgid "" @@ -201,7 +201,7 @@ msgstr "_Parolanızı mı unuttunuz?" #: data/resources/ui/login.blp:355 msgid "Use Recovery Code" -msgstr "Kurtarma Kodunu Kullanın" +msgstr "Kurtarma Kodunu Kullan" #: data/resources/ui/login.blp:363 msgid "" @@ -352,7 +352,7 @@ msgstr "Ara" #: data/resources/ui/sidebar-search.ui:75 msgid "No Search Results" -msgstr "Arama Sonucu Bulunamadı" +msgstr "Arama Sonucu Yok" #: data/resources/ui/sidebar-search.ui:76 msgid "Try a different search." @@ -385,7 +385,7 @@ msgstr "Bu grubun yöneticileri buraya yazmanızı kısıtladı" #: src/expressions.rs:105 src/session/content/message_row/indicators.rs:262 #: src/session/sidebar/row.rs:646 msgid "%l:%M %p" -msgstr "%H:%M" +msgstr "%l:%M %p" #. Translators: This is a date and time representation, without seconds. #. Here you may want to change to a 24-hours representation and change order, based on your locale. @@ -487,7 +487,7 @@ msgstr "SMS" #. Translators: This is an authentication method #: src/login.rs:1062 msgid "Call" -msgstr "Çağrı" +msgstr "Arama" #. Translators: This is an authentication method #: src/login.rs:1064 @@ -574,19 +574,19 @@ msgstr "video kaydetme" #: src/strings.rs:120 msgid "{sender} is recording a video note" -msgstr "{sender} bir video notu kaydediyor" +msgstr "{sender} video not kaydediyor" #: src/strings.rs:124 msgid "{sender1} and {sender2} are recording video notes" -msgstr "{sender1} ve {sender2} video notu kaydediyor" +msgstr "{sender1} ve {sender2} video not kaydediyor" #: src/strings.rs:131 msgid "{num} people are recording video notes" -msgstr "{num} kişi video notu kaydediyor" +msgstr "{num} kişi video not kaydediyor" #: src/strings.rs:136 msgid "recording a video note" -msgstr "video notu kaydetme" +msgstr "video not kaydetme" #: src/strings.rs:143 msgid "{sender} is recording a voice note" @@ -650,7 +650,7 @@ msgstr "{num} kişi belge yüklüyor" #: src/strings.rs:229 msgid "uploading a document ({progress}%)" -msgstr "belge yükleme (%{progress})" +msgstr "belge yükleniyor (%{progress})" #: src/strings.rs:238 msgid "{sender} is uploading a photo ({progress}%)" @@ -666,7 +666,7 @@ msgstr "{num} kişi fotoğraf yüklüyor" #: src/strings.rs:258 msgid "uploading a photo ({progress}%)" -msgstr "fotoğraf yükleme (%{progress})" +msgstr "fotoğraf yükleniyor (%{progress})" #: src/strings.rs:267 msgid "{sender} is uploading a video ({progress}%)" @@ -686,19 +686,19 @@ msgstr "video yükleniyor (%{progress})" #: src/strings.rs:296 msgid "{sender} is uploading a video note ({progress}%)" -msgstr "{sender} video notu yüklüyor (%{progress})" +msgstr "{sender} video not yüklüyor (%{progress})" #: src/strings.rs:303 msgid "{sender1} and {sender2} are uploading video notes" -msgstr "{sender1} ve {sender2} video notu yüklüyor" +msgstr "{sender1} ve {sender2} video not yüklüyor" #: src/strings.rs:310 msgid "{num} people are uploading video notes" -msgstr "{num} kişi video notu yüklüyor" +msgstr "{num} kişi video not yüklüyor" #: src/strings.rs:316 msgid "uploading a video note ({progress}%)" -msgstr "video notu yükleniyor (%{progress})" +msgstr "video not yükleniyor (%{progress})" #: src/strings.rs:325 msgid "{sender} is uploading a voice note ({progress}%)" @@ -734,7 +734,7 @@ msgstr "animasyon izleme" #: src/strings.rs:395 msgid "last seen a long time ago" -msgstr "en son uzun zaman önce görüldü" +msgstr "son görülme: uzun zaman önce" #: src/strings.rs:396 msgid "online" @@ -744,42 +744,42 @@ msgstr "çevrim içi" #: src/strings.rs:405 #, c-format msgid "last seen %x" -msgstr "son görülme %x" +msgstr "son görülme: %x" #. Translators: This is an online status with the last seen time, without seconds #. Here you may want to change to a 24-hours representation, based on your locale. #. You can use this site to learn more: https://www.strfti.me/ #: src/strings.rs:410 msgid "last seen yesterday at %l:%M %p" -msgstr "son görülme, dün %l:%M %p" +msgstr "son görülme: dün %l:%M %p" #: src/strings.rs:414 msgid "last seen {num} hour ago" msgid_plural "last seen {num} hours ago" -msgstr[0] "son görülme, {num} saat önce" +msgstr[0] "son görülme: {num} saat önce" msgstr[1] "son görülme, {num} saat önce" #: src/strings.rs:421 msgid "last seen {num} minute ago" msgid_plural "last seen {num} minutes ago" -msgstr[0] "son görülme, {num} dakika önce" +msgstr[0] "son görülme: {num} dakika önce" msgstr[1] "son görülme, {num} dakika önce" #: src/strings.rs:427 msgid "last seen just now" -msgstr "son görülme, şimdi" +msgstr "son görülme: şimdi" #: src/strings.rs:430 msgid "last seen recently" -msgstr "son görülme, yakın zamanda" +msgstr "son görülme: yakın zamanda" #: src/strings.rs:431 msgid "last seen within a week" -msgstr "son görülme, bir hafta içinde" +msgstr "son görülme: bir hafta içinde" #: src/strings.rs:432 msgid "last seen within a month" -msgstr "son görülme, bir ay içinde" +msgstr "son görülme: bir ay içinde" #: src/strings.rs:456 msgid "Photo has expired" @@ -900,7 +900,7 @@ msgstr "Gelen arama ({duration})" #: src/strings.rs:642 msgid "Incoming video call" -msgstr "Gelen görüntülü arama" +msgstr "Gelen video arama" #: src/strings.rs:644 src/window.rs:213 msgid "Incoming call" @@ -916,7 +916,7 @@ msgstr "Kanal oluşturuldu" #: src/strings.rs:672 msgid "Channel renamed to \"{title}\"" -msgstr "Kanalın adı \"{title}\" olarak değiştirildi" +msgstr "Kanal, \"{title}\" olarak yeniden adlandırıldı" #: src/strings.rs:677 msgid "{sender} changed the group name to \"{title}\"" @@ -1012,7 +1012,7 @@ msgstr "{sender} bir iletiyi sabitledi" #: src/strings.rs:831 msgid "{sender} joined Telegram" -msgstr "{sender} Telegram'a katıldı" +msgstr "{sender} Telegramʼa katıldı" #: src/session/preferences_window.rs:208 msgid "Cache cleared" @@ -1055,12 +1055,12 @@ msgstr "Bu sohbetten ayrılmak istiyor musunuz?" #. Translators: This is a date format in the day divider without the year #: src/session/content/chat_history_row.rs:121 msgid "%B %e" -msgstr "%e %B" +msgstr "%B %e" #. Translators: This is a date format in the day divider with the year #: src/session/content/chat_history_row.rs:124 msgid "%B %e, %Y" -msgstr "%e %B %Y" +msgstr "%B %e, %Y" #: src/session/content/chat_info_window.rs:131 msgid "bot" @@ -1068,7 +1068,7 @@ msgstr "bot" #: src/session/content/chat_info_window.rs:146 msgid "Mobile" -msgstr "Mobil" +msgstr "Cep Telefonu" #: src/session/content/chat_info_window.rs:156 msgid "Username" From 9c6268ead76da345717b6b31bfe5265f06c298bc Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sun, 11 Jun 2023 08:16:36 +0200 Subject: [PATCH 12/26] chore(cargo): Update dependencies --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b418f822c..890f1067e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -919,9 +919,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "malloc_buf" @@ -1114,9 +1114,9 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "png" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" +checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" dependencies = [ "bitflags", "crc32fast", From 7e0955fc2fc7db16007fe5857dd92718df6b3fba Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sun, 11 Jun 2023 08:23:04 +0200 Subject: [PATCH 13/26] chore(metainfo): Update changelog --- data/app.drey.PaperPlane.metainfo.xml.in.in | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/data/app.drey.PaperPlane.metainfo.xml.in.in b/data/app.drey.PaperPlane.metainfo.xml.in.in index 036c8e107..eec79ed66 100644 --- a/data/app.drey.PaperPlane.metainfo.xml.in.in +++ b/data/app.drey.PaperPlane.metainfo.xml.in.in @@ -40,7 +40,18 @@ https://github.com/paper-plane-developers/paper-plane https://github.com/paper-plane-developers/paper-plane/issues + sabriunal + + +

The third beta release of Paper Plane 0.1.0 should in the first place fix a build error on Flathub:

+
    +
  • Added registered categories to te desktop file to fix a build error on Flathub.
  • +
  • Dependencies have been updated.
  • +
  • Turkish translations have been updated, thanks to @sabriunal.
  • +
+
+

The second beta release of Paper Plane 0.1.0 contains the following features, fixes and chores:

From e00bc64c78eee697c4ee5837d5913dd7035930d5 Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sun, 11 Jun 2023 08:24:18 +0200 Subject: [PATCH 14/26] chore: Release v0.1.0-beta.3 --- Cargo.lock | 2 +- Cargo.toml | 2 +- meson.build | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 890f1067e..847d37cc8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1066,7 +1066,7 @@ dependencies = [ [[package]] name = "paper-plane" -version = "0.1.0-beta.2" +version = "0.1.0-beta.3" dependencies = [ "anyhow", "ellipse", diff --git a/Cargo.toml b/Cargo.toml index cd8457ddc..cc21be09f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "paper-plane" -version = "0.1.0-beta.2" +version = "0.1.0-beta.3" authors = ["Marco Melorio ", "Marcus Behrendt "] edition = "2021" diff --git a/meson.build b/meson.build index 7ac56d094..5766bcf9a 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project( 'paper-plane', 'rust', - version: '0.1.0-beta.2', + version: '0.1.0-beta.3', meson_version: '>= 0.59', ) From 81736d6b5efc13d1deb96f4d9da24f292b8e5ac3 Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Sun, 11 Jun 2023 21:46:13 +0200 Subject: [PATCH 15/26] ci: Add job to check commit style --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7e45c34f..347a55798 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,13 @@ on: pull_request: jobs: + check-commit-style: + name: Check Commit Style + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webiny/action-conventional-commits@v1.1.0 + typos: name: Typos runs-on: ubuntu-latest From 368ea79cc89a510857d5929d175233062898d30b Mon Sep 17 00:00:00 2001 From: YuraIz <7516890@gmail.com> Date: Sun, 11 Jun 2023 15:37:27 +0300 Subject: [PATCH 16/26] feat(message-document): Use mask for status indicator With mask it correctly matches message bubble background --- data/resources/style-dark.css | 4 + data/resources/style.css | 36 ++---- .../resources/ui/content-message-document.blp | 2 +- .../message_row/document/file_status.rs | 34 ++++++ .../{document.rs => document/mod.rs} | 64 +++------- .../message_row/document/status_indicator.rs | 115 ++++++++++++++++++ 6 files changed, 185 insertions(+), 70 deletions(-) create mode 100644 src/session/content/message_row/document/file_status.rs rename src/session/content/message_row/{document.rs => document/mod.rs} (85%) create mode 100644 src/session/content/message_row/document/status_indicator.rs diff --git a/data/resources/style-dark.css b/data/resources/style-dark.css index e932ba802..815f73aea 100644 --- a/data/resources/style-dark.css +++ b/data/resources/style-dark.css @@ -19,6 +19,10 @@ messagebubble.outgoing { background-color: #2c52ac; } +messagebubble.document.outgoing .file > overlay > statusindicator { + color: white; +} + .event-row { background-color: alpha(#404040, 0.8); } diff --git a/data/resources/style.css b/data/resources/style.css index 80198e73e..1c9574c9d 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -196,32 +196,30 @@ messagebubble.document .file > overlay { min-height: 40px; } -messagebubble.document .file > overlay > image { - background: @accent_color; - color: @window_bg_color; - transition: opacity 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +messagebubble.document .file > overlay > statusindicator > image { padding: 12px; +} + +messagebubble.document .file > overlay > statusindicator { + color: @accent_color; + transition: opacity 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); border-radius: 9999px; } -messagebubble.document.outgoing .file > overlay > image { - background: @accent_fg_color; - color: @accent_bg_color; +messagebubble.document.outgoing .file > overlay > statusindicator { + /* depends on bubble color */ + color: #79c271; } -messagebubble.document .file:hover > overlay > image { +messagebubble.document .file:hover > overlay > statusindicator { opacity: 0.85; } -messagebubble.document .file:active > overlay > image { +messagebubble.document .file:active > overlay > statusindicator { opacity: 0.7; } -messagebubble.document .file.with-thumbnail > overlay > image { - background-color: alpha(black, 0.6); - color: white; -} -messagebubble.document .file.with-thumbnail > overlay > image { +messagebubble.document .file.with-thumbnail > overlay > statusindicator { background-color: alpha(black, 0.6); color: white; } @@ -251,16 +249,6 @@ messagebubble.media.with-reply mediapicture { margin-top: 3px; } -messagebubble.document .file.with-thumbnail > overlay > image { - background-color: alpha(black, 0.6); - color: white; -} - -messagebubble.document .file.with-thumbnail > overlay { - min-width: 60px; - min-height: 60px; -} - messagebubble.document .file.with-thumbnail > overlay > picture { border-radius: 6px; } diff --git a/data/resources/ui/content-message-document.blp b/data/resources/ui/content-message-document.blp index 6fbba86af..cd4f3714d 100644 --- a/data/resources/ui/content-message-document.blp +++ b/data/resources/ui/content-message-document.blp @@ -22,7 +22,7 @@ template $MessageDocument : $MessageBase { } [overlay] - Image file_status_image { + $MessageDocumentStatusIndicator status_indicator { halign: center; valign: center; } diff --git a/src/session/content/message_row/document/file_status.rs b/src/session/content/message_row/document/file_status.rs new file mode 100644 index 000000000..a0b1934c4 --- /dev/null +++ b/src/session/content/message_row/document/file_status.rs @@ -0,0 +1,34 @@ +use tdlib::types::File; +use FileStatus::*; + +#[derive(Debug, Clone, Copy, PartialEq)] +pub(crate) enum FileStatus { + Downloading(f64), + Uploading(f64), + CanBeDownloaded, + Downloaded, +} + +impl From<&File> for FileStatus { + fn from(file: &File) -> Self { + let local = &file.local; + let remote = &file.remote; + + let size = file.size.max(file.expected_size) as u64; + + if local.is_downloading_active { + let progress = local.downloaded_size as f64 / size as f64; + Downloading(progress) + } else if remote.is_uploading_active { + let progress = remote.uploaded_size as f64 / size as f64; + Uploading(progress) + } else if local.is_downloading_completed { + Downloaded + } else if local.can_be_downloaded { + CanBeDownloaded + } else { + dbg!(file); + unimplemented!("unknown file status"); + } + } +} diff --git a/src/session/content/message_row/document.rs b/src/session/content/message_row/document/mod.rs similarity index 85% rename from src/session/content/message_row/document.rs rename to src/session/content/message_row/document/mod.rs index 1792f822e..5f9d2e21d 100644 --- a/src/session/content/message_row/document.rs +++ b/src/session/content/message_row/document/mod.rs @@ -1,5 +1,9 @@ use std::cell::RefCell; +mod file_status; +mod status_indicator; +use file_status::FileStatus; +use file_status::FileStatus::*; use glib::clone; use gtk::gdk; use gtk::gio; @@ -8,6 +12,7 @@ use gtk::prelude::*; use gtk::subclass::prelude::*; use gtk::CompositeTemplate; use once_cell::sync::Lazy; +use status_indicator::StatusIndicator; use tdlib::enums::MessageContent; use tdlib::types::File; @@ -39,7 +44,7 @@ mod imp { #[template_child] pub(super) file_thumbnail_picture: TemplateChild, #[template_child] - pub(super) file_status_image: TemplateChild, + pub(super) status_indicator: TemplateChild, #[template_child] pub(super) file_name_label: TemplateChild, #[template_child] @@ -128,39 +133,6 @@ impl MessageBaseExt for MessageDocument { } } -#[derive(PartialEq)] -enum FileStatus { - Downloading(f64), - Uploading(f64), - CanBeDownloaded, - Downloaded, -} -use FileStatus::*; - -impl From<&File> for FileStatus { - fn from(file: &File) -> Self { - let local = &file.local; - let remote = &file.remote; - - let size = file.size.max(file.expected_size) as u64; - - if local.is_downloading_active { - let progress = local.downloaded_size as f64 / size as f64; - Downloading(progress) - } else if remote.is_uploading_active { - let progress = remote.uploaded_size as f64 / size as f64; - Uploading(progress) - } else if local.is_downloading_completed { - Downloaded - } else if local.can_be_downloaded { - CanBeDownloaded - } else { - dbg!(file); - unimplemented!("unknown file status"); - } - } -} - impl MessageDocument { fn update_document(&self, message: &Message) { if let MessageContent::MessageDocument(data) = message.content().0 { @@ -183,26 +155,26 @@ impl MessageDocument { let size = file.size.max(file.expected_size) as u64; - self.update_size_label(&status, size); - self.update_button(file, session, &status); + self.update_size_label(status, size); + self.update_button(file, session, status); status } - fn update_button(&self, file: File, session: Session, status: &FileStatus) { + fn update_button(&self, file: File, session: Session, status: FileStatus) { let imp = self.imp(); let click = &*imp.click; - let image = &*imp.file_status_image; + let indicator = &*imp.status_indicator; let file_id = file.id; - let handler_id = match *status { + let handler_id = match status { Downloading(_progress) | Uploading(_progress) => { return; // Show loading indicator } CanBeDownloaded => { // Download file - image.set_icon_name(Some("document-save-symbolic")); + indicator.set_status(CanBeDownloaded); click.connect_released(clone!(@weak self as obj, @weak session => move |click, _, _, _| { // TODO: Fix bug mentioned here // https://github.com/paper-plane-developers/paper-plane/pull/372#discussion_r968841370 @@ -210,7 +182,7 @@ impl MessageDocument { obj.update_status(file, session); })); - obj.imp().file_status_image.set_icon_name(Some("media-playback-stop-symbolic")); + obj.imp().status_indicator.set_status(Downloading(0.0)); let handler_id = click.connect_released(clone!(@weak session => move |_, _, _, _| { session.cancel_download_file(file_id); })); @@ -221,9 +193,9 @@ impl MessageDocument { } Downloaded => { // Open file - image.set_icon_name(Some("folder-documents-symbolic")); + indicator.set_status(Downloaded); if imp.file_thumbnail_picture.file().is_some() { - image.set_visible(false); + indicator.set_visible(false); } let gio_file = gio::File::for_path(&file.local.path); click.connect_released(move |_, _, _, _| { @@ -242,7 +214,7 @@ impl MessageDocument { } } - fn update_size_label(&self, status: &FileStatus, size: u64) { + fn update_size_label(&self, status: FileStatus, size: u64) { let size_label = &self.imp().file_size_label; match status { @@ -262,6 +234,7 @@ impl MessageDocument { if let MessageContent::MessageDocument(data) = message.content().0 { let imp = self.imp(); if let Some(thumbnail) = data.document.thumbnail { + imp.status_indicator.set_masked(false); imp.file_thumbnail_picture.set_visible(true); imp.file_box.add_css_class("with-thumbnail"); if thumbnail.file.local.is_downloading_completed { @@ -288,7 +261,8 @@ impl MessageDocument { })); } } else { - imp.file_thumbnail_picture.set_visible(true); + imp.status_indicator.set_masked(true); + imp.file_thumbnail_picture.set_visible(false); imp.file_thumbnail_picture .set_paintable(gdk::Paintable::NONE); } diff --git a/src/session/content/message_row/document/status_indicator.rs b/src/session/content/message_row/document/status_indicator.rs new file mode 100644 index 000000000..956a1b5ef --- /dev/null +++ b/src/session/content/message_row/document/status_indicator.rs @@ -0,0 +1,115 @@ +use std::cell::Cell; + +use gtk::glib; +use gtk::gsk; +use gtk::prelude::*; +use gtk::subclass::prelude::*; +use gtk::CompositeTemplate; + +use super::file_status::FileStatus; + +mod imp { + use super::*; + + #[derive(Debug, Default, CompositeTemplate, glib::Properties)] + #[template(string = r#" + template $MessageDocumentStatusIndicator { + layout-manager: BinLayout {}; + overflow: hidden; + + Image status_image {} + } + "#)] + #[properties(wrapper_type = super::StatusIndicator)] + pub(crate) struct StatusIndicator { + #[property(get, set = Self::set_masked, explicit_notify)] + pub(super) masked: Cell, + #[template_child] + pub(super) status_image: TemplateChild, + } + + #[glib::object_subclass] + impl ObjectSubclass for StatusIndicator { + const NAME: &'static str = "MessageDocumentStatusIndicator"; + type Type = super::StatusIndicator; + type ParentType = gtk::Widget; + + fn class_init(klass: &mut Self::Class) { + klass.set_css_name("statusindicator"); + klass.bind_template(); + } + + fn instance_init(obj: &glib::subclass::InitializingObject) { + obj.init_template(); + } + } + + impl ObjectImpl for StatusIndicator { + fn properties() -> &'static [glib::ParamSpec] { + Self::derived_properties() + } + + fn set_property(&self, id: usize, value: &glib::Value, pspec: &glib::ParamSpec) { + self.derived_set_property(id, value, pspec) + } + + fn property(&self, id: usize, pspec: &glib::ParamSpec) -> glib::Value { + self.derived_property(id, pspec) + } + } + + impl WidgetImpl for StatusIndicator { + fn snapshot(&self, snapshot: >k::Snapshot) { + if self.masked.get() { + let widget = self.obj(); + + snapshot.push_mask(gsk::MaskMode::InvertedAlpha); + + self.parent_snapshot(snapshot); + + snapshot.pop(); + + snapshot.append_color( + &widget.color(), + >k::graphene::Rect::new( + 0.0, + 0.0, + widget.width() as f32, + widget.height() as f32, + ), + ); + + snapshot.pop(); + } else { + self.parent_snapshot(snapshot); + } + } + } + + impl StatusIndicator { + fn set_masked(&self, masked: bool) { + if self.masked.replace(masked) != masked { + let obj = self.obj(); + obj.queue_draw(); + obj.notify_masked(); + } + } + } +} + +glib::wrapper! { + pub(crate) struct StatusIndicator(ObjectSubclass) + @extends gtk::Widget; +} + +impl StatusIndicator { + pub(crate) fn set_status(&self, status: FileStatus) { + let icon_name = match status { + FileStatus::Downloading(_) | FileStatus::Uploading(_) => "media-playback-stop-symbolic", + FileStatus::CanBeDownloaded => "document-save-symbolic", + FileStatus::Downloaded => "folder-documents-symbolic", + }; + + self.imp().status_image.set_icon_name(Some(icon_name)); + } +} From 0433eb8a9e0d0c7f4f9a8d20bec281172512c39d Mon Sep 17 00:00:00 2001 From: YuraIz <7516890@gmail.com> Date: Tue, 20 Jun 2023 19:24:05 +0300 Subject: [PATCH 17/26] fix(message-document): Dispose status indicator template --- src/session/content/message_row/document/status_indicator.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/session/content/message_row/document/status_indicator.rs b/src/session/content/message_row/document/status_indicator.rs index 956a1b5ef..09cceef93 100644 --- a/src/session/content/message_row/document/status_indicator.rs +++ b/src/session/content/message_row/document/status_indicator.rs @@ -56,6 +56,10 @@ mod imp { fn property(&self, id: usize, pspec: &glib::ParamSpec) -> glib::Value { self.derived_property(id, pspec) } + + fn dispose(&self) { + self.dispose_template(); + } } impl WidgetImpl for StatusIndicator { From 63e8bfadb4a8e6aeef28782234f63499e33a39be Mon Sep 17 00:00:00 2001 From: Marcus Behrendt Date: Wed, 14 Jun 2023 22:24:58 +0200 Subject: [PATCH 18/26] fix(phone-number-input): Assume locale may be unknown We shouldn't assume that the current locale has an equivalent country code. We need to check this and set an invalid country code in this case to fix a crash. Fixes #559 --- src/phone_number_input.rs | 66 +++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src/phone_number_input.rs b/src/phone_number_input.rs index fcbd9dcbb..ef20ffbc6 100644 --- a/src/phone_number_input.rs +++ b/src/phone_number_input.rs @@ -134,24 +134,26 @@ mod imp { .chain(Some('+')) .collect::(); - let selected_country_info = obj.selected_country_info().unwrap(); - let (number, pos_start, pos_end) = { - let first_calling_code = selected_country_info.calling_codes().first_or_empty(); - ( - [ - number_prefix.as_str(), - first_calling_code, - obj.number() - .chars() - .skip(pos_end) - .collect::() - .as_str(), - ] - .concat(), - pos_start, - pos_start + first_calling_code.chars().count() + 1, - ) - }; + let (number, pos_start, pos_end) = obj + .selected_country_info() + .map(|selected_country_info| { + let first_calling_code = selected_country_info.calling_codes().first_or_empty(); + ( + [ + number_prefix.as_str(), + first_calling_code, + obj.number() + .chars() + .skip(pos_end) + .collect::() + .as_str(), + ] + .concat(), + pos_start, + pos_start + first_calling_code.chars().count() + 1, + ) + }) + .unwrap_or((number_prefix, 0, 1)); imp.entry_row.block_signal(entry_handler); obj.set_number(&number); @@ -198,16 +200,7 @@ mod imp { }; imp.combo_row.block_signal(combo_row_handler); - match list_pos { - Some(list_pos) => { - imp.combo_row.set_selected(list_pos); - imp.combo_row.set_subtitle(""); - } - None => { - imp.combo_row.set_selected(gtk::INVALID_LIST_POSITION); - imp.combo_row.set_subtitle(&gettext("You entered an invalid country code.")); - } - } + obj.set_selected_country_code(list_pos); imp.combo_row.unblock_signal(combo_row_handler); imp.calling_code_bounds.set((text_pos_start, text_pos_end as usize)); @@ -293,6 +286,18 @@ impl PhoneNumberInput { .map(|item| item.downcast::().unwrap()) } + fn set_selected_country_code(&self, position: Option) { + let combo_row = &self.imp().combo_row; + + combo_row.set_selected(position.unwrap_or(gtk::INVALID_LIST_POSITION)); + + if position.is_some() { + combo_row.set_subtitle(""); + } else { + combo_row.set_subtitle(&gettext("You entered an invalid country code.")); + } + } + /// Performs a text selection of the whole number but leaves out the calling code. pub(crate) fn select_number_without_calling_code(&self) { let imp = self.imp(); @@ -340,10 +345,9 @@ impl PhoneNumberInput { .get() .unwrap() .as_deref() - .and_then(|country| model.country_code_pos(country)) - .unwrap_or(gtk::INVALID_LIST_POSITION); + .and_then(|country| model.country_code_pos(country)); - imp.combo_row.set_selected(position); + self.set_selected_country_code(position); } } From 790623cd1b5e08f1323738d033632489a6c126d5 Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Sun, 21 May 2023 17:02:53 +0200 Subject: [PATCH 19/26] refactor: Rename "SendPhotoDialog" to "SendMediaWindow" --- data/resources/meson.build | 2 +- data/resources/resources.gresource.xml | 2 +- ...alog.blp => content-send-media-window.blp} | 4 +- src/session/content/chat_action_bar.rs | 6 +-- src/session/content/mod.rs | 4 +- ...d_photo_dialog.rs => send_media_window.rs} | 38 +++++++++---------- 6 files changed, 26 insertions(+), 30 deletions(-) rename data/resources/ui/{content-send-photo-dialog.blp => content-send-media-window.blp} (84%) rename src/session/content/{send_photo_dialog.rs => send_media_window.rs} (85%) diff --git a/data/resources/meson.build b/data/resources/meson.build index a38c7b991..a99c8d609 100644 --- a/data/resources/meson.build +++ b/data/resources/meson.build @@ -6,7 +6,7 @@ blueprints = custom_target('blueprints', 'ui/components-avatar.blp', 'ui/content-event-row.blp', 'ui/content-chat-info-window.blp', - 'ui/content-send-photo-dialog.blp', + 'ui/content-send-media-window.blp', 'ui/content.blp', 'ui/login.blp', 'ui/session-entry-row.blp', diff --git a/data/resources/resources.gresource.xml b/data/resources/resources.gresource.xml index b04cf6768..9e8cb60b6 100644 --- a/data/resources/resources.gresource.xml +++ b/data/resources/resources.gresource.xml @@ -26,7 +26,7 @@ ui/content-message-document.ui ui/content-message-photo.ui ui/content-message-text.ui - ui/content-send-photo-dialog.ui + ui/content-send-media-window.ui ui/login.ui ui/message-menu.ui ui/phone-number-input.ui diff --git a/data/resources/ui/content-send-photo-dialog.blp b/data/resources/ui/content-send-media-window.blp similarity index 84% rename from data/resources/ui/content-send-photo-dialog.blp rename to data/resources/ui/content-send-media-window.blp index 6b2d60bfd..20ed99274 100644 --- a/data/resources/ui/content-send-photo-dialog.blp +++ b/data/resources/ui/content-send-media-window.blp @@ -1,7 +1,7 @@ using Gtk 4.0; using Adw 1; -template $ContentSendPhotoDialog : Adw.Window { +template $ContentSendMediaWindow : Adw.Window { default-width: 500; default-height: 500; modal: true; @@ -26,7 +26,7 @@ template $ContentSendPhotoDialog : Adw.Window { Button { styles ["circular", "suggested-action"] - action-name: "send-photo-dialog.send-message"; + action-name: "send-media-window.send-message"; icon-name: "go-up-symbolic"; valign: end; } diff --git a/src/session/content/chat_action_bar.rs b/src/session/content/chat_action_bar.rs index b6894ec17..51c5e4ae5 100644 --- a/src/session/content/chat_action_bar.rs +++ b/src/session/content/chat_action_bar.rs @@ -23,7 +23,7 @@ use tdlib::types; use crate::components::MessageEntry; use crate::expressions; -use crate::session::content::SendPhotoDialog; +use crate::session::content::SendMediaWindow; use crate::strings; use crate::tdlib::BasicGroup; use crate::tdlib::BoxedDraftMessage; @@ -495,7 +495,7 @@ impl ChatActionBar { let path = file.path().unwrap().to_str().unwrap().to_string(); let chat = self.chat().unwrap(); - SendPhotoDialog::new(&Some(parent), chat, path).present(); + SendMediaWindow::new(&Some(parent), chat, path).present(); } } @@ -703,7 +703,7 @@ impl ChatActionBar { let parent_window = self.root().unwrap().downcast().ok(); let path = path.to_str().unwrap().to_string(); - SendPhotoDialog::new(&parent_window, chat, path).present(); + SendMediaWindow::new(&parent_window, chat, path).present(); } Ok(()) diff --git a/src/session/content/mod.rs b/src/session/content/mod.rs index 8633e0b19..17b0a308f 100644 --- a/src/session/content/mod.rs +++ b/src/session/content/mod.rs @@ -7,7 +7,7 @@ mod chat_history_row; mod chat_info_window; mod event_row; mod message_row; -mod send_photo_dialog; +mod send_media_window; use std::cell::Cell; use std::cell::RefCell; @@ -30,7 +30,7 @@ use self::chat_history_row::ChatHistoryRow; use self::chat_info_window::ChatInfoWindow; use self::event_row::EventRow; use self::message_row::MessageRow; -use self::send_photo_dialog::SendPhotoDialog; +use self::send_media_window::SendMediaWindow; use crate::tdlib::Chat; mod imp { diff --git a/src/session/content/send_photo_dialog.rs b/src/session/content/send_media_window.rs similarity index 85% rename from src/session/content/send_photo_dialog.rs rename to src/session/content/send_media_window.rs index 6e946618f..448b37928 100644 --- a/src/session/content/send_photo_dialog.rs +++ b/src/session/content/send_media_window.rs @@ -21,8 +21,8 @@ mod imp { use super::*; #[derive(Debug, Default, CompositeTemplate)] - #[template(resource = "/app/drey/paper-plane/ui/content-send-photo-dialog.ui")] - pub(crate) struct SendPhotoDialog { + #[template(resource = "/app/drey/paper-plane/ui/content-send-media-window.ui")] + pub(crate) struct SendMediaWindow { pub(super) chat: OnceCell, pub(super) path: OnceCell, pub(super) emoji_chooser: RefCell>, @@ -33,16 +33,16 @@ mod imp { } #[glib::object_subclass] - impl ObjectSubclass for SendPhotoDialog { - const NAME: &'static str = "ContentSendPhotoDialog"; - type Type = super::SendPhotoDialog; + impl ObjectSubclass for SendMediaWindow { + const NAME: &'static str = "ContentSendMediaWindow"; + type Type = super::SendMediaWindow; type ParentType = adw::Window; fn class_init(klass: &mut Self::Class) { klass.bind_template(); klass.install_action_async( - "send-photo-dialog.send-message", + "send-media-window.send-message", None, |widget, _, _| async move { widget.send_message().await; @@ -55,7 +55,7 @@ mod imp { } } - impl ObjectImpl for SendPhotoDialog { + impl ObjectImpl for SendMediaWindow { fn properties() -> &'static [glib::ParamSpec] { static PROPERTIES: Lazy> = Lazy::new(|| { vec![glib::ParamSpecObject::builder::("chat") @@ -86,7 +86,7 @@ mod imp { self.caption_entry .connect_activate(clone!(@weak obj => move |_| { - obj.activate_action("send-photo-dialog.send-message", None).unwrap() + obj.activate_action("send-media-window.send-message", None).unwrap() })); self.caption_entry @@ -102,35 +102,31 @@ mod imp { } } - impl WidgetImpl for SendPhotoDialog {} - impl WindowImpl for SendPhotoDialog {} - impl AdwWindowImpl for SendPhotoDialog {} + impl WidgetImpl for SendMediaWindow {} + impl WindowImpl for SendMediaWindow {} + impl AdwWindowImpl for SendMediaWindow {} } glib::wrapper! { - pub(crate) struct SendPhotoDialog(ObjectSubclass) + pub(crate) struct SendMediaWindow(ObjectSubclass) @extends gtk::Widget, gtk::Window, adw::Window; } -impl SendPhotoDialog { +impl SendMediaWindow { pub(crate) fn new(parent_window: &Option, chat: Chat, path: String) -> Self { - let send_photo_dialog: Self = glib::Object::builder() + let obj: Self = glib::Object::builder() .property("transient-for", parent_window) .property("chat", &chat) .build(); - let imp = send_photo_dialog.imp(); + let imp = obj.imp(); let chat_expression = gtk::ConstantExpression::new(&chat); - expressions::chat_display_name(&chat_expression).bind( - &send_photo_dialog, - "title", - glib::Object::NONE, - ); + expressions::chat_display_name(&chat_expression).bind(&obj, "title", glib::Object::NONE); imp.picture.set_filename(Some(&path)); imp.path.set(path).unwrap(); - send_photo_dialog + obj } fn show_emoji_chooser(&self, parent: &impl IsA) { From f2fb1ec236c83a61a7b2acddfdc00ef8c62ded30 Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Sun, 21 May 2023 17:17:52 +0200 Subject: [PATCH 20/26] refactor(send-media-window): Code improvements Avoid defining properties when not needed and move tdlib "use" definitions. --- .../ui/content-send-media-window.blp | 1 - src/session/content/chat_action_bar.rs | 6 +-- src/session/content/send_media_window.rs | 42 ++++--------------- 3 files changed, 12 insertions(+), 37 deletions(-) diff --git a/data/resources/ui/content-send-media-window.blp b/data/resources/ui/content-send-media-window.blp index 20ed99274..86493b414 100644 --- a/data/resources/ui/content-send-media-window.blp +++ b/data/resources/ui/content-send-media-window.blp @@ -20,7 +20,6 @@ template $ContentSendMediaWindow : Adw.Window { $MessageEntry caption_entry { hexpand: "True"; placeholder-text: _("Caption"); - chat: bind template.chat; } Button { diff --git a/src/session/content/chat_action_bar.rs b/src/session/content/chat_action_bar.rs index 51c5e4ae5..0db26e90a 100644 --- a/src/session/content/chat_action_bar.rs +++ b/src/session/content/chat_action_bar.rs @@ -495,7 +495,7 @@ impl ChatActionBar { let path = file.path().unwrap().to_str().unwrap().to_string(); let chat = self.chat().unwrap(); - SendMediaWindow::new(&Some(parent), chat, path).present(); + SendMediaWindow::new(&parent, chat, path).present(); } } @@ -701,9 +701,9 @@ impl ChatActionBar { save_stream_to_file(stream, &path).await?; - let parent_window = self.root().unwrap().downcast().ok(); + let parent = self.root().and_downcast().unwrap(); let path = path.to_str().unwrap().to_string(); - SendMediaWindow::new(&parent_window, chat, path).present(); + SendMediaWindow::new(&parent, chat, path).present(); } Ok(()) diff --git a/src/session/content/send_media_window.rs b/src/session/content/send_media_window.rs index 448b37928..2ccb299e2 100644 --- a/src/session/content/send_media_window.rs +++ b/src/session/content/send_media_window.rs @@ -5,13 +5,7 @@ use glib::clone; use gtk::glib; use gtk::prelude::*; use gtk::CompositeTemplate; -use once_cell::sync::Lazy; use once_cell::unsync::OnceCell; -use tdlib::enums::InputFile; -use tdlib::enums::InputMessageContent; -use tdlib::functions; -use tdlib::types::InputFileLocal; -use tdlib::types::InputMessagePhoto; use crate::components::MessageEntry; use crate::expressions; @@ -56,29 +50,6 @@ mod imp { } impl ObjectImpl for SendMediaWindow { - fn properties() -> &'static [glib::ParamSpec] { - static PROPERTIES: Lazy> = Lazy::new(|| { - vec![glib::ParamSpecObject::builder::("chat") - .construct_only() - .build()] - }); - PROPERTIES.as_ref() - } - - fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) { - match pspec.name() { - "chat" => self.chat.set(value.get().unwrap()).unwrap(), - _ => unimplemented!(), - } - } - - fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value { - match pspec.name() { - "chat" => self.chat.get().to_value(), - _ => unimplemented!(), - } - } - fn constructed(&self) { self.parent_constructed(); @@ -113,10 +84,9 @@ glib::wrapper! { } impl SendMediaWindow { - pub(crate) fn new(parent_window: &Option, chat: Chat, path: String) -> Self { + pub(crate) fn new(parent: >k::Window, chat: Chat, path: String) -> Self { let obj: Self = glib::Object::builder() - .property("transient-for", parent_window) - .property("chat", &chat) + .property("transient-for", parent) .build(); let imp = obj.imp(); @@ -124,6 +94,9 @@ impl SendMediaWindow { expressions::chat_display_name(&chat_expression).bind(&obj, "title", glib::Object::NONE); imp.picture.set_filename(Some(&path)); + imp.caption_entry.set_chat(Some(chat.clone())); + + imp.chat.set(chat).unwrap(); imp.path.set(path).unwrap(); obj @@ -147,6 +120,9 @@ impl SendMediaWindow { } async fn send_message(&self) { + use tdlib::enums::*; + use tdlib::types::*; + let imp = self.imp(); let chat = imp.chat.get().unwrap(); @@ -172,7 +148,7 @@ impl SendMediaWindow { }); // TODO: maybe show an error dialog when this fails? - if functions::send_message(chat_id, 0, 0, None, content, client_id) + if tdlib::functions::send_message(chat_id, 0, 0, None, content, client_id) .await .is_ok() { From 3baea70ba8778cef7d4bea90c6fdad2c55a6b432 Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Sun, 21 May 2023 17:18:57 +0200 Subject: [PATCH 21/26] chore(send-media-window): Small UI improvements Change send button style and stop using chat name as window title. --- data/resources/ui/content-send-media-window.blp | 5 +++-- src/session/content/send_media_window.rs | 4 ---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/data/resources/ui/content-send-media-window.blp b/data/resources/ui/content-send-media-window.blp index 86493b414..b5584ed47 100644 --- a/data/resources/ui/content-send-media-window.blp +++ b/data/resources/ui/content-send-media-window.blp @@ -5,6 +5,7 @@ template $ContentSendMediaWindow : Adw.Window { default-width: 500; default-height: 500; modal: true; + title: _("Send Image"); content: Adw.ToolbarView { [top] @@ -23,10 +24,10 @@ template $ContentSendMediaWindow : Adw.Window { } Button { - styles ["circular", "suggested-action"] + styles ["small-pill", "suggested-action"] action-name: "send-media-window.send-message"; - icon-name: "go-up-symbolic"; + label: _("Send"); valign: end; } }; diff --git a/src/session/content/send_media_window.rs b/src/session/content/send_media_window.rs index 2ccb299e2..e05db19d0 100644 --- a/src/session/content/send_media_window.rs +++ b/src/session/content/send_media_window.rs @@ -8,7 +8,6 @@ use gtk::CompositeTemplate; use once_cell::unsync::OnceCell; use crate::components::MessageEntry; -use crate::expressions; use crate::tdlib::Chat; mod imp { @@ -90,9 +89,6 @@ impl SendMediaWindow { .build(); let imp = obj.imp(); - let chat_expression = gtk::ConstantExpression::new(&chat); - expressions::chat_display_name(&chat_expression).bind(&obj, "title", glib::Object::NONE); - imp.picture.set_filename(Some(&path)); imp.caption_entry.set_chat(Some(chat.clone())); From 83c882c8ccb99e99a84dddd519b6fe87d2cf14c5 Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Sun, 21 May 2023 17:32:32 +0200 Subject: [PATCH 22/26] feat(send-media-window): Add "Send as File" feature --- data/resources/style.css | 12 ++++++ .../ui/content-send-media-window.blp | 10 ++++- src/session/content/send_media_window.rs | 40 +++++++++++++------ 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/data/resources/style.css b/data/resources/style.css index 1c9574c9d..0328d7a46 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -407,3 +407,15 @@ window.chat-info .main-page > list { .small-pill { border-radius: 18px; } + +splitbutton.small-pill:dir(ltr) > button, +splitbutton.small-pill:dir(rtl) > menubutton > button { + border-top-left-radius: 18px; + border-bottom-left-radius: 18px; +} + +splitbutton.small-pill:dir(rtl) > button, +splitbutton.small-pill:dir(ltr) > menubutton > button { + border-top-right-radius: 18px; + border-bottom-right-radius: 18px; +} diff --git a/data/resources/ui/content-send-media-window.blp b/data/resources/ui/content-send-media-window.blp index b5584ed47..06f3ecc8f 100644 --- a/data/resources/ui/content-send-media-window.blp +++ b/data/resources/ui/content-send-media-window.blp @@ -23,14 +23,22 @@ template $ContentSendMediaWindow : Adw.Window { placeholder-text: _("Caption"); } - Button { + Adw.SplitButton { styles ["small-pill", "suggested-action"] action-name: "send-media-window.send-message"; label: _("Send"); + menu-model: more_options_menu; valign: end; } }; } }; } + +menu more_options_menu { + item { + label: _("Send as _File"); + action: "send-media-window.send-as-file"; + } +} diff --git a/src/session/content/send_media_window.rs b/src/session/content/send_media_window.rs index e05db19d0..0a91b7907 100644 --- a/src/session/content/send_media_window.rs +++ b/src/session/content/send_media_window.rs @@ -38,7 +38,14 @@ mod imp { "send-media-window.send-message", None, |widget, _, _| async move { - widget.send_message().await; + widget.send_message(false).await; + }, + ); + klass.install_action_async( + "send-media-window.send-as-file", + None, + |widget, _, _| async move { + widget.send_message(true).await; }, ); } @@ -115,7 +122,7 @@ impl SendMediaWindow { emoji_chooser.as_ref().unwrap().popup(); } - async fn send_message(&self) { + async fn send_message(&self, send_as_file: bool) { use tdlib::enums::*; use tdlib::types::*; @@ -132,16 +139,25 @@ impl SendMediaWindow { let caption = imp.caption_entry.as_markdown().await; let file = InputFile::Local(InputFileLocal { path }); - let content = InputMessageContent::InputMessagePhoto(InputMessagePhoto { - photo: file, - thumbnail: None, - added_sticker_file_ids: vec![], - width, - height, - caption, - self_destruct_time: 0, - has_spoiler: false, - }); + let content = if send_as_file { + InputMessageContent::InputMessageDocument(InputMessageDocument { + document: file, + thumbnail: None, + disable_content_type_detection: true, + caption, + }) + } else { + InputMessageContent::InputMessagePhoto(InputMessagePhoto { + photo: file, + thumbnail: None, + added_sticker_file_ids: vec![], + width, + height, + caption, + self_destruct_time: 0, + has_spoiler: false, + }) + }; // TODO: maybe show an error dialog when this fails? if tdlib::functions::send_message(chat_id, 0, 0, None, content, client_id) From 0d0963bc20abf47fc8154561b8d4d28f6e7f932a Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Sat, 20 May 2023 16:05:04 +0200 Subject: [PATCH 23/26] chore: Update libadwaita and gtk Also fix a crash that was caused from this update. --- build-aux/app.drey.PaperPlane.Devel.json | 4 ++-- src/session/sidebar/avatar.rs | 12 +----------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/build-aux/app.drey.PaperPlane.Devel.json b/build-aux/app.drey.PaperPlane.Devel.json index b574afcbe..dd6b9de13 100644 --- a/build-aux/app.drey.PaperPlane.Devel.json +++ b/build-aux/app.drey.PaperPlane.Devel.json @@ -77,7 +77,7 @@ { "type": "git", "url": "https://gitlab.gnome.org/GNOME/gtk.git", - "tag": "4.10.3" + "tag": "4.11.3" }, { "type": "patch", @@ -138,7 +138,7 @@ { "type": "git", "url": "https://gitlab.gnome.org/GNOME/libadwaita.git", - "commit": "57bc21b4c51aa361609fe6f57031630589391b0b" + "tag": "1.4.alpha" } ] }, diff --git a/src/session/sidebar/avatar.rs b/src/session/sidebar/avatar.rs index 0834df72b..41f363a4e 100644 --- a/src/session/sidebar/avatar.rs +++ b/src/session/sidebar/avatar.rs @@ -11,7 +11,6 @@ use once_cell::sync::Lazy; use tdlib::enums::UserStatus; use tdlib::enums::UserType; -use super::Sidebar; use crate::components::Avatar as ComponentsAvatar; use crate::tdlib::BoxedUserStatus; use crate::tdlib::Chat; @@ -137,16 +136,7 @@ impl Avatar { return; } - // This should never panic as there must always be a `Sidebar` as ancestor having a - // `Session`. - let session = self - .ancestor(Sidebar::static_type()) - .unwrap() - .downcast_ref::() - .unwrap() - .session() - .unwrap(); - + let session = user.session(); let my_id = session.me().id(); let user_id = user.id(); let is_online_binding = gtk::ObjectExpression::new(user) From 2cbe4a9bd41214835a36bcf200e6261458906630 Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Fri, 2 Jun 2023 23:20:37 +0200 Subject: [PATCH 24/26] feat: Port to AdwNavigationSplitView --- Cargo.lock | 12 +++--- Cargo.toml | 2 +- data/resources/ui/content-chat-history.ui | 10 ----- .../resources/ui/content-chat-info-window.blp | 6 +-- data/resources/ui/content.blp | 11 +---- data/resources/ui/session.blp | 42 ++++++++++++------- data/resources/ui/sidebar-search.ui | 1 - data/resources/ui/sidebar.ui | 5 --- data/resources/ui/window.blp | 3 +- src/session/content/chat_history.rs | 7 ---- src/session/content/mod.rs | 16 ++----- src/session/mod.rs | 24 ++--------- src/session/sidebar/mod.rs | 30 +++---------- src/session/sidebar/search/mod.rs | 29 ++----------- 14 files changed, 56 insertions(+), 142 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 847d37cc8..0c712af3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -851,11 +851,11 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libadwaita" -version = "0.3.1" -source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs?branch=v0.3-adaptive-states-and-more#e6ec4f54f96362877175866ea864c8a5ecf31b5f" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab9c0843f9f23ff25634df2743690c3a1faffe0a190e60c490878517eb81abf" dependencies = [ "bitflags", - "futures-channel", "gdk-pixbuf", "gdk4", "gio", @@ -863,14 +863,14 @@ dependencies = [ "gtk4", "libadwaita-sys", "libc", - "once_cell", "pango", ] [[package]] name = "libadwaita-sys" -version = "0.3.0" -source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs?branch=v0.3-adaptive-states-and-more#e6ec4f54f96362877175866ea864c8a5ecf31b5f" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4231cb2499a9f0c4cdfa4885414b33e39901ddcac61150bc0bb4ff8a57ede404" dependencies = [ "gdk4-sys", "gio-sys", diff --git a/Cargo.toml b/Cargo.toml index cc21be09f..2b1913c3a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Marco Melorio ", "Marcus Behrendt - - - - - go-previous-symbolic - content.go-back - - diff --git a/data/resources/ui/content-chat-info-window.blp b/data/resources/ui/content-chat-info-window.blp index e24b3531c..e106053f2 100644 --- a/data/resources/ui/content-chat-info-window.blp +++ b/data/resources/ui/content-chat-info-window.blp @@ -10,10 +10,8 @@ template $ContentChatInfoWindow : Adw.Window { content: Adw.ToastOverlay toast_overlay { child: Adw.ToolbarView { [top] - HeaderBar { - title-widget: Adw.WindowTitle { - visible: false; - }; + Adw.HeaderBar { + show-title: false; } content: Adw.Clamp { diff --git a/data/resources/ui/content.blp b/data/resources/ui/content.blp index 39abed311..82da2f4aa 100644 --- a/data/resources/ui/content.blp +++ b/data/resources/ui/content.blp @@ -2,20 +2,12 @@ using Gtk 4.0; using Adw 1; template $Content : Adw.Bin { - hexpand: true; - width-request: 300; - - styles ["view"] - Stack stack { Adw.ToolbarView unselected_chat_view { [top] Overlay { Adw.HeaderBar { - show-start-title-buttons: false; - - [title] - Adw.WindowTitle {} + show-title: false; } [overlay] @@ -33,7 +25,6 @@ template $Content : Adw.Bin { } $ContentChatHistory chat_history { - compact: bind template.compact; chat: bind template.chat; } } diff --git a/data/resources/ui/session.blp b/data/resources/ui/session.blp index 8f1996a59..95865cbe4 100644 --- a/data/resources/ui/session.blp +++ b/data/resources/ui/session.blp @@ -2,22 +2,36 @@ using Gtk 4.0; using Adw 1; template $Session : Adw.Bin { - Adw.Leaflet leaflet { - can-navigate-back: true; + child: Adw.BreakpointBin { + width-request: 360; + height-request: 200; - $Sidebar sidebar { - compact: bind leaflet.folded; - selected-chat: bind-property content.chat bidirectional; - session: "Session"; - } + child: Adw.NavigationSplitView split_view { + min-sidebar-width: 200; + max-sidebar-width: 300; + sidebar-width-fraction: 0.4; - Adw.LeafletPage { - navigatable: false; - child: Separator {}; - } + sidebar: Adw.NavigationPage { + title: _("Chats"); + + child: $Sidebar sidebar { + compact: bind split_view.collapsed; + selected-chat: bind-property content.chat bidirectional; + session: "Session"; + }; + }; + + content: Adw.NavigationPage { + tag: "content"; + child: $Content content {}; + }; + }; - $Content content { - compact: bind leaflet.folded; + Adw.Breakpoint { + condition ("max-width: 560sp") + setters { + split_view.collapsed: true; + } } - } + }; } diff --git a/data/resources/ui/sidebar-search.ui b/data/resources/ui/sidebar-search.ui index 7a3043fe1..e0ec853bb 100644 --- a/data/resources/ui/sidebar-search.ui +++ b/data/resources/ui/sidebar-search.ui @@ -5,7 +5,6 @@ - Search diff --git a/data/resources/ui/sidebar.ui b/data/resources/ui/sidebar.ui index 281a1db16..3c43bb5a5 100644 --- a/data/resources/ui/sidebar.ui +++ b/data/resources/ui/sidebar.ui @@ -29,7 +29,6 @@