Commit Graph

4206 Commits

Author SHA1 Message Date
Jichi Zhang c9355d9b00
Recreate activities on screenLayout change (#4689)
Fixes #4255 

Tested on Pixel 9 Pro Fold.

Before


https://github.com/user-attachments/assets/dd4d3a06-fb9f-4d89-94c3-401875cfe6f7

After


https://github.com/user-attachments/assets/dac01631-1add-48f4-9cb9-7365b3da2c9c
2024-09-28 07:49:38 +02:00
Konrad Pozniak d00ad17603
remove wrong statuses attribute from Announcement model (#4699)
https://docs.joinmastodon.org/entities/Announcement/

The statuses in this model are not full statuses but we expect them, so
parsing a response that contains one fails.
`com.squareup.moshi.JsonDataException: Required value 'account' missing
at $[0].statuses[1]`

Since we don't even use the attribute, we can just remove it to fix the
bug.

Closes #4696
2024-09-28 07:43:18 +02:00
Konrad Pozniak 13a9e9eb37
fix crash in ViewImageFragment (#4686)
From Play console crash logs. Well, let's put another band aid on this
code....

```
Exception java.lang.IllegalStateException:
  at androidx.fragment.app.Fragment.requireActivity (Fragment.java:1005)
  at com.keylesspalace.tusky.fragment.ViewImageFragment.getPhotoActionsListener (ViewImageFragment.java:59)
  at com.keylesspalace.tusky.fragment.ViewImageFragment.access$getPhotoActionsListener (ViewImageFragment.java:49)
  at com.keylesspalace.tusky.fragment.ViewImageFragment$onViewCreated$singleTapDetector$1.onSingleTapConfirmed (ViewImageFragment.kt:116)
  at android.view.GestureDetector$GestureHandler.handleMessage (GestureDetector.java:379)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:230)
  at android.os.Looper.loop (Looper.java:319)
  at android.app.ActivityThread.main (ActivityThread.java:8919)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:578)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)
```
2024-09-27 16:20:22 +02:00
Konrad Pozniak c887c8213c
fix new warnings, regenerate lint-baseline.xml (#4684)
Mostly "StringFormatTrivial" which I think is new, but it makes totally
sense to fix
2024-09-16 20:57:27 +02:00
Konrad Pozniak a98154101b
revert MainActivity launchMode again (#4685)
This fixes
- The problem where Tusky drops your draft when you switch apps while
composing
- The problem where MainActivity does not restart when switching theme
in preferences

This adds back a bug where one can have multiple instances of
MainActivity which can behave weirdly when the active account was
switched after they were created. This bug is (unlike the timeline mixup
one) transient though, it will go away when restarting the app. As a
small mitigation MainActivity is finished when forwarding to
ComposeActivity (Tusky 25 behavior).
2024-09-16 20:57:15 +02:00
Konrad Pozniak f2a2c16464
Better refreshing state handling for AccountViewModel (#4680)
Closes #4353 by addressing the last edge case: The swipe to refresh
won't be enabled before something is loaded, preventing multiple loads
at the same time. After the first load, the swipe to refresh itself
prevents multiple loads: It can be swiped only once.

---------

Co-authored-by: Goooler <wangzongler@gmail.com>
2024-09-15 17:32:19 +02:00
Hồ Nhất Duy f357402a48 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (652 of 652 strings)

Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
2024-09-13 14:41:07 +00:00
Konrad Pozniak b693d4d466
remove extra newlines on some PIxelfed posts (#4672)
closes https://github.com/tuskyapp/Tusky/issues/4663
2024-09-13 15:52:48 +02:00
Konrad Pozniak 767f10a5db
Translations update from Weblate (automated) (#4671)
Translations update from [Weblate](https://weblate.tusky.app) for
[Tusky/Tusky](https://weblate.tusky.app/projects/tusky/tusky/).



Current translation status:

![Weblate translation
status](https://weblate.tusky.app/widget/tusky/tusky/horizontal-auto.svg)
2024-09-13 15:52:37 +02:00
Andrew Hamilton 3c25b76853
Adds auto keyboard popup to dialogs (#4667)
Adds auto keyboard popup to ListsActivity, FollowedTagsActivity,
EditFilterActivity, CaptionDialog, and AddPollDialog.kt, and
AddHashtagDialog in TabPreferenceActivity. These are all dialog screens
which editing texts are the main purposes

---------

Co-authored-by: Weblate <42475313+nailyk-weblate@users.noreply.github.com>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Co-authored-by: Manuel <mannivuwiki@gmail.com>
Co-authored-by: Eric <ekhfcxwuvxqfdb@hldrive.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-09-13 15:52:11 +02:00
Weblate 6a8bb044bb
Translations update from Weblate (automated) (#4665)
Translations update from [Weblate](https://weblate.tusky.app) for
[Tusky/Tusky](https://weblate.tusky.app/projects/tusky/tusky/).



Current translation status:

![Weblate translation
status](https://weblate.tusky.app/widget/tusky/tusky/horizontal-auto.svg)

---------

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Co-authored-by: Manuel <mannivuwiki@gmail.com>
Co-authored-by: Eric <ekhfcxwuvxqfdb@hldrive.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-09-12 18:48:48 +02:00
XoseM 91e641c836 Translated using Weblate (Galician)
Currently translated at 100.0% (652 of 652 strings)

Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
2024-09-12 16:38:45 +00:00
fin-w 479d1deebc Translated using Weblate (Welsh)
Currently translated at 100.0% (652 of 652 strings)

Co-authored-by: fin-w <fin-w@tutanota.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/cy/
Translation: Tusky/Tusky
2024-09-12 16:38:45 +00:00
Konrad Pozniak 50ca44a5f6
Material Design 3 (#4637)
I tried to find a balance between going fully M3 and keeping some of the
original Tusky feeling.
For example, I removed the "allCaps" setting we had on most buttons,
which is recommended for M3. On the other hand, I made them less rounded
than the M3 default.

<img
src="https://github.com/user-attachments/assets/9d2485e0-7d1d-42ab-8a4e-c30d044aa5dc"
width="320"/>
<img
src="https://github.com/user-attachments/assets/d65d3c91-afe9-424e-92d7-e0f3e401ea4b"
width="320"/>
<img
src="https://github.com/user-attachments/assets/d5634440-c507-4484-a11e-983f47cbeab7"
width="320"/>
2024-09-10 19:50:09 +02:00
Konrad Pozniak a9d6b60291
continue uploading media after sending post (#4662)
regression from https://github.com/tuskyapp/Tusky/pull/4599

https://pug.ninja/@motoridersd/113102603349423738

The problem is, `MediaUploader` is no longer a singleton, so the state
is not correctly shared between `ComposeActivity` and
`SendStatusService.` But it can't be a singleton, since `MediaUploadApi`
(injected into `MediaUploader`) needs to be recreated on account change.
Let's share the state in the companion object instead.
2024-09-10 19:16:53 +02:00
Konrad Pozniak 4f135c7f7b
fix hidden url markup when link text contains 🔗 (#4650)
Found a post that had a link that contained a 🔗 in the link text, which
tripped up our algorithm.
https://toot.mirbsd.org/@fefes_blog/statuses/01J6YVRNW9C3Q6GBCWKT96CYD0

Before / After

<img
src="https://github.com/user-attachments/assets/b2ce6f0c-7ae2-4351-86f9-2564252e9a62"
width="280"/>
<img
src="https://github.com/user-attachments/assets/589ffe6d-e57e-4c2e-bd82-b01ef178d551"
width="280"/>
2024-09-09 18:18:00 +02:00
andrewhamilton0 60a1922db6
This allows user to translate own post (#4648)
This allows user to translate own post
Closes #4645
2024-09-04 21:35:27 +02:00
Konrad Pozniak 85a59ec1f5
prepare release 26.2 (#4646) 2024-09-04 20:17:35 +02:00
mcclure 2a1cc7580c
Do not cancel the caption dialog on touches on navbar (#4643)
This one is odd.
I find that if I
- Add an image to a post
- Set a caption on the image
- Tap the caption dialog to bring up the keyboard
- Tap the navbar (very easy to do by accident while typing, just tap
under the spacebar)

The caption dialog disappears and you lose your caption.
(This doesn't happen in ANY other dialog in the app, and in the caption
dialog it ONLY happens when the keyboard is up.)
I got a tablet and on the tablet this happens ALL THE TIME.

I was considering adding a "really cancel?" dialog to the caption
dialog. But then I discovered (thank you @memorion@mastodon.social) by
setting getCanceledOnTouchOutside(false), I could make the bad behavior
go ahead completely. In my tests now I can only make the dialog go away
by tapping the actual back button.

I believe the potential negative impact of this is low because the
caption dialog is full screen, so it was already impossible to trigger
the touch outside behavior on *purpose*.

I might attempt a "really cancel caption?" dialog later because it sucks
to lose a long caption you have typed, but I think this fixes my
personal problem by itself.

---------

Co-authored-by: Konrad Pozniak <connyduck@users.noreply.github.com>
2024-09-02 20:50:55 +02:00
Konrad Pozniak 24f227fd4f
fix crash when there are reblogs in notification statuses (#4638)
```
android.database.sqlite.SQLiteConstraintException: FOREIGN KEY constraint failed (code 787 SQLITE_CONSTRAINT_FOREIGNKEY)
    at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
    at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:961)
    at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:790)
    at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:89)
    at androidx.sqlite.db.framework.FrameworkSQLiteStatement.executeInsert(FrameworkSQLiteStatement.kt:42)
    at androidx.room.EntityInsertionAdapter.insertAndReturnId(EntityInsertionAdapter.kt:101)
    at com.keylesspalace.tusky.db.dao.TimelineStatusDao_Impl$insert$2.call(TimelineStatusDao_Impl.kt:345)
    at com.keylesspalace.tusky.db.dao.TimelineStatusDao_Impl$insert$2.call(TimelineStatusDao_Impl.kt:340)
    at androidx.room.CoroutinesRoom$Companion.execute(CoroutinesRoom.kt:56)
    at com.keylesspalace.tusky.db.dao.TimelineStatusDao_Impl.insert(TimelineStatusDao_Impl.kt:340)
    at com.keylesspalace.tusky.components.notifications.NotificationsRemoteMediator.replaceNotificationRange(NotificationsRemoteMediator.kt:169)
    at com.keylesspalace.tusky.components.notifications.NotificationsRemoteMediator.access$replaceNotificationRange(NotificationsRemoteMediator.kt:36)
    at com.keylesspalace.tusky.components.notifications.NotificationsRemoteMediator$load$3.invokeSuspend(NotificationsRemoteMediator.kt:109)
    at com.keylesspalace.tusky.components.notifications.NotificationsRemoteMediator$load$3.invoke(Unknown Source:8)
    at com.keylesspalace.tusky.components.notifications.NotificationsRemoteMediator$load$3.invoke(Unknown Source:2)
    at androidx.room.RoomDatabaseKt$withTransaction$transactionBlock$1.invokeSuspend(RoomDatabaseExt.kt:62)
    at androidx.room.RoomDatabaseKt$withTransaction$transactionBlock$1.invoke(Unknown Source:8)
    at androidx.room.RoomDatabaseKt$withTransaction$transactionBlock$1.invoke(Unknown Source:4)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:61)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:163)
    at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
    at androidx.room.RoomDatabaseKt$startTransactionCoroutine$2$1$1.invokeSuspend(RoomDatabaseExt.kt:103)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
    at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
    at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
    at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
    at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
    at androidx.room.RoomDatabaseKt$startTransactionCoroutine$2$1.run(RoomDatabaseExt.kt:99)
    at androidx.room.TransactionExecutor.execute$lambda$1$lambda$0(TransactionExecutor.kt:36)
    at androidx.room.TransactionExecutor.$r8$lambda$FZWr2PGmP3sgXLCiri-DCcePXSs(Unknown Source:0)
    at androidx.room.TransactionExecutor$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
    at java.lang.Thread.run(Thread.java:1012)
```

It looks kinda weird because "x just posted" has a different user than
the actual post, but it works for groups I guess? And definitely better
than crashing.

<img
src="https://github.com/user-attachments/assets/8110ff17-674d-4f36-8df0-453a666856a6"
width="320"/>

closes #4563
2024-09-02 20:00:27 +02:00
Konrad Pozniak 4d73a3c2e3
Fix detecting urls (#4642)
closes #4641
2024-09-02 19:56:38 +02:00
Konrad Pozniak 31e4f08966
fix account switching (#4636)
closes #4631 
closes #4629 

and other weirdness introduced in Tusky 26.1.
I did a lot of testing on 2 physical devices and multiple emulators. It
definitely is better than before, but probably still not perfect.
2024-09-02 19:49:22 +02:00
andrewhamilton0 74d479c3dc
Fixes issue where alt text positioning covers video controller (#4632)
Fixes issue where alt text positioning covers video controller
Also adds scroll view for more responsive scrolling
closes #4165
2024-09-02 18:39:23 +02:00
andrewhamilton0 49fbe1f408
Minimizes keyboard on search screen (#4633)
Adds feature if user clicks on toolbar, on the pages box, or on the tabs
buttons that the keyboard will minimize and focus will be taken off of
search bar.

Further addresses issue #4573
2024-09-01 13:28:55 +02:00
Quentí 14560fe24d Translated using Weblate (Occitan)
Currently translated at 99.3% (647 of 651 strings)

Translated using Weblate (Occitan)

Currently translated at 98.3% (640 of 651 strings)

Co-authored-by: Quentí <quentinantonin@free.fr>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/oc/
Translation: Tusky/Tusky
2024-08-27 17:37:06 +00:00
XoseM 3ce49da0cc Translated using Weblate (Galician)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
2024-08-22 04:07:10 +00:00
Konrad Pozniak f3732cc48e
Release 26.1 (#4614) 2024-08-21 19:48:46 +02:00
Ihor Hordiichuk aa1c208551 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
2024-08-20 02:07:10 +00:00
Konrad Pozniak e23686ec70
fix timeline jumping around when new posts are inserted at the top (#4619)
This fixes a bug where the timeline would jump to the position of a
previously clicked "load more" when new post are inserted at the top
after swiping to refresh.

This only happens when "Reading order" is set to "Oldest first".

The problem is that updateReadingPositionForOldestFirst (which consumes
the marker to which it should jump) is called from onItemRangeInserted.
But onItemRangeInserted is not called everytime a "load more" is
clicked, leaving the marker active, causing a jump the next time
onItemRangeInserted is called.

I am not sure this fixes all cases of the various jumping bugs that have
been reported recently as this was the only one I could reliably
reproduce.

Related to https://github.com/tuskyapp/Tusky/issues/4493
2024-08-19 20:53:11 +02:00
Konrad Pozniak 3f2b648b19
fix "load more" progressbar sometimes not showing up (#4618)
I don't know why exactly, but when the ViewHolder gets recycled and the
ProgressBar is set to visible again, it just doesn't show anything. It
seems to be a bug in the platform ProgressBar, and it doesn't happen on
all devices. Replacing it with a CircularProgressIndicator fixes the bug
and looks the same.
Reported here:
https://github.com/tuskyapp/Tusky/issues/4493#issuecomment-2182407513
2024-08-19 20:52:57 +02:00
Weblate af581b883c
Translations update from Weblate (automated) (#4617)
Translations update from [Weblate](https://weblate.tusky.app) for
[Tusky/Tusky](https://weblate.tusky.app/projects/tusky/tusky/).



Current translation status:

![Weblate translation
status](https://weblate.tusky.app/widget/tusky/tusky/horizontal-auto.svg)

Co-authored-by: XoseM <xosem@disroot.org>
2024-08-18 17:33:40 +02:00
XoseM 04dcd91dfc Translated using Weblate (Galician)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Ümit Solmaz 5c9999d2bb Translated using Weblate (Turkish)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Ümit Solmaz <usnotv@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/tr/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
fin-w 46ddd6cddb Translated using Weblate (Welsh)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: fin-w <fin-w@tutanota.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/cy/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Manuel 2ad52c4c50 Translated using Weblate (Italian)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Manuel <mannivuwiki@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/it/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Hồ Nhất Duy 2a48895725 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Eric 9f7ece346c Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Eric <ekhfcxwuvxqfdb@hldrive.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Danial Behzadi 336659eab8 Translated using Weblate (Persian)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
2024-08-14 16:49:58 +00:00
Konrad Pozniak c7387c7b52
prevent mixup of account timelines (#4599)
This does 2 things:

- Removes `AccountSwitchInterceptor`, the main culprit for the bug. APIs
can no longer change their base url after they have been created. As a
result they are not Singletons anymore.
- Additionally, I refactored how MainActivity handles Intents to make it
less likely to have multiple instances of it active.

Here is how I could reliably reproduce the bug:

- Be logged in with account A and B
- Write a post with account A, cancel it before it sends (go into flight
mode for that)
- Switch to account B
- Open the "this post failed to send" notification from account A,
drafts will open
- Go back. You are in the MainActivity of account A, everything seems
fine.
- Go back again. You are in the old, now broken MainActivity of account
B. It uses the database of account B but the network of account A.
Refreshing will show posts from A.

closes #4567 
closes #4554
closes #4402 
closes #4148
closes #2663
and possibly #4588
2024-08-14 18:58:12 +02:00
Konrad Pozniak 0d07299a3a
trust ISRG root certificates to make Tusky work on Android 7 again (#4609)
[Let's encrypt had to make some changes to their
signing](https://letsencrypt.org/2023/07/10/cross-sign-expiration.html),
as a result Android 7 doeesn't have the root certificates necessary to
trust Let's encrypt signed certificates anymore. Since most Fedi
instances use Let's encrypt, that is a problem. To work around we can
add the certificates to Tusky directly.
Details [here](https://stackoverflow.com/a/78309587).

closes #4607
2024-08-11 12:59:37 +02:00
Konrad Pozniak dfd83f3080
show correct icon for direct as default reply privacy (#4594) 2024-08-10 09:46:53 +02:00
Cathal Garvey 1cf860ff91 Translated using Weblate (Irish)
Currently translated at 60.6% (395 of 651 strings)

Co-authored-by: Cathal Garvey <cathalgarvey@cathalgarvey.me>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/ga/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
GunChleoc e40ea2bef7 Translated using Weblate (Gaelic)
Currently translated at 92.0% (599 of 651 strings)

Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Ümit Solmaz 6132108fd5 Translated using Weblate (Turkish)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Ümit Solmaz <usnotv@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/tr/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Deleted User c06e2daf6b Translated using Weblate (German)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Deleted User <noreply+322@weblate.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/de/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Deleted User 3c39c69642 Translated using Weblate (German)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Deleted User <noreply+321@weblate.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/de/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Hồ Nhất Duy 2764b4519a Translated using Weblate (Vietnamese)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Eric 80a66f7b2a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Eric <ekhfcxwuvxqfdb@hldrive.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Manuel 0a23fccd69 Translated using Weblate (Italian)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Manuel <mannivuwiki@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/it/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00
Danial Behzadi 534e760843 Translated using Weblate (Persian)
Currently translated at 100.0% (651 of 651 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
2024-08-10 07:16:34 +00:00