[FIX] Auth desktop (#1234)

Fixes for auth desktop
- Install Dir path and name fix
- Install/Uninstall Icon fix
- Don't check "add Desktop icon" by default
- Fix Exit app in system tray
This commit is contained in:
Prateek Sunal 2024-03-28 22:24:00 +05:30 committed by GitHub
commit 9e93dc5e6d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 286 additions and 186 deletions

View file

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,6 +1,6 @@
flutter_icons:
android: "launcher_icon"
image_path: "assets/icon-light.png"
adaptive_icon_foreground: "assets/icon-light-adaptive-fg.png"
adaptive_icon_background: "#ffffff"
flutter_icons:
android: "launcher_icon"
image_path: "assets/generation-icons/icon-light.png"
adaptive_icon_foreground: "assets/generation-icons/icon-light-adaptive-fg.png"
adaptive_icon_background: "#ffffff"

View file

@ -18,7 +18,7 @@ import 'package:ente_auth/ui/settings/app_update_dialog.dart';
import 'package:flutter/foundation.dart';
import "package:flutter/material.dart";
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:system_tray/system_tray.dart';
import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
class App extends StatefulWidget {
@ -34,7 +34,7 @@ class App extends StatefulWidget {
State<App> createState() => _AppState();
}
class _AppState extends State<App> with WindowListener {
class _AppState extends State<App> with WindowListener, TrayListener {
late StreamSubscription<SignedOutEvent> _signedOutEvent;
late StreamSubscription<SignedInEvent> _signedInEvent;
Locale? locale;
@ -49,9 +49,15 @@ class _AppState extends State<App> with WindowListener {
await windowManager.setPreventClose(true);
}
Future<void> initTrayManager() async {
trayManager.addListener(this);
}
@override
void initState() {
initWindowManager();
initTrayManager();
_signedOutEvent = Bus.instance.on<SignedOutEvent>().listen((event) {
if (mounted) {
setState(() {});
@ -85,7 +91,10 @@ class _AppState extends State<App> with WindowListener {
@override
void dispose() {
super.dispose();
windowManager.removeListener(this);
trayManager.removeListener(this);
_signedOutEvent.cancel();
_signedInEvent.cancel();
}
@ -147,12 +156,42 @@ class _AppState extends State<App> with WindowListener {
@override
void onWindowClose() async {
final AppWindow appWindow = AppWindow();
await appWindow.hide();
await windowManager.hide();
}
@override
void onWindowResize() {
WindowListenerService.instance.onWindowResize().ignore();
}
@override
void onTrayIconMouseDown() {
if (Platform.isWindows) {
windowManager.show();
} else {
trayManager.popUpContextMenu();
}
}
@override
void onTrayIconRightMouseDown() {
if (Platform.isWindows) {
trayManager.popUpContextMenu();
} else {
windowManager.show();
}
}
@override
void onTrayIconRightMouseUp() {}
@override
void onTrayMenuItemClick(MenuItem menuItem) {
if (menuItem.key == 'show_window') {
windowManager.show();
} else if (menuItem.key == 'exit_app') {
windowManager.setPreventClose(false);
windowManager.close();
}
}
}

View file

@ -31,42 +31,30 @@ import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:privacy_screen/privacy_screen.dart';
import 'package:system_tray/system_tray.dart';
import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
final _logger = Logger("main");
Future<void> initSystemTray() async {
String path =
Platform.isWindows ? 'assets/icon-light.ico' : 'assets/icon-light.png';
final AppWindow appWindow = AppWindow();
final SystemTray systemTray = SystemTray();
// We first init the systray menu
await systemTray.initSystemTray(
title: "",
iconPath: path,
String path = Platform.isWindows
? 'assets/icons/auth-icon.ico'
: 'assets/icons/auth-icon.png';
await trayManager.setIcon(path);
Menu menu = Menu(
items: [
MenuItem(
key: 'show_window',
label: 'Show Window',
),
MenuItem.separator(),
MenuItem(
key: 'exit_app',
label: 'Exit App',
),
],
);
// create context menu
final show = MenuItem(label: 'Show', onClicked: () => appWindow.show());
final hide = MenuItem(label: 'Hide', onClicked: () => appWindow.hide());
final exit = MenuItem(label: 'Exit', onClicked: () => appWindow.close());
// set context menu
await systemTray.setContextMenu([show, hide, exit]);
const kSystemTrayEventClick = 'leftMouseDown';
const kSystemTrayEventRightClick = 'rightMouseDown';
// // handle system tray event
systemTray.registerSystemTrayEventHandler((eventName) {
if (eventName == kSystemTrayEventClick) {
Platform.isWindows ? appWindow.show() : systemTray.popUpContextMenu();
} else if (eventName == kSystemTrayEventRightClick) {
Platform.isWindows ? systemTray.popUpContextMenu() : appWindow.show();
}
});
await trayManager.setContextMenu(menu);
}
void main() async {

View file

@ -5,7 +5,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter_local_authentication/flutter_local_authentication.dart';
import 'package:local_auth/local_auth.dart';
import 'package:local_auth_android/local_auth_android.dart';
import 'package:local_auth_ios/types/auth_messages_ios.dart';
import 'package:local_auth_darwin/types/auth_messages_ios.dart';
import 'package:logging/logging.dart';
Future<bool> requestAuthentication(BuildContext context, String reason) async {

View file

@ -16,7 +16,7 @@
#include <smart_auth/smart_auth_plugin.h>
#include <sodium_libs/sodium_libs_plugin.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <system_tray/system_tray_plugin.h>
#include <tray_manager/tray_manager_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
#include <window_manager/window_manager_plugin.h>
@ -51,9 +51,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
g_autoptr(FlPluginRegistrar) system_tray_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "SystemTrayPlugin");
system_tray_plugin_register_with_registrar(system_tray_registrar);
g_autoptr(FlPluginRegistrar) tray_manager_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin");
tray_manager_plugin_register_with_registrar(tray_manager_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);

View file

@ -13,7 +13,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
smart_auth
sodium_libs
sqlite3_flutter_libs
system_tray
tray_manager
url_launcher_linux
window_manager
)

View file

@ -1,26 +1,26 @@
display_name: Auth
license: GPLv3
icon: assets/icon/auth-icon.png
keywords:
- Authentication
- 2FA
generic_name: ente Auth
categories:
- Utility
startup_notify: false
# You can specify the shared libraries that you want to bundle with your app
#
# flutter_distributor automatically detects the shared libraries that your app
# depends on, but you can also specify them manually here.
#
# The following example shows how to bundle the libcurl library with your app.
#
# include:
# - libcurl.so.4
include: []
display_name: Auth
license: GPLv3
icon: assets/icons/auth-icon.png
keywords:
- Authentication
- 2FA
generic_name: ente Auth
categories:
- Utility
startup_notify: false
# You can specify the shared libraries that you want to bundle with your app
#
# flutter_distributor automatically detects the shared libraries that your app
# depends on, but you can also specify them manually here.
#
# The following example shows how to bundle the libcurl library with your app.
#
# include:
# - libcurl.so.4
include: []

View file

@ -1,34 +1,34 @@
display_name: Auth
package_name: auth
maintainer:
name: Ente.io Developers
email: human@ente.io
priority: optional
section: x11
essential: false
license: GPLv3
icon: assets/icon/auth-icon.png
installed_size: 36000
dependencies:
- libwebkit2gtk-4.0-37
- libsqlite3-0
- libsodium23
- libsecret-1-0
- libappindicator3-1 | libayatana-appindicator3-1
- gir1.2-appindicator3-0.1 | gir1.2-ayatanaappindicator3-0.1
- libayatana-ido3-0.4-0
keywords:
- Authentication
- 2FA
generic_name: Ente Authentication
categories:
- Utility
startup_notify: false
supported_mime_type:
- x-scheme-handler/ente
display_name: Auth
package_name: auth
maintainer:
name: Ente.io Developers
email: human@ente.io
priority: optional
section: x11
essential: false
license: GPLv3
icon: assets/icons/auth-icon.png
installed_size: 36000
dependencies:
- libwebkit2gtk-4.0-37
- libsqlite3-0
- libsodium23
- libsecret-1-0
- libappindicator3-1 | libayatana-appindicator3-1
- gir1.2-appindicator3-0.1 | gir1.2-ayatanaappindicator3-0.1
- libayatana-ido3-0.4-0
keywords:
- Authentication
- 2FA
generic_name: Ente Authentication
categories:
- Utility
startup_notify: false
supported_mime_type:
- x-scheme-handler/ente

View file

@ -1,31 +1,31 @@
icon: assets/icon/auth-icon.png
summary: 2FA app with free end-to-end encrypted backup and sync
group: Application/Utility
vendor: Ente.io
packager: Ente.io Developers
packagerEmail: human@ente.io
license: GPLv3
url: https://github.com/ente-io/ente
display_name: Auth
dependencies:
- libsqlite3x
- webkit2gtk-4.0
- libsodium
- libsecret
- libappindicator
keywords:
- Authentication
- 2FA
generic_name: Ente Authentication
categories:
- Utility
startup_notify: false
supported_mime_type:
- x-scheme-handler/ente
icon: assets/icons/auth-icon.png
summary: 2FA app with free end-to-end encrypted backup and sync
group: Application/Utility
vendor: Ente.io
packager: Ente.io Developers
packagerEmail: human@ente.io
license: GPLv3
url: https://github.com/ente-io/ente
display_name: Auth
dependencies:
- libsqlite3x
- webkit2gtk-4.0
- libsodium
- libsecret
- libappindicator
keywords:
- Authentication
- 2FA
generic_name: Ente Authentication
categories:
- Utility
startup_notify: false
supported_mime_type:
- x-scheme-handler/ente

View file

@ -24,7 +24,7 @@ import smart_auth
import sodium_libs
import sqflite
import sqlite3_flutter_libs
import system_tray
import tray_manager
import url_launcher_macos
import window_manager
@ -48,7 +48,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
SodiumLibsPlugin.register(with: registry.registrar(forPlugin: "SodiumLibsPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
SystemTrayPlugin.register(with: registry.registrar(forPlugin: "SystemTrayPlugin"))
TrayManagerPlugin.register(with: registry.registrar(forPlugin: "TrayManagerPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin"))
}

View file

@ -1,11 +1,11 @@
title: Auth
icon: ../../../assets/icon/auth-icon.png
contents:
- x: 448
y: 344
type: link
path: "/Applications"
- x: 192
y: 344
type: file
path: ente Auth.app
title: Auth
icon: ../../../assets/icons/auth-icon.png
contents:
- x: 448
y: 344
type: link
path: "/Applications"
- x: 192
y: 344
type: file
path: ente Auth.app

View file

@ -858,21 +858,13 @@ packages:
source: hosted
version: "1.0.37"
local_auth_darwin:
dependency: transitive
dependency: "direct main"
description:
name: local_auth_darwin
sha256: "33381a15b0de2279523eca694089393bb146baebdce72a404555d03174ebc1e9"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
local_auth_ios:
dependency: "direct main"
description:
name: local_auth_ios
sha256: "6dde47dc852bc0c8343cb58e66a46efb16b62eddf389ce103d4dacb0c6c40c71"
url: "https://pub.dev"
source: hosted
version: "1.1.7"
local_auth_platform_interface:
dependency: transitive
description:
@ -913,6 +905,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.8.0"
menu_base:
dependency: transitive
description:
name: menu_base
sha256: "820368014a171bd1241030278e6c2617354f492f5c703d7b7d4570a6b8b84405"
url: "https://pub.dev"
source: hosted
version: "0.1.1"
meta:
dependency: transitive
description:
@ -1305,6 +1305,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.4"
shortid:
dependency: transitive
description:
name: shortid
sha256: d0b40e3dbb50497dad107e19c54ca7de0d1a274eb9b4404991e443dadb9ebedb
url: "https://pub.dev"
source: hosted
version: "0.1.2"
sky_engine:
dependency: transitive
description: flutter
@ -1463,14 +1471,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.0+1"
system_tray:
dependency: "direct main"
description:
name: system_tray
sha256: "1bcc11bc230033be20d7443c29f65f68d67169715a838a1122f20fbff5dd2d19"
url: "https://pub.dev"
source: hosted
version: "0.1.1"
term_glyph:
dependency: transitive
description:
@ -1503,6 +1503,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.1"
tray_manager:
dependency: "direct main"
description:
name: tray_manager
sha256: "4ab709d70a4374af172f8c39e018db33a4271265549c6fc9d269a65e5f4b0225"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
tuple:
dependency: "direct main"
description:

View file

@ -1,6 +1,6 @@
name: ente_auth
description: ente two-factor authenticator
version: 2.0.46+246
version: 2.0.47+247
publish_to: none
environment:
@ -63,9 +63,9 @@ dependencies:
http: ^1.1.0
intl: ^0.18.0
json_annotation: ^4.5.0
local_auth: ^2.1.7
local_auth_android: ^1.0.31
local_auth_ios: ^1.1.3
local_auth: ^2.2.0
local_auth_android: ^1.0.37
local_auth_darwin: ^1.2.2
logging: ^1.0.1
modal_bottom_sheet: ^3.0.0-pre
move_to_background: ^1.0.2
@ -93,7 +93,7 @@ dependencies:
sqlite3_flutter_libs: ^0.5.19+1
step_progress_indicator: ^1.0.2
styled_text: ^8.1.0
system_tray: ^0.1.1
tray_manager: ^0.2.1
tuple: ^2.0.0
url_launcher: ^6.1.5
uuid: ^4.2.2
@ -122,6 +122,7 @@ flutter:
# https://docs:flutter:dev/development/ui/assets-and-images:
assets:
- assets/
- assets/icons/
- assets/simple-icons/icons/
- assets/simple-icons/_data/
- assets/custom-icons/icons/
@ -141,10 +142,10 @@ flutter:
flutter_icons:
android: "launcher_icon"
adaptive_icon_foreground: "assets/icon-light-adaptive-fg.png"
adaptive_icon_foreground: "assets/generation-icons/icon-light-adaptive-fg.png"
adaptive_icon_background: "#ffffff"
ios: true
image_path: "assets/icon-light.png"
image_path: "assets/generation-icons/icon-light.png"
remove_alpha_ios: true
flutter_native_splash:

View file

@ -19,7 +19,7 @@
#include <smart_auth/smart_auth_plugin.h>
#include <sodium_libs/sodium_libs_plugin_c_api.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <system_tray/system_tray_plugin.h>
#include <tray_manager/tray_manager_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
#include <window_manager/window_manager_plugin.h>
@ -50,8 +50,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("SodiumLibsPluginCApi"));
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
SystemTrayPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SystemTrayPlugin"));
TrayManagerPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("TrayManagerPlugin"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
WindowManagerPluginRegisterWithRegistrar(

View file

@ -16,7 +16,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
smart_auth
sodium_libs
sqlite3_flutter_libs
system_tray
tray_manager
url_launcher_windows
window_manager
)

View file

@ -0,0 +1,62 @@
[Setup]
AppId={{APP_ID}}
AppVersion={{APP_VERSION}}
AppName={{DISPLAY_NAME}}
AppPublisher={{PUBLISHER_NAME}}
AppPublisherURL={{PUBLISHER_URL}}
AppSupportURL={{PUBLISHER_URL}}
AppUpdatesURL={{PUBLISHER_URL}}
DefaultDirName={{INSTALL_DIR_NAME}}
DisableProgramGroupPage=yes
OutputDir=.
OutputBaseFilename={{OUTPUT_BASE_FILENAME}}
Compression=lzma
SolidCompression=yes
SetupIconFile={{SETUP_ICON_FILE}}
WizardStyle=modern
PrivilegesRequired={{PRIVILEGES_REQUIRED}}
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
[Languages]
{% for locale in LOCALES %}
{% if locale == 'en' %}Name: "english"; MessagesFile: "compiler:Default.isl"{% endif %}
{% if locale == 'hy' %}Name: "armenian"; MessagesFile: "compiler:Languages\\Armenian.isl"{% endif %}
{% if locale == 'bg' %}Name: "bulgarian"; MessagesFile: "compiler:Languages\\Bulgarian.isl"{% endif %}
{% if locale == 'ca' %}Name: "catalan"; MessagesFile: "compiler:Languages\\Catalan.isl"{% endif %}
{% if locale == 'zh' %}Name: "chinesesimplified"; MessagesFile: "compiler:Languages\\ChineseSimplified.isl"{% endif %}
{% if locale == 'co' %}Name: "corsican"; MessagesFile: "compiler:Languages\\Corsican.isl"{% endif %}
{% if locale == 'cs' %}Name: "czech"; MessagesFile: "compiler:Languages\\Czech.isl"{% endif %}
{% if locale == 'da' %}Name: "danish"; MessagesFile: "compiler:Languages\\Danish.isl"{% endif %}
{% if locale == 'nl' %}Name: "dutch"; MessagesFile: "compiler:Languages\\Dutch.isl"{% endif %}
{% if locale == 'fi' %}Name: "finnish"; MessagesFile: "compiler:Languages\\Finnish.isl"{% endif %}
{% if locale == 'fr' %}Name: "french"; MessagesFile: "compiler:Languages\\French.isl"{% endif %}
{% if locale == 'de' %}Name: "german"; MessagesFile: "compiler:Languages\\German.isl"{% endif %}
{% if locale == 'he' %}Name: "hebrew"; MessagesFile: "compiler:Languages\\Hebrew.isl"{% endif %}
{% if locale == 'is' %}Name: "icelandic"; MessagesFile: "compiler:Languages\\Icelandic.isl"{% endif %}
{% if locale == 'it' %}Name: "italian"; MessagesFile: "compiler:Languages\\Italian.isl"{% endif %}
{% if locale == 'ja' %}Name: "japanese"; MessagesFile: "compiler:Languages\\Japanese.isl"{% endif %}
{% if locale == 'no' %}Name: "norwegian"; MessagesFile: "compiler:Languages\\Norwegian.isl"{% endif %}
{% if locale == 'pl' %}Name: "polish"; MessagesFile: "compiler:Languages\\Polish.isl"{% endif %}
{% if locale == 'pt' %}Name: "portuguese"; MessagesFile: "compiler:Languages\\Portuguese.isl"{% endif %}
{% if locale == 'ru' %}Name: "russian"; MessagesFile: "compiler:Languages\\Russian.isl"{% endif %}
{% if locale == 'sk' %}Name: "slovak"; MessagesFile: "compiler:Languages\\Slovak.isl"{% endif %}
{% if locale == 'sl' %}Name: "slovenian"; MessagesFile: "compiler:Languages\\Slovenian.isl"{% endif %}
{% if locale == 'es' %}Name: "spanish"; MessagesFile: "compiler:Languages\\Spanish.isl"{% endif %}
{% if locale == 'tr' %}Name: "turkish"; MessagesFile: "compiler:Languages\\Turkish.isl"{% endif %}
{% if locale == 'uk' %}Name: "ukrainian"; MessagesFile: "compiler:Languages\\Ukrainian.isl"{% endif %}
{% endfor %}
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: {% if CREATE_DESKTOP_ICON != true %}unchecked{% else %}checkedonce{% endif %}
Name: "launchAtStartup"; Description: "{cm:AutoStartProgram,{{DISPLAY_NAME}}}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: {% if LAUNCH_AT_STARTUP != true %}unchecked{% else %}checkedonce{% endif %}
[Files]
Source: "{{SOURCE_DIR}}\\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{autoprograms}\\{{DISPLAY_NAME}}"; Filename: "{app}\\{{EXECUTABLE_NAME}}"
Name: "{autodesktop}\\{{DISPLAY_NAME}}"; Filename: "{app}\\{{EXECUTABLE_NAME}}"; Tasks: desktopicon
Name: "{userstartup}\\{{DISPLAY_NAME}}"; Filename: "{app}\\{{EXECUTABLE_NAME}}"; WorkingDir: "{app}"; Tasks: launchAtStartup
[Run]
Filename: "{app}\\{{EXECUTABLE_NAME}}"; Description: "{cm:LaunchProgram,{{DISPLAY_NAME}}}"; Flags: {% if PRIVILEGES_REQUIRED == 'admin' %}runascurrentuser{% endif %} nowait postinstall skipifsilent

View file

@ -1,8 +1,10 @@
app_id: 9E5F0C93-96A3-4DA9-AE52-1AA6339851FC
publisher: ente.io
publisher_url: https://github.com/ente-io/ente
display_name: ente Auth
create_desktop_icon: true
install_dir_name: enteauth
locales:
- en
app_id: 9E5F0C93-96A3-4DA9-AE52-1AA6339851FC
publisher: ente.io
publisher_url: https://github.com/ente-io/ente
display_name: ente Auth
create_desktop_icon: false
install_dir_name: "{pf}\\Ente Auth"
setup_icon_file: ../../assets/icons/auth-icon.ico
script_template: inno_setup.iss
locales:
- en