Fixes#793.
This is an implementation for push notifications based on UnifiedPush
for Tusky. No push gateway (other than UP itself) is needed, since
UnifiedPush is simple enough such that it can act as a catch-all
endpoint for WebPush messages. When a UnifiedPush distributor is present
on-device, we will by default register Tusky as a receiver; if no
UnifiedPush distributor is available, then pull notifications are used
as a fallback mechanism.
Because WebPush messages are encrypted, and Mastodon does not send the
keys and IV needed for decryption in the request body, for now the push
handler simply acts as a trigger for the pre-existing NotificationWorker
which is also used for pull notifications. Nevertheless, I have
implemented proper key generation and storage, just in case we would
like to implement full decryption support in the future when Mastodon
upgrades to the latest WebPush encryption scheme that includes all
information in the request body.
For users with existing accounts, push notifications will not be enabled
until all of the accounts have been re-logged in to grant the new push
OAuth scope. A small prompt will be shown (until dismissed) as a
Snackbar to explain to the user about this, and an option is added in
Account Preferences to facilitate re-login without deleting local drafts
and cache.
Currently translated at 99.5% (477 of 479 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
Currently translated at 100.0% (479 of 479 strings)
Translated using Weblate (Gaelic)
Currently translated at 100.0% (479 of 479 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (478 of 478 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (478 of 478 strings)
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
Currently translated at 100.0% (478 of 478 strings)
Co-authored-by: idontwanttohaveausername <bydlanm@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Italian)
Currently translated at 96.6% (461 of 477 strings)
Co-authored-by: Stefano Pigozzi <me@steffo.eu>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/it/
Translation: Tusky/Tusky
Previously we simply closed the screen with the login WebView which
could cause confusion. Now we specify that page could not be loaded.
As a side effect it will also show the error message which the server
returns (if any).
* Set TextIsSelectable on the corresponding view holders and remove a longpress listener to let Android select text.
* Revert changes, and make selectable text only in detailed status.
Remove long press listener to copy to clipboard (as it interferes with natural text selection on Android).
* Remove unused string (copy_to_clipboard_success) from all translations.
Co-authored-by: Martin Marconcini <martin.marconcini.rodriguez@nl.abnamro.com>
* make MastodonApi.createStatus suspending
* check if media processing has finished before sending status
* add backoff for retrying processed media check
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Gaelic)
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Gaelic)
Currently translated at 100.0% (477 of 477 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (477 of 477 strings)
Co-authored-by: Gera, Zoltan <gerazo@manioka.hu>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/
Translation: Tusky/Tusky
* Add back the emojiInitCallback and move EmojiCompat init
* Small adjustments
* Make sure that we don't hit the IllegalStateException when EmojiCompat-ing the display names
* Add a TODO for when Material Drawer 9 can be used
* Remove EmojiCompat.process and initcallback
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Gaelic)
Currently translated at 100.0% (477 of 477 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (477 of 477 strings)
Co-authored-by: Gera, Zoltan <gerazo@manioka.hu>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/
Translation: Tusky/Tusky
* Update to Emoji2
* Hopefully fix the emoji picker preference
* Switch to released Filemojicompat version
* Filemojicompat version as an own var
* Remove an unused import
* Small cleanup
* Correct onDisplayPreferenceDialog; test TuskyApplication
* Use TextViews instead of EmojiTextViews
* Recreate the Main Activity if the emoji pack is updated
* Enable coreLibraryDesugaring (for Java Streams); update Filemojicompat, downgrade Emoji2
* Update emoji font versions to 14
* Use FilemojiCompat 3.2.0-beta01
* Make ktLint happy again
* Remove coreLibraryDesugaring and a FIXME
* Use EmojiPickerPreference.get()
* Disable emoji pack import
* Update FilemojiCompat to Beta 2
* Update FilemojiCompat to Beta 3
* Update FilemojiCompat to Beta 3.2.0 final
* Update FilemojiCompat to 3.2.1
Currently translated at 99.3% (474 of 477 strings)
Translated using Weblate (Gaelic)
Currently translated at 100.0% (473 of 473 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (473 of 473 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (473 of 473 strings)
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
Currently translated at 100.0% (477 of 477 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (473 of 473 strings)
Co-authored-by: Vegard Skjefstad <vegard@vegard.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/nb_NO/
Translation: Tusky/Tusky
Currently translated at 93.0% (440 of 473 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/oc/
Translation: Tusky/Tusky
* guard against the status of a notification being null in rare cases
* improve code, fix bug when payloads is not null
* remove findViewById
* add comments in NotificationsAdapter
* refactor compose & announcements to coroutines
* fix code formatting
* add javadoc to InstanceInfoRepository
* fix comments in ImageDownsizer
* remove unused Either extensions
* add explicit return type for InstanceInfoRepository.getEmojis
* make ComposeViewModel.pickMedia return Result
* cleanup code in ImageDownsizer
* Improve time format of posts when using absolute time
* fix AbsoluteTimeFormatter, add tests
* fix tests
Co-authored-by: Conny Duck <k.pozniak@gmx.at>
* fix black theme on Android 12
* Revert "fix black theme on Android 12"
This reverts commit 2286706fdb239e15be72ac8943405ffeb2258219.
* bring back SplashActivity
Currently translated at 100.0% (469 of 469 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (469 of 469 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (469 of 469 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (469 of 469 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (469 of 469 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (469 of 469 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: sphoneix <simone.pugliese21@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/it/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
* Improve login process with newer APIs
* Implement login with WebView instead of browser tab or external browser
Oauth process requires us to open login prompt for correct instance and
we need to receive the result back. Usually it is done with redirect
parameter.
Previously we've been using BrowserTabs API and have been falling back
to just opening browser. This mostly worked but is very clumsy:
- It relies on few system mechanisms for opening URLs in both
directions
- Browsers do weird things and tend to break quite a bit
- There's a good chance that the app can die in the process and we need
to recover our state.
So instead we are now using WebView. It has disadvantages (users have
to trust us to show correct page, logins are not shared w/ browser) but
it should be more reliable.
* Changes to login after review
* Move login classes to their own package
* Fix linting issues
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/is/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
Currently translated at 100.0% (468 of 468 strings)
Translated using Weblate (Occitan)
Currently translated at 97.2% (455 of 468 strings)
Translated using Weblate (Arabic)
Currently translated at 98.9% (463 of 468 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ar/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/oc/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Jonathan Soares <vsrw5bfj@duck.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/pt_BR/
Translation: Tusky/Tusky
* update Android Image Cropper and get rid of deprecated onActivityResult
* add comment why skipping caches is necessary
* inject application into EditProfileViewModel instead of passing it everytime
* Add data model for instance configuration
* Support instance.configuration.statuses.max_characters
* Support instance.configuration.statuses.characters_reserved_per_url
* Support instance.configuration.polls.max_options and max_characters_per_option
* Pacify ktlint
* Support instance-configured poll durations
* Fixup versions for migration after rebase
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
* Migrate LinkHelper to kotlin
* Support tags field on statuses
* Use embedded tags list in status instead of text scraping to embed tag click handler.
Fixes#2283
* Make mentions and tags lists nonnullable
* Make LinkHelper.openLink a Context extension method
* Use builtin extension for uri conversion
* More cleanup in LinkHelper
* Add tests for LinkHelper.getDomain
* Unbreak tags in places that don't have a tag list (e.g. profiles)
* Fixup javadoc
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Connyduck <weblate@connyduck.at>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/de/
Translation: Tusky/Tusky
Currently translated at 98.9% (457 of 462 strings)
Translated using Weblate (Irish)
Currently translated at 92.2% (426 of 462 strings)
Translated using Weblate (Thai)
Currently translated at 97.8% (452 of 462 strings)
Translated using Weblate (Slovenian)
Currently translated at 85.4% (395 of 462 strings)
Translated using Weblate (Occitan)
Currently translated at 98.4% (455 of 462 strings)
Translated using Weblate (Dutch)
Currently translated at 99.5% (460 of 462 strings)
Translated using Weblate (Persian)
Currently translated at 99.3% (459 of 462 strings)
Co-authored-by: Connyduck <weblate@connyduck.at>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/bn_BD/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fa/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ga/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/nl/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/oc/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/sl/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/th/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Hồ Nhất Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Vladyslav Stepanov <wrottkitkatt@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ru/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Esperanto)
Currently translated at 99.7% (461 of 462 strings)
Co-authored-by: Mélanie Chauvel <perso@hack-libre.org>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/eo/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
Currently translated at 54.5% (252 of 462 strings)
Translated using Weblate (Arabic)
Currently translated at 98.9% (457 of 462 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ar/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/kab/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Esperanto)
Currently translated at 98.7% (456 of 462 strings)
Translated using Weblate (French)
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Mélanie Chauvel <perso@hack-libre.org>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/eo/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
Currently translated at 99.5% (460 of 462 strings)
Translated using Weblate (Arabic)
Currently translated at 98.7% (456 of 462 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ar/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Connyduck <weblate@connyduck.at>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/de/
Translation: Tusky/Tusky
* update gradle, kotlin and other dependencies
* fix new warnings
* remove unused import
* update Proguard rules
* add explicit dependency on Gson to get the newest version
* remove debug flag from proguard rules again
* fix typo
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: leo <aaoth@aaoth.xyz>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ru/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 99.1% (458 of 462 strings)
Translated using Weblate (Esperanto)
Currently translated at 96.5% (446 of 462 strings)
Co-authored-by: Mélanie Chauvel <perso@hack-libre.org>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/eo/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/fr/
Translation: Tusky/Tusky
* first setup
* network timeline paging / improvements
* rename classes / move to correct package
* remove unused class TimelineAdapter
* some code cleanup
* remove TimelineRepository, put mapper functions in TimelineTypeMappers.kt
* add db migration
* cleanup unused code
* bugfix
* make default timeline settings work again
* fix pinning statuses from timeline
* fix network timeline
* respect account settings in NetworkTimelineRemoteMediator
* respect account settings in NetworkTimelineRemoteMediator
* update license headers
* show error view when an error occurs
* cleanup some todos
* fix db migration
* fix changing mediaPreviewEnabled setting
* fix "load more" button appearing on top of timeline
* fix filtering and other bugs
* cleanup cache after 14 days
* fix TimelineDAOTest
* fix code formatting
* add NetworkTimeline unit tests
* add CachedTimeline unit tests
* fix code formatting
* move TimelineDaoTest to unit tests
* implement removeAllByInstance for CachedTimelineViewModel
* fix code formatting
* fix bug in TimelineDao.deleteAllFromInstance
* improve loading more statuses in NetworkTimelineViewModel
* improve loading more statuses in NetworkTimelineViewModel
* fix bug where empty state was shown too soon
* reload top of cached timeline on app start
* improve CachedTimelineRemoteMediator and Tests
* improve cached timeline tests
* fix some more todos
* implement TimelineFragment.removeItem
* fix ListStatusAccessibilityDelegate
* fix crash in NetworkTimelineViewModel.loadMore
* fix default state of collapsible statuses
* fix default state of collapsible statuses -tests
* fix showing/hiding media in the timeline
* get rid of some not-null assertion operators in TimelineTypeMappers
* fix tests
* error handling in CachedTimelineViewModel.loadMore
* keep local status state when refreshing cached statuses
* keep local status state when refreshing network timeline statuses
* show placeholder loading state in cached timeline
* better comments, some code cleanup
* add TimelineViewModelTest, improve code, fix bug
* fix ktlint
* fix voting in boosted polls
* code improvement
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: sleepycrow <sleepycrow@posteo.net>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/pl/
Translation: Tusky/Tusky
Currently translated at 53.4% (247 of 462 strings)
Co-authored-by: helabasa <R45XvezA@pm.me>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/si/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/is/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
Currently translated at 33.9% (157 of 462 strings)
Co-authored-by: Vachan <translation.spiting@aleeas.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ml/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: Sojo <sendoasojo@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/es/
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/eu/
Translation: Tusky/Tusky
Currently translated at 100.0% (462 of 462 strings)
Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
Currently translated at 100.0% (460 of 460 strings)
Co-authored-by: Eric <spice2wolf@gmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
Currently translated at 57.1% (263 of 460 strings)
Translated using Weblate (Frisian)
Currently translated at 54.1% (249 of 460 strings)
Translated using Weblate (Frisian)
Currently translated at 0.4% (2 of 460 strings)
Co-authored-by: Tjipke van der Heide <tjipkevdh@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fy/
Translation: Tusky/Tusky
Currently translated at 98.2% (452 of 460 strings)
Translated using Weblate (Arabic)
Currently translated at 96.9% (446 of 460 strings)
Added translation using Weblate (Frisian)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://"weblate.tusky.app"/projects/tusky/tusky/ar/
Translation: Tusky/Tusky
Currently translated at 100.0% (460 of 460 strings)
Translated using Weblate (Dutch)
Currently translated at 99.7% (459 of 460 strings)
Co-authored-by: Vancha <tjipke@tutanota.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/nl/
Translation: Tusky/Tusky
Currently translated at 100.0% (460 of 460 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (460 of 460 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (460 of 460 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (460 of 460 strings)
Co-authored-by: Ho Nhat Duy <kantcer@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky