feat: add WhatsNew

This commit is contained in:
Tien Do Nam
2026-08-02 02:26:13 +02:00
parent aaaaa5d497
commit f8b3a8f6d2
64 changed files with 874 additions and 17 deletions
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <ar>.", "Here are translations that exist in <en> but not in <ar>.",
"After editing this file, you can run 'dart run slang apply --locale=ar' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=ar' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <bg>.", "Here are translations that exist in <en> but not in <bg>.",
"After editing this file, you can run 'dart run slang apply --locale=bg' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=bg' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <et>.", "Here are translations that exist in <en> but not in <et>.",
"After editing this file, you can run 'dart run slang apply --locale=et' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=et' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -53,6 +53,18 @@
"thanks": "Thank you very much!", "thanks": "Thank you very much!",
"restore": "Restore purchase" "restore": "Restore purchase"
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"openFile": { "openFile": {
"title": "Open file", "title": "Open file",
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <hu>.", "Here are translations that exist in <en> but not in <hu>.",
"After editing this file, you can run 'dart run slang apply --locale=hu' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=hu' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -17,5 +17,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -20,5 +20,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <ko>.", "Here are translations that exist in <en> but not in <ko>.",
"After editing this file, you can run 'dart run slang apply --locale=ko' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=ko' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -21,6 +21,18 @@
"webSharePage": { "webSharePage": {
"encryption": "@:settingsTab.network.encryption" "encryption": "@:settingsTab.network.encryption"
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"errorDialog": { "errorDialog": {
"title": "@:general.error" "title": "@:general.error"
@@ -46,6 +46,18 @@
"aboutPage": { "aboutPage": {
"packagers": "Packagers" "packagers": "Packagers"
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"addFile": { "addFile": {
"title": "Add to selection", "title": "Add to selection",
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -19,6 +19,18 @@
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"quickSaveFromFavoritesNotice": { "quickSaveFromFavoritesNotice": {
"title": "@:general.quickSaveFromFavorites" "title": "@:general.quickSaveFromFavorites"
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <nl>.", "Here are translations that exist in <en> but not in <nl>.",
"After editing this file, you can run 'dart run slang apply --locale=nl' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=nl' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <pl>.", "Here are translations that exist in <en> but not in <pl>.",
"After editing this file, you can run 'dart run slang apply --locale=pl' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=pl' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <ru>.", "Here are translations that exist in <en> but not in <ru>.",
"After editing this file, you can run 'dart run slang apply --locale=ru' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=ru' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <sk>.", "Here are translations that exist in <en> but not in <sk>.",
"After editing this file, you can run 'dart run slang apply --locale=sk' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=sk' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -37,6 +37,18 @@
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"openFile": { "openFile": {
"title": "Open file", "title": "Open file",
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <sv>.", "Here are translations that exist in <en> but not in <sv>.",
"After editing this file, you can run 'dart run slang apply --locale=sv' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=sv' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <tr>.", "Here are translations that exist in <en> but not in <tr>.",
"After editing this file, you can run 'dart run slang apply --locale=tr' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=tr' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
+13 -1
View File
@@ -2,5 +2,17 @@
"@@info": [ "@@info": [
"Here are translations that exist in <en> but not in <uk>.", "Here are translations that exist in <en> but not in <uk>.",
"After editing this file, you can run 'dart run slang apply --locale=uk' to quickly apply the newly added translations." "After editing this file, you can run 'dart run slang apply --locale=uk' to quickly apply the newly added translations."
] ],
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
}
} }
@@ -45,6 +45,18 @@
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"openFile": { "openFile": {
"title": "Open file", "title": "Open file",
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -5,5 +5,17 @@
], ],
"sendPage": { "sendPage": {
"calculatingChecksum": "Calculating checksum ({curr} / {n})" "calculatingChecksum": "Calculating checksum ({curr} / {n})"
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -13,5 +13,17 @@
"hours": "{h}h {m}m", "hours": "{h}h {m}m",
"days": "{d}d {h}h {m}m" "days": "{d}d {h}h {m}m"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
@@ -11,5 +11,17 @@
"seconds": "{n}:{ss}", "seconds": "{n}:{ss}",
"minutes": "{n}:{ss}" "minutes": "{n}:{ss}"
} }
},
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
} }
} }
+11
View File
@@ -12,6 +12,17 @@
"sendTab": { "sendTab": {
"thisDevice": "This Device" "thisDevice": "This Device"
}, },
"whatsNewPage": {
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"dialogs": { "dialogs": {
"messageInput": { "messageInput": {
"multiline": "Multiline" "multiline": "Multiline"
+12
View File
@@ -289,6 +289,18 @@
"changelogPage": { "changelogPage": {
"title": "Änderungsprotokoll" "title": "Änderungsprotokoll"
}, },
"whatsNewPage": {
"title": "Was ist neu in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Die Verschlüsselung bremst die Übertragung nicht mehr aus. Sie wurde auf diesem Gerät wieder aktiviert, falls du sie zuvor deaktiviert hattest.",
"Anfragen von Favoriten werden jetzt automatisch akzeptiert. Diese Option ist standardmäßig aktiviert und kann in den Einstellungen deaktiviert werden.",
"Unter Android laufen Übertragungen weiter, während die App im Hintergrund ist oder der Bildschirm aus ist. Unter iOS muss die App weiterhin im Vordergrund bleiben."
]
}
}
},
"aliasGenerator(ignoreMissing, ignoreGpt)": { "aliasGenerator(ignoreMissing, ignoreGpt)": {
"@info": "Inherits from the English version" "@info": "Inherits from the English version"
}, },
+12
View File
@@ -289,6 +289,18 @@
"changelogPage": { "changelogPage": {
"title": "Changelog" "title": "Changelog"
}, },
"whatsNewPage": {
"title": "What's new in {version}",
"changes(interface=WhatsNewStrings)": {
"v1_18_0": {
"changes": [
"Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.",
"Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.",
"On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground."
]
}
}
},
"aliasGenerator(ignoreMissing, ignoreGpt)": { "aliasGenerator(ignoreMissing, ignoreGpt)": {
"@info": "Different locales may have different words, it may not match 1:1", "@info": "Different locales may have different words, it may not match 1:1",
"adjectives": [ "adjectives": [
+19
View File
@@ -11,6 +11,7 @@ import 'package:localsend_app/config/refena.dart';
import 'package:localsend_app/config/theme.dart'; import 'package:localsend_app/config/theme.dart';
import 'package:localsend_app/pages/home_page.dart'; import 'package:localsend_app/pages/home_page.dart';
import 'package:localsend_app/pages/home_page_controller.dart'; import 'package:localsend_app/pages/home_page_controller.dart';
import 'package:localsend_app/pages/whats_new_page.dart';
import 'package:localsend_app/provider/animation_provider.dart'; import 'package:localsend_app/provider/animation_provider.dart';
import 'package:localsend_app/provider/app_arguments_provider.dart'; import 'package:localsend_app/provider/app_arguments_provider.dart';
import 'package:localsend_app/provider/device_info_provider.dart'; import 'package:localsend_app/provider/device_info_provider.dart';
@@ -24,6 +25,7 @@ import 'package:localsend_app/provider/purchase_provider.dart';
import 'package:localsend_app/provider/selection/selected_sending_files_provider.dart'; import 'package:localsend_app/provider/selection/selected_sending_files_provider.dart';
import 'package:localsend_app/provider/settings_provider.dart'; import 'package:localsend_app/provider/settings_provider.dart';
import 'package:localsend_app/provider/tv_provider.dart'; import 'package:localsend_app/provider/tv_provider.dart';
import 'package:localsend_app/provider/version_provider.dart';
import 'package:localsend_app/provider/window_dimensions_provider.dart'; import 'package:localsend_app/provider/window_dimensions_provider.dart';
import 'package:localsend_app/util/i18n.dart'; import 'package:localsend_app/util/i18n.dart';
import 'package:localsend_app/util/native/autostart_helper.dart'; import 'package:localsend_app/util/native/autostart_helper.dart';
@@ -47,7 +49,9 @@ import 'package:localsend_isolates/rust/frb_generated.dart';
import 'package:localsend_isolates/util/logger.dart'; import 'package:localsend_isolates/util/logger.dart';
import 'package:localsend_isolates/util/transfer_notification.dart'; import 'package:localsend_isolates/util/transfer_notification.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:refena_flutter/addons.dart';
import 'package:refena_flutter/refena_flutter.dart'; import 'package:refena_flutter/refena_flutter.dart';
import 'package:routerino/routerino.dart';
import 'package:share_handler/share_handler.dart'; import 'package:share_handler/share_handler.dart';
import 'package:window_manager/window_manager.dart'; import 'package:window_manager/window_manager.dart';
@@ -163,6 +167,9 @@ Future<RefenaContainer> preInit(List<String> args) async {
platformHint: RefenaScope.getPlatformHint(), // help Refena know the correct platform platformHint: RefenaScope.getPlatformHint(), // help Refena know the correct platform
); );
// compatibility for Routerino. TODO: Remove Routerino
Routerino.navigatorKey = container.read(navigationProvider).key;
// initialize multi-threading // initialize multi-threading
container.set( container.set(
parentIsolateProvider.overrideWithNotifier((ref) { parentIsolateProvider.overrideWithNotifier((ref) {
@@ -290,6 +297,18 @@ Future<void> postInit(BuildContext context, Ref ref, bool appStart) async {
ref.global.dispatchAsync(ClearCacheAction()); // ignore: unawaited_futures ref.global.dispatchAsync(ClearCacheAction()); // ignore: unawaited_futures
} }
if (!ref.read(persistenceProvider).isFirstAppStart) {
WhatsNewPage? whatsNew = WhatsNewPage.fromLastVersion(lastVersion: ref.read(persistenceProvider).getWhatsNew());
if (whatsNew != null) {
await ref.future(versionProvider).then((version) async {
await ref.read(persistenceProvider).setWhatsNew(version.version);
});
// ignore: unawaited_futures
ref.global.dispatchAsync(NavigateAction.push(whatsNew));
}
}
// [FOSS_REMOVE_START] // [FOSS_REMOVE_START]
if (checkPlatformSupportPayment()) { if (checkPlatformSupportPayment()) {
// ignore: unawaited_futures // ignore: unawaited_futures
+36 -1
View File
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang` /// To regenerate, run: `dart run slang`
/// ///
/// Locales: 55 /// Locales: 55
/// Strings: 18442 (335 per locale) /// Strings: 18450 (335 per locale)
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
@@ -984,3 +984,38 @@ class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, Translations> {
static List<Locale> get supportedLocales => instance.supportedLocales; static List<Locale> get supportedLocales => instance.supportedLocales;
static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw; static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
} }
// interfaces generated as mixins
mixin WhatsNewStrings {
List<String> get changes;
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
if (other is! WhatsNewStrings) return false;
final fields = $fields;
final otherFields = other.$fields;
for (int i = 0; i < fields.length; i++) {
if (fields[i] != otherFields[i]) return false;
}
return true;
}
@override
int get hashCode {
final fields = $fields;
int result = fields.first.hashCode;
for (final element in fields.skip(1)) {
result *= element.hashCode;
}
return result;
}
List<Object?> get $fields => [
changes,
];
}
+1 -1
View File
@@ -1456,7 +1456,7 @@ class _Translations$settingsTab$general$brightnessOptions$ar extends Translation
// Translations // Translations
@override @override
String get system => 'نظام'; String get system => 'النظام';
@override @override
String get dark => 'داكنة'; String get dark => 'داكنة';
@override @override
+41
View File
@@ -78,6 +78,8 @@ class TranslationsDe extends Translations with BaseTranslations<AppLocale, Trans
@override @override
late final _Translations$changelogPage$de changelogPage = _Translations$changelogPage$de._(_root); late final _Translations$changelogPage$de changelogPage = _Translations$changelogPage$de._(_root);
@override @override
late final _Translations$whatsNewPage$de whatsNewPage = _Translations$whatsNewPage$de._(_root);
@override
late final _Translations$dialogs$de dialogs = _Translations$dialogs$de._(_root); late final _Translations$dialogs$de dialogs = _Translations$dialogs$de._(_root);
@override @override
late final _Translations$sanitization$de sanitization = _Translations$sanitization$de._(_root); late final _Translations$sanitization$de sanitization = _Translations$sanitization$de._(_root);
@@ -509,6 +511,19 @@ class _Translations$changelogPage$de extends Translations$changelogPage$en {
String get title => 'Änderungsprotokoll'; String get title => 'Änderungsprotokoll';
} }
// Path: whatsNewPage
class _Translations$whatsNewPage$de extends Translations$whatsNewPage$en {
_Translations$whatsNewPage$de._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override
String title({required Object version}) => 'Was ist neu in ${version}';
@override
late final _Translations$whatsNewPage$changes$de changes = _Translations$whatsNewPage$changes$de._(_root);
}
// Path: dialogs // Path: dialogs
class _Translations$dialogs$de extends Translations$dialogs$en { class _Translations$dialogs$de extends Translations$dialogs$en {
_Translations$dialogs$de._(TranslationsDe root) : this._root = root, super.internal(root); _Translations$dialogs$de._(TranslationsDe root) : this._root = root, super.internal(root);
@@ -1009,6 +1024,17 @@ class _Translations$progressPage$remainingTime$de extends Translations$progressP
String days({required Object d, required Object h, required Object m}) => '${d}d ${h}h ${m}m'; String days({required Object d, required Object h, required Object m}) => '${d}d ${h}h ${m}m';
} }
// Path: whatsNewPage.changes
class _Translations$whatsNewPage$changes$de extends Translations$whatsNewPage$changes$en {
_Translations$whatsNewPage$changes$de._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override
late final _Translations$whatsNewPage$changes$v1_18_0$de v1_18_0 = _Translations$whatsNewPage$changes$v1_18_0$de._(_root);
}
// Path: dialogs.addFile // Path: dialogs.addFile
class _Translations$dialogs$addFile$de extends Translations$dialogs$addFile$en { class _Translations$dialogs$addFile$de extends Translations$dialogs$addFile$en {
_Translations$dialogs$addFile$de._(TranslationsDe root) : this._root = root, super.internal(root); _Translations$dialogs$addFile$de._(TranslationsDe root) : this._root = root, super.internal(root);
@@ -1436,3 +1462,18 @@ class _Translations$progressPage$total$title$de extends Translations$progressPag
@override @override
String get canceledReceiver => 'Abgebrochen durch Empfänger'; String get canceledReceiver => 'Abgebrochen durch Empfänger';
} }
// Path: whatsNewPage.changes.v1_18_0
class _Translations$whatsNewPage$changes$v1_18_0$de extends Translations$whatsNewPage$changes$v1_18_0$en with WhatsNewStrings {
_Translations$whatsNewPage$changes$v1_18_0$de._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override
List<String> get changes => [
'Die Verschlüsselung bremst die Übertragung nicht mehr aus. Sie wurde auf diesem Gerät wieder aktiviert, falls du sie zuvor deaktiviert hattest.',
'Anfragen von Favoriten werden jetzt automatisch akzeptiert. Diese Option ist standardmäßig aktiviert und kann in den Einstellungen deaktiviert werden.',
'Unter Android laufen Übertragungen weiter, während die App im Hintergrund ist oder der Bildschirm aus ist. Unter iOS muss die App weiterhin im Vordergrund bleiben.',
];
}
+40
View File
@@ -66,6 +66,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
late final Translations$aboutPage$en aboutPage = Translations$aboutPage$en.internal(_root); late final Translations$aboutPage$en aboutPage = Translations$aboutPage$en.internal(_root);
late final Translations$donationPage$en donationPage = Translations$donationPage$en.internal(_root); late final Translations$donationPage$en donationPage = Translations$donationPage$en.internal(_root);
late final Translations$changelogPage$en changelogPage = Translations$changelogPage$en.internal(_root); late final Translations$changelogPage$en changelogPage = Translations$changelogPage$en.internal(_root);
late final Translations$whatsNewPage$en whatsNewPage = Translations$whatsNewPage$en.internal(_root);
late final Translations$aliasGenerator$en aliasGenerator = Translations$aliasGenerator$en.internal(_root); late final Translations$aliasGenerator$en aliasGenerator = Translations$aliasGenerator$en.internal(_root);
late final Translations$dialogs$en dialogs = Translations$dialogs$en.internal(_root); late final Translations$dialogs$en dialogs = Translations$dialogs$en.internal(_root);
late final Translations$sanitization$en sanitization = Translations$sanitization$en.internal(_root); late final Translations$sanitization$en sanitization = Translations$sanitization$en.internal(_root);
@@ -594,6 +595,20 @@ class Translations$changelogPage$en {
String get title => 'Changelog'; String get title => 'Changelog';
} }
// Path: whatsNewPage
class Translations$whatsNewPage$en {
Translations$whatsNewPage$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'What's new in {version}'
String title({required Object version}) => 'What\'s new in ${version}';
late final Translations$whatsNewPage$changes$en changes = Translations$whatsNewPage$changes$en.internal(_root);
}
// Path: aliasGenerator // Path: aliasGenerator
class Translations$aliasGenerator$en { class Translations$aliasGenerator$en {
Translations$aliasGenerator$en.internal(this._root); Translations$aliasGenerator$en.internal(this._root);
@@ -1275,6 +1290,16 @@ class Translations$progressPage$remainingTime$en {
String days({required Object d, required Object h, required Object m}) => '${d}d ${h}h ${m}m'; String days({required Object d, required Object h, required Object m}) => '${d}d ${h}h ${m}m';
} }
// Path: whatsNewPage.changes
class Translations$whatsNewPage$changes$en {
Translations$whatsNewPage$changes$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
late final Translations$whatsNewPage$changes$v1_18_0$en v1_18_0 = Translations$whatsNewPage$changes$v1_18_0$en.internal(_root);
}
// Path: dialogs.addFile // Path: dialogs.addFile
class Translations$dialogs$addFile$en { class Translations$dialogs$addFile$en {
Translations$dialogs$addFile$en.internal(this._root); Translations$dialogs$addFile$en.internal(this._root);
@@ -1774,3 +1799,18 @@ class Translations$progressPage$total$title$en {
/// en: 'Canceled by receiver' /// en: 'Canceled by receiver'
String get canceledReceiver => 'Canceled by receiver'; String get canceledReceiver => 'Canceled by receiver';
} }
// Path: whatsNewPage.changes.v1_18_0
class Translations$whatsNewPage$changes$v1_18_0$en with WhatsNewStrings {
Translations$whatsNewPage$changes$v1_18_0$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
@override
List<String> get changes => [
'Encryption no longer slows down transfers. It has been re-enabled on this device if you turned it off before.',
'Requests from favorites are now accepted automatically. This is turned on by default and can be disabled in the settings.',
'On Android, transfers continue while the app is in the background or the screen is off. On iOS, the app must still stay in the foreground.',
];
}
+2 -1
View File
@@ -14,6 +14,7 @@ import 'package:localsend_app/widget/watcher/shortcut_watcher.dart';
import 'package:localsend_app/widget/watcher/tray_watcher.dart'; import 'package:localsend_app/widget/watcher/tray_watcher.dart';
import 'package:localsend_app/widget/watcher/window_watcher.dart'; import 'package:localsend_app/widget/watcher/window_watcher.dart';
import 'package:localsend_isolates/isolate.dart'; import 'package:localsend_isolates/isolate.dart';
import 'package:refena_flutter/addons.dart';
import 'package:refena_flutter/refena_flutter.dart'; import 'package:refena_flutter/refena_flutter.dart';
import 'package:routerino/routerino.dart'; import 'package:routerino/routerino.dart';
@@ -74,7 +75,7 @@ class LocalSendApp extends StatelessWidget {
theme: getTheme(colorMode, Brightness.light, dynamicColors), theme: getTheme(colorMode, Brightness.light, dynamicColors),
darkTheme: getTheme(colorMode, Brightness.dark, dynamicColors), darkTheme: getTheme(colorMode, Brightness.dark, dynamicColors),
themeMode: colorMode == ColorMode.oled ? ThemeMode.dark : themeMode, themeMode: colorMode == ColorMode.oled ? ThemeMode.dark : themeMode,
navigatorKey: Routerino.navigatorKey, navigatorKey: context.read(navigationProvider).key,
home: RouterinoHome( home: RouterinoHome(
builder: () => const HomePage( builder: () => const HomePage(
initialTab: HomeTab.receive, initialTab: HomeTab.receive,
+1 -1
View File
@@ -560,7 +560,7 @@ class SettingsTab extends StatelessWidget {
.watch(versionProvider) .watch(versionProvider)
.maybeWhen( .maybeWhen(
data: (version) => Text( data: (version) => Text(
'Version: $version', 'Version: ${version.combinedString}',
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
orElse: () => Container(), orElse: () => Container(),
+51
View File
@@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:localsend_app/gen/strings.g.dart';
import 'package:localsend_app/widget/responsive_list_view.dart';
import 'package:refena_flutter/addons.dart';
import 'package:refena_flutter/refena_flutter.dart';
class WhatsNewPage extends StatelessWidget {
final String version;
final WhatsNewStrings strings;
const WhatsNewPage({
super.key,
required this.version,
required this.strings,
});
static WhatsNewPage? fromLastVersion({required String? lastVersion}) {
return switch (lastVersion) {
null => WhatsNewPage(version: '1.18.0', strings: t.whatsNewPage.changes.v1_18_0),
_ => null,
};
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(t.whatsNewPage.title(version: version)),
),
body: ResponsiveListView(
padding: const EdgeInsets.symmetric(horizontal: 15),
children: [
for (final change in strings.changes)
Padding(
padding: const EdgeInsets.only(bottom: 8),
child: Text('- $change'),
),
const SizedBox(height: 8),
Align(
alignment: Alignment.centerRight,
child: FilledButton.icon(
onPressed: () => context.global.dispatch(NavigateAction.pop()),
icon: Icon(Icons.done),
label: Text(t.general.done),
),
),
],
),
);
}
}
@@ -90,6 +90,7 @@ const _deviceType = 'ls_device_type';
const _deviceModel = 'ls_device_model'; const _deviceModel = 'ls_device_model';
const _shareViaLinkAutoAccept = 'ls_share_via_link_auto_accept'; const _shareViaLinkAutoAccept = 'ls_share_via_link_auto_accept';
const _advancedSettingsKey = 'ls_advanced_settings'; const _advancedSettingsKey = 'ls_advanced_settings';
const _whatsNewKey = 'ls_whats_new';
final persistenceProvider = Provider<PersistenceService>((ref) { final persistenceProvider = Provider<PersistenceService>((ref) {
throw Exception('persistenceProvider not initialized'); throw Exception('persistenceProvider not initialized');
@@ -539,6 +540,14 @@ class PersistenceService {
await _prefs.setString(_deviceModel, deviceModel); await _prefs.setString(_deviceModel, deviceModel);
} }
String? getWhatsNew() {
return _prefs.getString(_whatsNewKey);
}
Future<void> setWhatsNew(String version) async {
await _prefs.setString(_whatsNewKey, version);
}
Future<void> clear() async { Future<void> clear() async {
await _prefs.clear(); await _prefs.clear();
} }
+15 -1
View File
@@ -1,7 +1,21 @@
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
import 'package:refena_flutter/refena_flutter.dart'; import 'package:refena_flutter/refena_flutter.dart';
class VersionData {
final String version;
final String buildNumber;
final String combinedString;
VersionData({
required this.version,
required this.buildNumber,
}): combinedString = '$version ($buildNumber)';
}
final versionProvider = FutureProvider((ref) async { final versionProvider = FutureProvider((ref) async {
final info = await PackageInfo.fromPlatform(); final info = await PackageInfo.fromPlatform();
return '${info.version} (${info.buildNumber})'; return VersionData(
version: info.version,
buildNumber: info.buildNumber,
);
}, debugLabel: 'VersionProvider'); }, debugLabel: 'VersionProvider');