Merge branch 'beta'

This commit is contained in:
Juan Gilsanz Polo 2025-03-09 20:37:16 +01:00
commit 7a75a67701
19 changed files with 155 additions and 93 deletions

2
.gitignore vendored
View file

@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
.build/
.buildlog/
.history
.svn/
.swiftpm/
migrate_working_dir/
# Env

View file

@ -2,27 +2,27 @@ C/C++ Structured Logu
s
q/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ßΠá×2  ÏΠá×2r
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  „¹<EFBFBD>ã×2  <20>¹<EFBFBD>ã×2r
p
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/android_gradle_build.json  àΠá×2Ï ÒΠá×2w
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/android_gradle_build.json  „¹<EFBFBD>ã×2Ï ¹<E2809A>ã×2w
u
s/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/android_gradle_build_mini.json  àΠá×2Ú ØÎ á×2d
s/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/android_gradle_build_mini.json  „¹<EFBFBD>ã×2Ú ƒ¹<C692>ã×2d
b
`/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build.ninja  àΠá×2”Ä »Î á×2h
`/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build.ninja  „¹<EFBFBD>ã×2”Ä ÷¸<C3B7>ã×2h
f
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build.ninja.txt  àΠá×2m
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build.ninja.txt  „¹<EFBFBD>ã×2m
k
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build_file_index.txt  àΠá×2 P ØÎ á×2n
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/build_file_index.txt  „¹<EFBFBD>ã×2 P „¹<E2809E>ã×2n
l
j/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/compile_commands.json  àΠá×2r
j/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/compile_commands.json  „¹<EFBFBD>ã×2r
p
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/compile_commands.json.bin  àΠá×2 x
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/compile_commands.json.bin  „¹<EFBFBD>ã×2 x
v
t/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/metadata_generation_command.txt  àΠá×2
¾ ØÎ á×2k
t/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/metadata_generation_command.txt  „¹<EFBFBD>ã×2
¾ „¹<EFBFBD>ã×2k
i
g/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/prefab_config.json  àΠá×2  ( ØÎ á×2p
g/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/prefab_config.json  „¹<EFBFBD>ã×2  ( „¹<E2809E>ã×2p
n
l/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/symbol_folder_index.txt  àΠá×2  c ØÎ á×2T
l/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/arm64-v8a/symbol_folder_index.txt  „¹<EFBFBD>ã×2  c „¹<E2809E>ã×2T
R
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  àΠá×2 ¤ Ø„é×Ñ2
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  „¹<EFBFBD>ã×2 ¤ Ø„é×Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Logw
u
s/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÍÑ á×2  ËÑ á×2t
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¼»<EFBFBD>ã×2  º»<C2BA>ã×2t
r
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/android_gradle_build.json  ÍÑ á×2Ó ÌÑ á×2y
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/android_gradle_build.json  ¼»<EFBFBD>ã×2Ó »»<C2BB>ã×2y
w
u/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/android_gradle_build_mini.json  ÍÑ á×2Þ ÌÑ á×2f
u/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/android_gradle_build_mini.json  ¼»<EFBFBD>ã×2Þ »»<C2BB>ã×2f
d
b/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build.ninja  ÍÑ á×2 Ä ÁÑ á×2j
b/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build.ninja  ¼»<EFBFBD>ã×2 Ä ±»<C2B1>ã×2j
h
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build.ninja.txt  ÍÑ á×2o
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build.ninja.txt  ¼»<EFBFBD>ã×2o
m
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build_file_index.txt  ÍÑ á×2 P ÍÑ á×2p
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/build_file_index.txt  ¼»<EFBFBD>ã×2 P ¼»<C2BC>ã×2p
n
l/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/compile_commands.json  ÍÑ á×2t
l/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/compile_commands.json  ¼»<EFBFBD>ã×2t
r
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/compile_commands.json.bin  ÍÑ á×2 z
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/compile_commands.json.bin  ¼»<EFBFBD>ã×2 z
x
v/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/metadata_generation_command.txt  ÍÑ á×2
È ÍÑ á×2m
v/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/metadata_generation_command.txt  ¼»<EFBFBD>ã×2
È »»<EFBFBD>ã×2m
k
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/prefab_config.json  ÍÑ á×2  ( ÍÑ á×2r
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/prefab_config.json  ¼»<EFBFBD>ã×2  ( »»<C2BB>ã×2r
p
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/symbol_folder_index.txt  ÍÑ á×2  e ÍÑ á×2T
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/armeabi-v7a/symbol_folder_index.txt  ¼»<EFBFBD>ã×2  e ¼»<C2BC>ã×2T
R
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ÍÑ á×2 ¤ Ø„é×Ñ2
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ¼»<EFBFBD>ã×2 ¤ Ø„é×Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Logo
m
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÒÔ á×2  ÐÔ á×2l
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ñ½<EFBFBD>ã×2  ï½<C3AF>ã×2l
j
h/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/android_gradle_build.json  ÒÔ á×2Ã ÑÔ á×2q
h/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/android_gradle_build.json  ñ½<EFBFBD>ã×2Ã ï½<C3AF>ã×2q
o
m/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/android_gradle_build_mini.json  ÒÔ á×2Î ÒÔ á×2^
m/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/android_gradle_build_mini.json  ñ½<EFBFBD>ã×2Î ð½<C3B0>ã×2^
\
Z/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build.ninja  ÒÔ á×2ðà ÄÔ á×2b
Z/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build.ninja  ñ½<EFBFBD>ã×2ðà å½<C3A5>ã×2b
`
^/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build.ninja.txt  ÒÔ á×2g
^/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build.ninja.txt  ñ½<EFBFBD>ã×2g
e
c/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build_file_index.txt  ÒÔ á×2 P ÒÔ á×2h
c/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/build_file_index.txt  ñ½<EFBFBD>ã×2 P ð½<C3B0>ã×2h
f
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/compile_commands.json  ÒÔ á×2l
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/compile_commands.json  ñ½<EFBFBD>ã×2l
j
h/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/compile_commands.json.bin  ÒÔ á×2 r
h/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/compile_commands.json.bin  ñ½<EFBFBD>ã×2 r
p
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/metadata_generation_command.txt  ÒÔ á×2
  ÒÔ á×2e
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/metadata_generation_command.txt  ñ½<EFBFBD>ã×2
  ð½<EFBFBD>ã×2e
c
a/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/prefab_config.json  ÒÔ á×2  ( ÒÔ á×2j
a/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/prefab_config.json  ñ½<EFBFBD>ã×2  ( ð½<C3B0>ã×2j
h
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/symbol_folder_index.txt  ÒÔ á×2  ] ÒÔ á×2T
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86/symbol_folder_index.txt  ñ½<EFBFBD>ã×2  ] ð½<C3B0>ã×2T
R
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ÒÔ á×2 ¤ Ø„é×Ñ2
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ñ½<EFBFBD>ã×2 ¤ Ø„é×Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Logr
p
n/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ツラ<EFBFBD>瞹2  ソラ<EFBDBF>2o
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ŸÀ<EFBFBD>ã×2  <20>À<EFBFBD>ã×2o
m
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/android_gradle_build.json  ツラ<EFBFBD>瞹2 タラ<EFBE80>2t
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/android_gradle_build.json  ŸÀ<EFBFBD>ã×2É žÀ<C5BE>ã×2t
r
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/android_gradle_build_mini.json  ツラ<EFBFBD>瞹2 チラ<EFBE81>2a
p/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/android_gradle_build_mini.json  ŸÀ<EFBFBD>ã×2Ô ŸÀ<C5B8>ã×2a
_
]/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build.ninja  ツラ<EFBFBD>瞹2 オラ<EFBDB5>2e
]/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build.ninja  ŸÀ<EFBFBD>ã×2‚Ä ”À<E2809D>ã×2e
c
a/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build.ninja.txt  ツラ<EFBFBD>2j
a/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build.ninja.txt  ŸÀ<EFBFBD>ã×2j
h
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build_file_index.txt  ツラ<EFBFBD>瞹2 P チラ<EFBE81>2k
f/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/build_file_index.txt  ŸÀ<EFBFBD>ã×2 P ŸÀ<C5B8>ã×2k
i
g/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/compile_commands.json  ツラ<EFBFBD>2o
g/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/compile_commands.json  ŸÀ<EFBFBD>ã×2o
m
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/compile_commands.json.bin  ツラ<EFBFBD>2 u
k/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/compile_commands.json.bin  ŸÀ<EFBFBD>ã×2 u
s
q/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/metadata_generation_command.txt  ツラ<EFBFBD>2
 チラ<EFBE81>2h
q/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/metadata_generation_command.txt  ŸÀ<EFBFBD>ã×2
¯ ŸÀ<C5B8>ã×2h
f
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/prefab_config.json  ツラ<EFBFBD>瞹2  ( チラ<EFBE81>2m
d/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/prefab_config.json  ŸÀ<EFBFBD>ã×2  ( ŸÀ<C5B8>ã×2m
k
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/symbol_folder_index.txt  ツラ<EFBFBD>瞹2  ` チラ<EFBE81>2T
i/Users/juan/Proyectos/adguard-home-manager/android/app/.cxx/Debug/4s676p3c/x86_64/symbol_folder_index.txt  ŸÀ<EFBFBD>ã×2  ` ŸÀ<C5B8>ã×2T
R
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ツラ<EFBFBD>瞹2 <>ラム2
P/Users/juan/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt   À<EFBFBD>ã×2 ¤ Ø„é×Ñ2

View file

@ -1,6 +1,6 @@
class Regexps {
static final wildcardDomain = RegExp(r'^(\*\.)?([a-z0-9|-]+\.)*[a-z0-9|-]+\.[a-z]+$');
static final domain = RegExp(r'^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$');
static final domain = RegExp(r'^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,10}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,10})$');
static final ipv4Address = RegExp(r'^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)(\.(?!$)|$)){4}$');
static final ipv6Address = RegExp(r'(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))');
static final subroute = RegExp(r'^\/\b([A-Za-z0-9_\-~/]*)[^\/|\.|\:]$');

View file

@ -803,5 +803,8 @@
"myOtherApps": "My other apps",
"myOtherAppsDescription": "Check my other apps, make a donation, contact support, and more",
"topToBottom": "From top to bottom",
"bottomToTop": "From bottom to top"
"bottomToTop": "From bottom to top",
"upstreamTimeout": "Upstream timeout",
"upstreamTimeoutHelper": "Specifies the number of seconds to wait for a response from the upstream server",
"fieldCannotBeEmpty": "This field cannot be empty"
}

View file

@ -803,5 +803,8 @@
"myOtherApps": "Mis otras apps",
"myOtherAppsDescription": "Comprueba mis otras apps, hacer una donación, contactar al soporte, y más",
"topToBottom": "Desde arriba hacia abajo",
"bottomToTop": "Desde abajo hacia arriba"
"bottomToTop": "Desde abajo hacia arriba",
"upstreamTimeout": "Tiempo de espera del upstream",
"upstreamTimeoutHelper": "Especifica el número de segundos que se debe esperar para recibir una respuesta del servidor upstream",
"fieldCannotBeEmpty": "El campo no puede estar vacío"
}

View file

@ -26,6 +26,7 @@ class DnsInfo {
int? ratelimitSubnetLenIpv4;
int? ratelimitSubnetLenIpv6;
List<String>? ratelimitWhitelist;
int? upstreamTimeout;
DnsInfo({
required this.upstreamDns,
@ -55,6 +56,7 @@ class DnsInfo {
required this.ratelimitSubnetLenIpv4,
required this.ratelimitSubnetLenIpv6,
required this.ratelimitWhitelist,
required this.upstreamTimeout,
});
factory DnsInfo.fromJson(Map<String, dynamic> json) => DnsInfo(
@ -85,6 +87,7 @@ class DnsInfo {
ratelimitSubnetLenIpv4: json["ratelimit_subnet_len_ipv4"],
ratelimitSubnetLenIpv6: json["ratelimit_subnet_len_ipv6"],
ratelimitWhitelist: json["ratelimit_whitelist"] != null ? List<String>.from(json["ratelimit_whitelist"].map((x) => x)) : [],
upstreamTimeout: json["upstream_timeout"],
);
Map<String, dynamic> toJson() => {
@ -115,5 +118,6 @@ class DnsInfo {
"ratelimit_subnet_len_ipv4": ratelimitSubnetLenIpv4,
"ratelimit_subnet_len_ipv6": ratelimitSubnetLenIpv6,
"ratelimit_whitelist": ratelimitWhitelist != null ? List<String>.from(ratelimitWhitelist!.map((x) => x)) : null,
"upstream_timeout": upstreamTimeout,
};
}

View file

@ -114,10 +114,12 @@ class _ClientsModalState extends State<ClientsModal> {
}
void searchAddedClient(_ClientLog client) {
final notIps = client.ids?.where((e) => isIpAddress(e) == false).toList();
if (notIps == null || notIps.isEmpty) return;
logsProvider.setSearchText('"${notIps[0]}"');
final ips = client.ids?.where((e) => isIpAddress(e) == true).toList();
if (ips == null || ips.isEmpty) return;
logsProvider.setSearchText(ips[0]);
logsProvider.filterLogs();
Navigator.of(context).pop();
Navigator.pop(context);
}
if (widget.dialog == true) {
@ -302,7 +304,7 @@ class _ClientsModalState extends State<ClientsModal> {
subtitle: _selectedList == 0 ? _filteredClients[index].name : _filteredClients[index].ids?.join(", "),
checkboxActive: logsProvider.selectedClients.contains(_filteredClients[index].ip),
isAddedClient: _selectedList == 1,
onSearchAddedClient: () => searchAddedClient(_filteredClients[index]),
onSearchAddedClient: _filteredClients[index].ids != null && _filteredClients[index].ids!.where((e) => isIpAddress(e) == true).isNotEmpty ? () => searchAddedClient(_filteredClients[index]) : null,
onChanged: (isSelected) {
if (isSelected == true) {
logsProvider.setSelectedClients([
@ -376,7 +378,7 @@ class _ListItem extends StatelessWidget {
final bool checkboxActive;
final void Function(bool) onChanged;
final bool isAddedClient;
final void Function() onSearchAddedClient;
final void Function()? onSearchAddedClient;
const _ListItem({
required this.title,

View file

@ -1,5 +1,3 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:flutter/material.dart';
@ -30,6 +28,9 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
bool validValues = false;
final upstreamTimeoutController = TextEditingController();
String? upstreamTimeoutError = null;
checkValidValues() {
if (
dnsServers.isNotEmpty &&
@ -61,6 +62,7 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
}
}
upstreamMode = dnsProvider.dnsInfo!.upstreamMode ?? "";
upstreamTimeoutController.text = dnsProvider.dnsInfo!.upstreamTimeout != null ? dnsProvider.dnsInfo!.upstreamTimeout.toString() : "";
validValues = true;
super.initState();
}
@ -72,6 +74,23 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
final width = MediaQuery.of(context).size.width;
void validateTimeout(String value) {
if (value != '' && int.tryParse(value) != null && int.parse(value) > 0) {
setState(() {
upstreamTimeoutError = null;
validValues = true;
});
}
else {
setState(() {
upstreamTimeoutError = value == ''
? AppLocalizations.of(context)!.fieldCannotBeEmpty
: AppLocalizations.of(context)!.invalidValue;
validValues = false;
});
}
}
void openAddCommentModal() {
if (width > 900 || !(Platform.isAndroid || Platform.isIOS)) {
showDialog(
@ -146,11 +165,13 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
final result = await dnsProvider.saveUpstreamDnsConfig({
"upstream_dns": dnsServers.map((e) => e['controller'] != null ? e['controller'].text : e['comment']).toList(),
"upstream_mode": upstreamMode
"upstream_mode": upstreamMode,
"upstream_timeout": int.tryParse(upstreamTimeoutController.text)
});
processModal.close();
if (!context.mounted) return;
if (result.successful == true) {
showSnackbar(
appConfigProvider: appConfigProvider,
@ -312,6 +333,27 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
subtitle: AppLocalizations.of(context)!.fastestIpAddressDescription,
onChanged: (value) => setState(() => upstreamMode = value),
),
const SizedBox(height: 16),
SectionLabel(label: AppLocalizations.of(context)!.others),
Padding(
padding: const EdgeInsets.all(16),
child: TextFormField(
controller: upstreamTimeoutController,
onChanged: validateTimeout,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.timer_rounded),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(10)
)
),
labelText: AppLocalizations.of(context)!.upstreamTimeout,
helperText: AppLocalizations.of(context)!.upstreamTimeoutHelper,
helperMaxLines: 2,
errorText: upstreamTimeoutError
)
),
),
],
),
),

View file

@ -6,33 +6,34 @@ PODS:
- FlutterMacOS (1.0.0)
- package_info_plus (0.0.1):
- FlutterMacOS
- screen_retriever (0.0.1):
- screen_retriever_macos (0.0.1):
- FlutterMacOS
- Sentry/HybridSDK (8.36.0)
- sentry_flutter (8.9.0):
- Sentry/HybridSDK (8.44.0)
- sentry_flutter (8.13.2):
- Flutter
- FlutterMacOS
- Sentry/HybridSDK (= 8.36.0)
- Sentry/HybridSDK (= 8.44.0)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.3):
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- "sqlite3 (3.46.1+1)":
- "sqlite3/common (= 3.46.1+1)"
- "sqlite3/common (3.46.1+1)"
- "sqlite3/dbstatvtab (3.46.1+1)":
- sqlite3 (3.49.1):
- sqlite3/common (= 3.49.1)
- sqlite3/common (3.49.1)
- sqlite3/dbstatvtab (3.49.1):
- sqlite3/common
- "sqlite3/fts5 (3.46.1+1)":
- sqlite3/fts5 (3.49.1):
- sqlite3/common
- "sqlite3/perf-threadsafe (3.46.1+1)":
- sqlite3/perf-threadsafe (3.49.1):
- sqlite3/common
- "sqlite3/rtree (3.46.1+1)":
- sqlite3/rtree (3.49.1):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- FlutterMacOS
- "sqlite3 (~> 3.46.0+1)"
- sqlite3 (~> 3.49.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
- sqlite3/perf-threadsafe
@ -47,11 +48,11 @@ DEPENDENCIES:
- dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
- screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`)
- sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
@ -69,33 +70,33 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
screen_retriever:
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
screen_retriever_macos:
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos
sentry_flutter:
:path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
sqflite_darwin:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin
sqlite3_flutter_libs:
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
window_manager:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
SPEC CHECKSUMS:
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
device_info_plus: 1b14eed9bf95428983aed283a8d51cce3d8c4215
dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe
package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b
screen_retriever_macos: 776e0fa5d42c6163d2bf772d22478df4b302b161
Sentry: 0f9bc9adfc0b960e7f3bb5ec67e9a3d8193f3bdb
sentry_flutter: 64a43fb39ab4c7f67d8a4cad52b49e22439e58b7
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: 5ca46c1a04eddfbeeb5b16566164aa7ad1616e7b
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
sqlite3_flutter_libs: cc304edcb8e1d8c595d1b08c7aeb46a47691d9db
url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8

View file

@ -48,6 +48,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">

View file

@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
return true
}
}

View file

@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 2.20.1+148
version: 2.20.2+149
environment:
sdk: '>=2.18.1 <3.0.0'