From 5def216b5745f4e8189bfa745312c2b77cd086e7 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Mon, 4 Dec 2023 17:36:02 +0330 Subject: [PATCH 1/3] Add TLS trick config options --- assets/translations/strings_en.i18n.json | 9 +- assets/translations/strings_fa.i18n.json | 11 ++- assets/translations/strings_ru.i18n.json | 9 +- assets/translations/strings_tr.i18n.json | 11 ++- assets/translations/strings_zh-CN.i18n.json | 9 +- dependencies.properties | 2 +- lib/core/model/range.dart | 45 ++++++++++ .../data/config_option_repository.dart | 6 ++ .../model/config_option_entity.dart | 20 +++++ .../model/config_option_patch.dart | 9 ++ .../overview/config_options_page.dart | 86 ++++++++++++++++--- lib/singbox/model/singbox_config_option.dart | 10 +++ libcore | 2 +- 13 files changed, 208 insertions(+), 21 deletions(-) create mode 100644 lib/core/model/range.dart diff --git a/assets/translations/strings_en.i18n.json b/assets/translations/strings_en.i18n.json index 6bb29c05..a4581b8b 100644 --- a/assets/translations/strings_en.i18n.json +++ b/assets/translations/strings_en.i18n.json @@ -188,6 +188,7 @@ "route": "Route Options", "dns": "DNS Options", "inbound": "Inbound Options", + "outbound": "Outbound Options", "misc": "Misc Options" }, "pageTitle": "Config Options", @@ -216,7 +217,13 @@ "setSystemProxy": "Set System Proxy", "enableFakeDns": "Enable Fake DNS", "bypassLan": "Bypass Lan", - "strictRoute": "Strict Route" + "strictRoute": "Strict Route", + "enableTlsFragment": "Enable TLS Fragment", + "tlsFragmentSize": "TLS Fragment Size", + "tlsFragmentSleep": "TLS Fragment Sleep", + "enableTlsMixedSniCase": "Enable TLS Mixed SNI Case", + "enableTlsPadding": "Enable TLS Padding", + "tlsPaddingSize": "TLS Padding" }, "geoAssets": { "pageTitle": "Routing Assets", diff --git a/assets/translations/strings_fa.i18n.json b/assets/translations/strings_fa.i18n.json index 24a7dfce..bb5dbc46 100644 --- a/assets/translations/strings_fa.i18n.json +++ b/assets/translations/strings_fa.i18n.json @@ -188,6 +188,7 @@ "route": "تنظیمات مسیریاب", "dns": "تنظیمات DNS", "inbound": "تنظیمات ورودی", + "outbound": "Outbound Options", "misc": "تنظیمات متفرقه" }, "pageTitle": "تنظیمات کانفیگ", @@ -216,7 +217,13 @@ "setSystemProxy": "تنظیم پروکسی سیستم", "enableFakeDns": "Enable Fake DNS", "bypassLan": "Bypass Lan", - "strictRoute": "Strict Route" + "strictRoute": "Strict Route", + "enableTlsFragment": "Enable TLS Fragment", + "tlsFragmentSize": "TLS Fragment Size", + "tlsFragmentSleep": "TLS Fragment Sleep", + "enableTlsMixedSniCase": "Enable TLS Mixed SNI Case", + "enableTlsPadding": "Enable TLS Padding", + "tlsPaddingSize": "TLS Padding" }, "geoAssets": { "pageTitle": "فایل‌های مسیریابی", @@ -307,4 +314,4 @@ "short_description": "Auto, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "full_description": "هدف اصلی HiddifyNext ارائه یک کلاینت تونل زنی ایمن، کاربرپسند و کارآمد است. این به شما امکان می دهد تا با استفاده از مجوز VPN-Service، تمام ترافیک یا ترافیک برنامه انتخابی را به یک سرور راه دور مورد نظر خود هدایت کنید.\n\nتوجه: ما هیچ سروری ارائه نمی دهیم. کاربران موظفند با استفاده از سرورهای خود میزبان یا سرورهای مورد اعتماد، فعالیت‌های آنلاین خود را خصوصی نگه دارند.\n \nما از سرورهایی با موارد زیر پشتیبانی می کنیم:\n- لینک اشتراک V2ray/Xray معمولی\n- لینک اشتراک کلش\n- لینک اشتراک Sing-Box\n\nویژگی های منحصر به فرد ما چیست؟\n - کاربر پسند\n - بهینه و سریع\n - به طور خودکار LowestPing را انتخاب کنید\n - نمایش اطلاعات استفاده کاربر\n - به راحتی لینک فرعی را با یک کلیک با استفاده از دیپ لینک وارد کنید\n - رایگان و بدون تبلیغات\n - به راحتی پیوندهای فرعی کاربر را تغییر دهید\n - بیشتر و بیشتر\n\nحمایت کردن:\n- تمام پروتکل های پشتیبانی شده توسط Sing-Box\n- VLESS + xtls \n- VMESS\n- تروجان\n- ShoadowSocks\n- ریالیتی\n- V2ray\n- هیستریا 2\n- TUIC\n- SSH\n- ShadowTLS\n\n\nکد منبع در https://github.com/hiddify/Hiddify-Next وجود دارد\nهسته برنامه بر اساس sing-box منبع باز است.\n\nتوضیحات مجوز:\n- سرویس VPN: از آنجا که هدف این برنامه ارائه یک کلاینت تونل زنی ایمن، کاربر پسند و کارآمد است، ما به این مجوز نیاز داریم تا بتوانیم ترافیک را از طریق تونل به سرور راه دور هدایت کنیم.\n- QUERY ALL PACKAGES: این مجوز برای اجازه دادن به کاربران برای گنجاندن یا حذف برنامه های کاربردی خاص برای تونل زدن استفاده می شود.\n- دریافت بوت تکمیل شد: این مجوز را می توان از تنظیمات برنامه فعال یا غیرفعال کرد تا این برنامه پس از بوت شدن دستگاه فعال شود.\n- اعلان های ارسالی: این مجوز ضروری است زیرا ما از یک سرویس پیش زمینه برای اطمینان از عملکرد مداوم سرویس VPN استفاده می کنیم.\n- این برنامه بدون تبلیغات است. تجزیه و تحلیل و داده های اشکال فقط با رضایت صریح کاربر در اولین استفاده از برنامه اتفاق می افتد." } -} +} \ No newline at end of file diff --git a/assets/translations/strings_ru.i18n.json b/assets/translations/strings_ru.i18n.json index e8223be9..7cb09aff 100644 --- a/assets/translations/strings_ru.i18n.json +++ b/assets/translations/strings_ru.i18n.json @@ -188,6 +188,7 @@ "route": "Варианты маршрутизации", "dns": "Параметры DNS", "inbound": "Входящие параметры", + "outbound": "Outbound Options", "misc": "Разные параметры" }, "pageTitle": "Параметры конфигурации", @@ -216,7 +217,13 @@ "setSystemProxy": "Использовать системный прокси", "enableFakeDns": "Использовать поддельную DNS", "bypassLan": "Обход локальной сети", - "strictRoute": "Строгая маршрутизация" + "strictRoute": "Строгая маршрутизация", + "enableTlsFragment": "Enable TLS Fragment", + "tlsFragmentSize": "TLS Fragment Size", + "tlsFragmentSleep": "TLS Fragment Sleep", + "enableTlsMixedSniCase": "Enable TLS Mixed SNI Case", + "enableTlsPadding": "Enable TLS Padding", + "tlsPaddingSize": "TLS Padding" }, "geoAssets": { "pageTitle": "Активы маршрутизации", diff --git a/assets/translations/strings_tr.i18n.json b/assets/translations/strings_tr.i18n.json index f381d98e..352df026 100644 --- a/assets/translations/strings_tr.i18n.json +++ b/assets/translations/strings_tr.i18n.json @@ -188,6 +188,7 @@ "route": "Rota Seçenekleri", "dns": "DNS Seçenekleri", "inbound": "Gelen Seçenekler", + "outbound": "Outbound Options", "misc": "Çeşitli Seçenekler" }, "pageTitle": "Yapılandırma Seçenekleri", @@ -216,7 +217,13 @@ "setSystemProxy": "Sistem Proxy'sini Ayarla", "enableFakeDns": "Sahte DNS'yi Etkinleştir", "bypassLan": "Lan'ı Atla", - "strictRoute": "Kesin Rota" + "strictRoute": "Kesin Rota", + "enableTlsFragment": "Enable TLS Fragment", + "tlsFragmentSize": "TLS Fragment Size", + "tlsFragmentSleep": "TLS Fragment Sleep", + "enableTlsMixedSniCase": "Enable TLS Mixed SNI Case", + "enableTlsPadding": "Enable TLS Padding", + "tlsPaddingSize": "TLS Padding" }, "geoAssets": { "pageTitle": "Varlıkları Yönlendirme", @@ -307,4 +314,4 @@ "short_description": "Otomatik, SSH, VLESS, Vmess, Trojan, Reality, Sing-Box, Clash, Xray, Shadowsocks", "full_description": "HiddifyNext'in temel hedefi güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamaktır. VPN Hizmeti iznini kullanarak tüm trafiği veya seçilen uygulama trafiğini seçtiğiniz uzak bir sunucuya yönlendirmenizi sağlar. Not: Herhangi bir sunucu sağlamıyoruz; kullanıcıların kendi barındırılan sunucularını veya güvenilir sunucularını kullanarak çevrimiçi etkinliklerinin gizli kalmasını sağlamaları gerekir. Sunucuları aşağıdakilerle destekliyoruz: - Normal V2ray/Xray Abonelik Bağlantısı - Clash Abonelik Bağlantısı - Sing-Box Abonelik Bağlantısı Benzersiz özelliklerimiz nelerdir? - Kullanıcı Dostu - Optimize Edilmiş ve Hızlı - En Düşük Ping'i otomatik olarak seçin - Kullanıcı kullanım bilgilerini gösterin - Derin bağlantı kullanarak tek tıklamayla alt bağlantıyı kolayca içe aktarın - Ücretsiz ve ADS Yok - Kullanıcı alt bağlantılarını kolayca değiştirin - giderek daha fazla Destek: - Sing-Box tarafından desteklenen tüm Protokoller - VLESS + xtls gerçeklik, vizyon - VMESS - Trojan - ShoadowSocks - Reality - V2ray - Hystria2 - TUIC - SSH - ShadowTLS Kaynak kodu https://github.com/hiddify/Hiddify-Next adresinde mevcuttur. Uygulama çekirdeği açık tabanlıdır. kaynak şarkı kutusu. İzin Açıklaması: - VPN Hizmeti: Bu uygulamanın amacı güvenli, kullanıcı dostu ve verimli bir tünel istemcisi sağlamak olduğundan, trafiği tünel aracılığıyla uzak sunucuya yönlendirebilmek için bu izne ihtiyacımız var. - TÜM PAKETLERİ SORGULAYIN: Bu izin, kullanıcıların tünelleme için belirli uygulamaları dahil etmesine veya hariç tutmasına izin vermek için kullanılır. - ALMA ÖNYÜKLEME TAMAMLANDI: Bu izin, cihaz önyüklemesi sırasında bu uygulamayı etkinleştirmek için uygulama ayarlarından etkinleştirilebilir veya devre dışı bırakılabilir. - BİLDİRİMLER SONRASI: VPN hizmetinin sürekli çalışmasını sağlamak için bir ön plan hizmeti kullandığımız için bu izin önemlidir. - Bu uygulama reklam içermez. Analitik ve kilitlenme verileri yalnızca uygulamanın ilk kullanımında kullanıcının açık rızası ile gerçekleşir." } -} +} \ No newline at end of file diff --git a/assets/translations/strings_zh-CN.i18n.json b/assets/translations/strings_zh-CN.i18n.json index b4152345..37d100e4 100644 --- a/assets/translations/strings_zh-CN.i18n.json +++ b/assets/translations/strings_zh-CN.i18n.json @@ -188,6 +188,7 @@ "route": "路由选项", "dns": "DNS 选项", "inbound": "入站选项", + "outbound": "Outbound Options", "misc": "其它选项" }, "pageTitle": "配置选项", @@ -216,7 +217,13 @@ "setSystemProxy": "设置系统代理", "enableFakeDns": "启用 Fake DNS", "bypassLan": "绕过局域网", - "strictRoute": "严格路由" + "strictRoute": "严格路由", + "enableTlsFragment": "Enable TLS Fragment", + "tlsFragmentSize": "TLS Fragment Size", + "tlsFragmentSleep": "TLS Fragment Sleep", + "enableTlsMixedSniCase": "Enable TLS Mixed SNI Case", + "enableTlsPadding": "Enable TLS Padding", + "tlsPaddingSize": "TLS Padding" }, "geoAssets": { "pageTitle": "路由资源文件", diff --git a/dependencies.properties b/dependencies.properties index ac07d8b0..07c387f5 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -1 +1 @@ -core.version=0.8.4 \ No newline at end of file +core.version=0.9.0 \ No newline at end of file diff --git a/lib/core/model/range.dart b/lib/core/model/range.dart new file mode 100644 index 00000000..fba247b3 --- /dev/null +++ b/lib/core/model/range.dart @@ -0,0 +1,45 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'range.freezed.dart'; + +@freezed +class RangeWithOptionalCeil with _$RangeWithOptionalCeil { + const RangeWithOptionalCeil._(); + + const factory RangeWithOptionalCeil({ + required int min, + int? max, + }) = _RangeWithOptionalCeil; + + String format() => "$min${max != null ? "-$max" : ""}"; + + factory RangeWithOptionalCeil.fromString(String input) => + switch (input.split("-")) { + [final String min] => RangeWithOptionalCeil(min: int.parse(min)), + [final String min, final String max] => RangeWithOptionalCeil( + min: int.parse(min), + max: int.parse(max), + ), + _ => throw Exception("Invalid range: $input"), + }; + + static RangeWithOptionalCeil? tryParse(String input) { + try { + return RangeWithOptionalCeil.fromString(input); + } catch (_) { + return null; + } + } +} + +class RangeWithOptionalCeilJsonConverter + implements JsonConverter { + const RangeWithOptionalCeilJsonConverter(); + + @override + RangeWithOptionalCeil fromJson(String json) => + RangeWithOptionalCeil.fromString(json); + + @override + String toJson(RangeWithOptionalCeil object) => object.format(); +} diff --git a/lib/features/config_option/data/config_option_repository.dart b/lib/features/config_option/data/config_option_repository.dart index f302b1ce..50d95c6c 100644 --- a/lib/features/config_option/data/config_option_repository.dart +++ b/lib/features/config_option/data/config_option_repository.dart @@ -96,6 +96,12 @@ class ConfigOptionRepositoryImpl bypassLan: persisted.bypassLan, enableFakeDns: persisted.enableFakeDns, independentDnsCache: persisted.independentDnsCache, + enableTlsFragment: persisted.enableTlsFragment, + tlsFragmentSize: persisted.tlsFragmentSize, + tlsFragmentSleep: persisted.tlsFragmentSleep, + enableTlsMixedSniCase: persisted.enableTlsMixedSniCase, + enableTlsPadding: persisted.enableTlsPadding, + tlsPaddingSize: persisted.tlsPaddingSize, geoipPath: geoAssetPathResolver.relativePath( geoAssets.geoip.providerName, geoAssets.geoip.fileName, diff --git a/lib/features/config_option/model/config_option_entity.dart b/lib/features/config_option/model/config_option_entity.dart index 9e95f62e..bd058a13 100644 --- a/lib/features/config_option/model/config_option_entity.dart +++ b/lib/features/config_option/model/config_option_entity.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:hiddify/core/model/range.dart'; import 'package:hiddify/core/utils/json_converters.dart'; import 'package:hiddify/features/config_option/model/config_option_patch.dart'; import 'package:hiddify/features/log/model/log_level.dart'; @@ -37,6 +38,18 @@ class ConfigOptionEntity with _$ConfigOptionEntity { @Default(false) bool bypassLan, @Default(false) bool enableFakeDns, @Default(true) bool independentDnsCache, + @Default(false) bool enableTlsFragment, + @RangeWithOptionalCeilJsonConverter() + @Default(RangeWithOptionalCeil(min: 10, max: 100)) + RangeWithOptionalCeil tlsFragmentSize, + @RangeWithOptionalCeilJsonConverter() + @Default(RangeWithOptionalCeil(min: 50, max: 200)) + RangeWithOptionalCeil tlsFragmentSleep, + @Default(false) bool enableTlsMixedSniCase, + @Default(false) bool enableTlsPadding, + @RangeWithOptionalCeilJsonConverter() + @Default(RangeWithOptionalCeil(min: 100, max: 200)) + RangeWithOptionalCeil tlsPaddingSize, }) = _ConfigOptionEntity; static ConfigOptionEntity initial = ConfigOptionEntity( @@ -72,6 +85,13 @@ class ConfigOptionEntity with _$ConfigOptionEntity { bypassLan: patch.bypassLan ?? bypassLan, enableFakeDns: patch.enableFakeDns ?? enableFakeDns, independentDnsCache: patch.independentDnsCache ?? independentDnsCache, + enableTlsFragment: patch.enableTlsFragment ?? enableTlsFragment, + tlsFragmentSize: patch.tlsFragmentSize ?? tlsFragmentSize, + tlsFragmentSleep: patch.tlsFragmentSleep ?? tlsFragmentSleep, + enableTlsMixedSniCase: + patch.enableTlsMixedSniCase ?? enableTlsMixedSniCase, + enableTlsPadding: patch.enableTlsPadding ?? enableTlsPadding, + tlsPaddingSize: patch.tlsPaddingSize ?? tlsPaddingSize, ); } diff --git a/lib/features/config_option/model/config_option_patch.dart b/lib/features/config_option/model/config_option_patch.dart index b19c1dc8..5ebfad07 100644 --- a/lib/features/config_option/model/config_option_patch.dart +++ b/lib/features/config_option/model/config_option_patch.dart @@ -1,4 +1,5 @@ import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:hiddify/core/model/range.dart'; import 'package:hiddify/core/utils/json_converters.dart'; import 'package:hiddify/features/log/model/log_level.dart'; import 'package:hiddify/singbox/model/singbox_config_enum.dart'; @@ -32,6 +33,14 @@ class ConfigOptionPatch with _$ConfigOptionPatch { bool? bypassLan, bool? enableFakeDns, bool? independentDnsCache, + bool? enableTlsFragment, + @RangeWithOptionalCeilJsonConverter() + RangeWithOptionalCeil? tlsFragmentSize, + @RangeWithOptionalCeilJsonConverter() + RangeWithOptionalCeil? tlsFragmentSleep, + bool? enableTlsMixedSniCase, + bool? enableTlsPadding, + @RangeWithOptionalCeilJsonConverter() RangeWithOptionalCeil? tlsPaddingSize, }) = _ConfigOptionPatch; factory ConfigOptionPatch.fromJson(Map json) => diff --git a/lib/features/config_option/overview/config_options_page.dart b/lib/features/config_option/overview/config_options_page.dart index db639f57..245fb46c 100644 --- a/lib/features/config_option/overview/config_options_page.dart +++ b/lib/features/config_option/overview/config_options_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:gap/gap.dart'; import 'package:hiddify/core/localization/translations.dart'; +import 'package:hiddify/core/model/range.dart'; import 'package:hiddify/features/config_option/model/config_option_entity.dart'; import 'package:hiddify/features/config_option/model/config_option_patch.dart'; import 'package:hiddify/features/config_option/notifier/config_option_notifier.dart'; @@ -164,18 +165,6 @@ class ConfigOptionsPage extends HookConsumerWidget { // ), const SettingsDivider(), SettingsSection(t.settings.config.section.inbound), - // if (PlatformUtils.isDesktop) ...[ - // SwitchListTile( - // title: Text(t.settings.config.enableTun), - // value: options.enableTun, - // onChanged: ref.read(enableTunStore.notifier).update, - // ), - // SwitchListTile( - // title: Text(t.settings.config.setSystemProxy), - // value: options.setSystemProxy, - // onChanged: ref.read(setSystemProxyStore.notifier).update, - // ), - // ], ListTile( title: Text(t.settings.config.serviceMode), subtitle: Text(options.serviceMode.present(t)), @@ -251,6 +240,79 @@ class ConfigOptionsPage extends HookConsumerWidget { }, ), const SettingsDivider(), + SettingsSection(t.settings.config.section.outbound), + SwitchListTile( + title: Text(t.settings.config.enableTlsFragment), + value: options.enableTlsFragment, + onChanged: (value) async => + changeOption(ConfigOptionPatch(enableTlsFragment: value)), + ), + ListTile( + title: Text(t.settings.config.tlsFragmentSize), + subtitle: Text(options.tlsFragmentSize.format()), + onTap: () async { + final range = await SettingsInputDialog( + title: t.settings.config.tlsFragmentSize, + initialValue: options.tlsFragmentSize.format(), + resetValue: defaultOptions.tlsFragmentSize.format(), + ).show(context); + if (range == null) return; + await changeOption( + ConfigOptionPatch( + tlsFragmentSize: RangeWithOptionalCeil.tryParse(range), + ), + ); + }, + ), + ListTile( + title: Text(t.settings.config.tlsFragmentSleep), + subtitle: Text(options.tlsFragmentSleep.format()), + onTap: () async { + final range = await SettingsInputDialog( + title: t.settings.config.tlsFragmentSleep, + initialValue: options.tlsFragmentSleep.format(), + resetValue: defaultOptions.tlsFragmentSleep.format(), + ).show(context); + if (range == null) return; + await changeOption( + ConfigOptionPatch( + tlsFragmentSleep: RangeWithOptionalCeil.tryParse(range), + ), + ); + }, + ), + SwitchListTile( + title: Text(t.settings.config.enableTlsMixedSniCase), + value: options.enableTlsMixedSniCase, + onChanged: (value) async => changeOption( + ConfigOptionPatch(enableTlsMixedSniCase: value), + ), + ), + SwitchListTile( + title: Text(t.settings.config.enableTlsPadding), + value: options.enableTlsPadding, + onChanged: (value) async => changeOption( + ConfigOptionPatch(enableTlsPadding: value), + ), + ), + ListTile( + title: Text(t.settings.config.tlsPaddingSize), + subtitle: Text(options.tlsPaddingSize.format()), + onTap: () async { + final range = await SettingsInputDialog( + title: t.settings.config.tlsPaddingSize, + initialValue: options.tlsPaddingSize.format(), + resetValue: defaultOptions.tlsPaddingSize.format(), + ).show(context); + if (range == null) return; + await changeOption( + ConfigOptionPatch( + tlsPaddingSize: RangeWithOptionalCeil.tryParse(range), + ), + ); + }, + ), + const SettingsDivider(), SettingsSection(t.settings.config.section.misc), ListTile( title: Text(t.settings.config.connectionTestUrl), diff --git a/lib/singbox/model/singbox_config_option.dart b/lib/singbox/model/singbox_config_option.dart index 0a11102a..c2655973 100644 --- a/lib/singbox/model/singbox_config_option.dart +++ b/lib/singbox/model/singbox_config_option.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:hiddify/core/model/range.dart'; import 'package:hiddify/features/log/model/log_level.dart'; import 'package:hiddify/singbox/model/singbox_config_enum.dart'; import 'package:hiddify/singbox/model/singbox_rule.dart'; @@ -36,6 +37,15 @@ class SingboxConfigOption with _$SingboxConfigOption { required bool bypassLan, required bool enableFakeDns, required bool independentDnsCache, + required bool enableTlsFragment, + @RangeWithOptionalCeilJsonConverter() + required RangeWithOptionalCeil tlsFragmentSize, + @RangeWithOptionalCeilJsonConverter() + required RangeWithOptionalCeil tlsFragmentSleep, + required bool enableTlsMixedSniCase, + required bool enableTlsPadding, + @RangeWithOptionalCeilJsonConverter() + required RangeWithOptionalCeil tlsPaddingSize, required String geoipPath, required String geositePath, required List rules, diff --git a/libcore b/libcore index 24648282..c499693d 160000 --- a/libcore +++ b/libcore @@ -1 +1 @@ -Subproject commit 24648282bc0a47cf19ccc3ca40ce32e898b2765f +Subproject commit c499693ddcb8e8992fc29c57093fe48e164cea5a From 62e5aa8c4f679cf78a0073b57f7059b04dd856e5 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Mon, 4 Dec 2023 17:42:26 +0330 Subject: [PATCH 2/3] Change entrypoint --- .vscode/launch.json | 6 +++--- lib/{main_dev.dart => main.dart} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename lib/{main_dev.dart => main.dart} (100%) diff --git a/.vscode/launch.json b/.vscode/launch.json index 2a660029..a6ef285c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,21 +6,21 @@ "request": "launch", "type": "dart", "flutterMode": "debug", - "program": "lib/main_dev.dart", + "program": "lib/main.dart", }, { "name": "Hiddify Dev Release", "request": "launch", "type": "dart", "flutterMode": "release", - "program": "lib/main_dev.dart", + "program": "lib/main.dart", }, { "name": "Hiddify Dev Profile", "request": "launch", "type": "dart", "flutterMode": "profile", - "program": "lib/main_dev.dart", + "program": "lib/main.dart", }, { "name": "Hiddify Prod", diff --git a/lib/main_dev.dart b/lib/main.dart similarity index 100% rename from lib/main_dev.dart rename to lib/main.dart From f550677afc84ee947dca73ce6e1a80d2f1244b12 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Mon, 4 Dec 2023 17:50:09 +0330 Subject: [PATCH 3/3] Fix build --- Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 333c0284..6371a1aa 100644 --- a/Makefile +++ b/Makefile @@ -15,12 +15,11 @@ CORE_URL=https://github.com/hiddify/hiddify-next-core/releases/download/draft endif ifeq ($(CHANNEL),prod) -FLAVOR=prod +TARGET=lib/main_prod.dart else -FLAVOR=dev +TARGET=lib/main.dart endif -TARGET=lib/main_$(FLAVOR).dart BUILD_ARGS=--dart-define sentry_dsn=$(SENTRY_DSN) DISTRIBUTOR_ARGS=--skip-clean --build-target $(TARGET) --build-dart-define sentry_dsn=$(SENTRY_DSN)