Skip to content

Commit 11df566

Browse files
Merge pull request #82 from InvisibleManVPN/develop
InvisibleMan XRay version 1.4.4
2 parents c7ad4d9 + 66442a5 commit 11df566

41 files changed

Lines changed: 1715 additions & 325 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

InvisibleMan-XRay/Assets/Icons.xaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,14 @@
125125
</VisualBrush.Visual>
126126
</VisualBrush>
127127

128+
<VisualBrush x:Key="Icon.Refresh">
129+
<VisualBrush.Visual>
130+
<Canvas>
131+
<Path Data="M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z" Fill="#ffffff"/>
132+
</Canvas>
133+
</VisualBrush.Visual>
134+
</VisualBrush>
135+
128136
<!-- Update status -->
129137
<VisualBrush x:Key="Icon.Update.Check">
130138
<VisualBrush.Visual>

InvisibleMan-XRay/Factories/WindowFactory.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,23 +140,29 @@ private ServerWindow CreateServerWindow()
140140

141141
ServerWindow serverWindow = new ServerWindow();
142142
serverWindow.Setup(
143-
getCurrentConfigIndex: settingsHandler.UserSettings.GetCurrentConfigIndex,
144-
getAllConfigs: configHandler.GetAllConfigs,
145-
convertConfigLinkToV2Ray: templateHandler.ConverLinkToV2Ray,
143+
getCurrentConfigPath: settingsHandler.UserSettings.GetCurrentConfigPath,
144+
isCurrentPathEqualRootConfigPath: configHandler.IsCurrentPathEqualRootConfigPath,
145+
getAllGeneralConfigs: configHandler.GetAllGeneralConfigs,
146+
getAllSubscriptionConfigs: configHandler.GetAllSubscriptionConfigs,
147+
getAllGroups: configHandler.GetAllGroups,
148+
convertLinkToConfig: templateHandler.ConverLinkToConfig,
149+
convertLinkToSubscription: templateHandler.ConvertLinkToSubscription,
146150
loadConfig: core.LoadConfig,
147151
testConnection: core.Test,
148152
getLogPath: settingsHandler.UserSettings.GetLogPath,
149153
onCopyConfig: configHandler.CopyConfig,
150154
onCreateConfig: configHandler.CreateConfig,
151-
onDeleteConfig: configHandler.LoadConfigFiles,
155+
onCreateSubscription: configHandler.CreateSubscription,
156+
onDeleteSubscription: configHandler.DeleteSubscription,
157+
onDeleteConfig: configHandler.LoadFiles,
152158
onUpdateConfig: UpdateConfig
153159
);
154160

155161
return serverWindow;
156162

157-
void UpdateConfig(int index)
163+
void UpdateConfig(string path)
158164
{
159-
settingsHandler.UpdateCurrentConfigIndex(index);
165+
settingsHandler.UpdateCurrentConfigPath(path);
160166
mainWindow.UpdateUI();
161167
mainWindow.TryRerun();
162168
}
Lines changed: 60 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,103 @@
11
using System;
2-
using System.IO;
3-
using System.Linq;
42
using System.Collections.Generic;
53

64
namespace InvisibleManXRay.Handlers
75
{
6+
using Configs;
87
using Models;
98
using Values;
9+
using Utilities;
1010

1111
public class ConfigHandler : Handler
1212
{
13-
private Dictionary<string, Config> configs;
14-
private Func<int> getCurrentConfigIndex;
13+
private GeneralConfig generalConfig;
14+
private SubscriptionConfig subscriptionConfig;
15+
16+
private Func<string> getCurrentConfigPath;
1517

1618
public ConfigHandler()
1719
{
18-
this.configs = new Dictionary<string, Config>();
19-
LoadConfigFiles();
20+
this.generalConfig = new GeneralConfig();
21+
this.subscriptionConfig = new SubscriptionConfig();
2022
}
2123

22-
public void Setup(Func<int> getCurrentConfigIndex)
24+
public void Setup(Func<string> getCurrentConfigPath)
2325
{
24-
this.getCurrentConfigIndex = getCurrentConfigIndex;
26+
this.getCurrentConfigPath = getCurrentConfigPath;
27+
subscriptionConfig.Setup(getCurrentConfigPath);
2528
}
2629

27-
public void LoadConfigFiles()
30+
public void LoadFiles(GroupType group, string path)
2831
{
29-
configs.Clear();
32+
BaseConfig config = group == GroupType.GENERAL ? generalConfig : subscriptionConfig;
33+
config.LoadFiles(path);
34+
}
3035

31-
DirectoryInfo directoryInfo = new DirectoryInfo(Directory.CONFIGS);
32-
if (!directoryInfo.Exists)
33-
return;
36+
public void CreateConfig(string remark, string data) => generalConfig.CreateConfig(remark, data);
3437

35-
FileInfo[] files = directoryInfo.GetFiles().OrderBy(file => file.CreationTime).ToArray();
36-
foreach(FileInfo file in files)
37-
{
38-
AddConfigToList(CreateConfig(file.FullName));
39-
}
40-
}
38+
public void CreateSubscription(string remark, string url, string data) => subscriptionConfig.CreateSubscription(remark, url, data);
4139

42-
public void CopyConfig(string path)
43-
{
44-
string destinationPath = $"{Directory.CONFIGS}/{GetFileName(path)}";
45-
CopyToConfigsDirectory();
46-
SetFileTime(destinationPath);
47-
AddConfigToList(CreateConfig(destinationPath));
40+
public void DeleteSubscription(Subscription subscription) => subscriptionConfig.DeleteSubscription(subscription);
4841

49-
void CopyToConfigsDirectory()
50-
{
51-
System.IO.Directory.CreateDirectory(Directory.CONFIGS);
52-
File.Copy(path, destinationPath, true);
53-
}
54-
}
42+
public void CopyConfig(string path) => generalConfig.CopyConfig(path);
5543

56-
public void CreateConfig(string remark, string data)
57-
{
58-
string destinationPath = $"{Directory.CONFIGS}/{remark}.json";
59-
SaveToConfigsDirectory();
60-
SetFileTime(destinationPath);
61-
AddConfigToList(CreateConfig(destinationPath));
44+
public Config GetCurrentConfig() => CreateConfigModel(getCurrentConfigPath.Invoke());
6245

63-
void SaveToConfigsDirectory()
64-
{
65-
System.IO.Directory.CreateDirectory(Directory.CONFIGS);
66-
File.WriteAllText(destinationPath, data);
67-
}
68-
}
46+
public void RemoveConfigFromList(string path) => GetCurrentBaseConfig().RemoveConfigFromList(path);
6947

70-
public Config GetCurrentConfig()
48+
public List<Config> GetAllGeneralConfigs()
7149
{
72-
int currentConfigIndex = getCurrentConfigIndex.Invoke();
73-
74-
try
75-
{
76-
return configs.ElementAt(currentConfigIndex).Value;
77-
}
78-
catch
79-
{
80-
return null;
81-
}
50+
generalConfig.LoadFiles();
51+
return generalConfig.GetAllConfigs();
8252
}
8353

84-
public List<Config> GetAllConfigs() => configs.Select(config => config.Value).ToList();
85-
86-
public void RemoveConfigFromList(string path)
54+
public List<Config> GetAllSubscriptionConfigs(string path)
8755
{
88-
if (configs.ContainsKey(path))
89-
configs.Remove(path);
56+
subscriptionConfig.LoadFiles(path);
57+
return subscriptionConfig.GetAllConfigs();
9058
}
9159

92-
private void AddConfigToList(Config config)
60+
public List<Subscription> GetAllGroups()
9361
{
94-
if (configs.ContainsKey(config.Path))
95-
configs[config.Path] = config;
96-
else
97-
configs.Add(config.Path, config);
62+
subscriptionConfig.LoadGroups();
63+
return subscriptionConfig.GetAllGroups();
9864
}
9965

100-
private Config CreateConfig(string path)
66+
public Config CreateConfigModel(string path)
10167
{
102-
return new Config(
103-
path: $"{Directory.CONFIGS}/{GetFileName(path)}",
104-
name: GetFileName(path),
105-
type: ConfigType.FILE,
106-
updateTime: GetFileUpdateTime(path)
107-
);
68+
if (string.IsNullOrEmpty(path) || !FileUtility.IsFileExists(path))
69+
return null;
70+
71+
return GetCurrentBaseConfig().CreateConfigModel(path);
10872
}
10973

110-
private void SetFileTime(string path)
74+
public bool IsCurrentPathEqualRootConfigPath()
11175
{
112-
File.SetCreationTime(path, DateTime.Now);
113-
File.SetLastWriteTime(path, DateTime.Now);
114-
}
76+
return GetCurrentConfigDirectory() == GetRootConfigDirectory();
77+
78+
string GetCurrentConfigDirectory()
79+
{
80+
string path = getCurrentConfigPath.Invoke();
81+
string directory = FileUtility.GetDirectory(path);
11582

116-
private string GetFileName(string path) => System.IO.Path.GetFileName(path);
83+
if (string.IsNullOrEmpty(path) || !FileUtility.IsFileExists(path))
84+
directory = Directory.CONFIGS;
85+
86+
return FileUtility.GetFullPath(directory);
87+
}
88+
89+
string GetRootConfigDirectory()
90+
{
91+
return FileUtility.GetFullPath(Directory.CONFIGS);
92+
}
93+
}
11794

118-
private string GetFileUpdateTime(string path) => System.IO.File.GetLastWriteTime(path).ToShortDateString();
95+
private BaseConfig GetCurrentBaseConfig()
96+
{
97+
if (IsCurrentPathEqualRootConfigPath())
98+
return generalConfig;
99+
else
100+
return subscriptionConfig;
101+
}
119102
}
120103
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System.Linq;
2+
using System.Collections.Generic;
3+
4+
namespace InvisibleManXRay.Handlers.Configs
5+
{
6+
using Models;
7+
using Utilities;
8+
9+
public abstract class BaseConfig
10+
{
11+
protected Dictionary<string, Config> configs;
12+
13+
public BaseConfig()
14+
{
15+
this.configs = new Dictionary<string, Config>();
16+
}
17+
18+
public List<Config> GetAllConfigs()
19+
{
20+
return configs.Select(config => config.Value).ToList();
21+
}
22+
23+
public void AddConfigToList(Config config)
24+
{
25+
if (configs.ContainsKey(config.Path))
26+
configs[config.Path] = config;
27+
else
28+
configs.Add(config.Path, config);
29+
}
30+
31+
public void RemoveConfigFromList(string path)
32+
{
33+
if (configs.ContainsKey(path))
34+
configs.Remove(path);
35+
}
36+
37+
protected void SetFileTime(string path) => FileUtility.SetFileTimeToNow(path);
38+
39+
protected string GetFileName(string path) => FileUtility.GetFileName(path);
40+
41+
protected string GetDirectory(string path) => FileUtility.GetDirectory(path);
42+
43+
protected string GetFileUpdateTime(string path) => FileUtility.GetFileUpdateTime(path);
44+
45+
public abstract void LoadFiles(string path);
46+
47+
public abstract Config CreateConfigModel(string path);
48+
}
49+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System.IO;
2+
using System.Linq;
3+
4+
namespace InvisibleManXRay.Handlers.Configs
5+
{
6+
using Models;
7+
using Values;
8+
9+
public class GeneralConfig : BaseConfig
10+
{
11+
public GeneralConfig() : base()
12+
{
13+
LoadFiles();
14+
}
15+
16+
public void CreateConfig(string remark, string data)
17+
{
18+
string destinationPath = $"{Directory.CONFIGS}/{remark}.json";
19+
SaveToDirectory();
20+
SetFileTime(destinationPath);
21+
AddConfigToList(CreateConfigModel(destinationPath));
22+
23+
void SaveToDirectory()
24+
{
25+
System.IO.Directory.CreateDirectory(Directory.CONFIGS);
26+
File.WriteAllText(destinationPath, data);
27+
}
28+
}
29+
30+
public void CopyConfig(string path)
31+
{
32+
string destinationPath = $"{Directory.CONFIGS}/{GetFileName(path)}";
33+
CopyToConfigsDirectory();
34+
SetFileTime(destinationPath);
35+
AddConfigToList(CreateConfigModel(destinationPath));
36+
37+
void CopyToConfigsDirectory()
38+
{
39+
System.IO.Directory.CreateDirectory(Directory.CONFIGS);
40+
File.Copy(path, destinationPath, true);
41+
}
42+
}
43+
44+
public override void LoadFiles(string path = null)
45+
{
46+
configs.Clear();
47+
48+
DirectoryInfo directoryInfo = new DirectoryInfo(Directory.CONFIGS);
49+
if (!directoryInfo.Exists)
50+
return;
51+
52+
FileInfo[] files = directoryInfo.GetFiles().OrderBy(file => file.CreationTime).ToArray();
53+
foreach(FileInfo file in files)
54+
{
55+
AddConfigToList(CreateConfigModel(file.FullName));
56+
}
57+
}
58+
59+
public override Config CreateConfigModel(string path)
60+
{
61+
return new Config(
62+
path: $"{Directory.CONFIGS}/{GetFileName(path)}",
63+
name: GetFileName(path),
64+
type: ConfigType.FILE,
65+
group: GroupType.GENERAL,
66+
updateTime: GetFileUpdateTime(path)
67+
);
68+
}
69+
}
70+
}

0 commit comments

Comments
 (0)