Skip to content

Commit ff6716b

Browse files
committed
Restore backup file check
1 parent 8505f2d commit ff6716b

File tree

6 files changed

+49
-3
lines changed

6 files changed

+49
-3
lines changed

v2rayN/ServiceLib/Common/FileManager.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,24 @@ public static bool ZipExtractToFile(string fileName, string toPath, string ignor
102102
return true;
103103
}
104104

105+
public static List<string>? GetFilesFromZip(string fileName)
106+
{
107+
if (!File.Exists(fileName))
108+
{
109+
return null;
110+
}
111+
try
112+
{
113+
using ZipArchive archive = ZipFile.OpenRead(fileName);
114+
return archive.Entries.Select(entry => entry.FullName).ToList();
115+
}
116+
catch (Exception ex)
117+
{
118+
Logging.SaveLog(ex.Message, ex);
119+
return null;
120+
}
121+
}
122+
105123
public static bool CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)
106124
{
107125
try

v2rayN/ServiceLib/Resx/ResUI.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

v2rayN/ServiceLib/Resx/ResUI.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,4 +1315,7 @@
13151315
<data name="LvWebDavDirName" xml:space="preserve">
13161316
<value>Remote folder name (optional)</value>
13171317
</data>
1318+
<data name="LocalRestoreInvalidZipTips" xml:space="preserve">
1319+
<value>Invalid backup file</value>
1320+
</data>
13181321
</root>

v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,4 +1312,7 @@
13121312
<data name="LvWebDavDirName" xml:space="preserve">
13131313
<value>远程文件夹名称(可选)</value>
13141314
</data>
1315+
<data name="LocalRestoreInvalidZipTips" xml:space="preserve">
1316+
<value>无效备份文件</value>
1317+
</data>
13151318
</root>

v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,4 +1192,7 @@
11921192
<data name="LvWebDavDirName" xml:space="preserve">
11931193
<value>遠端資料夾名稱(可選)</value>
11941194
</data>
1195+
<data name="LocalRestoreInvalidZipTips" xml:space="preserve">
1196+
<value>無效備份文件</value>
1197+
</data>
11951198
</root>

v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ namespace ServiceLib.ViewModels
77
{
88
public class BackupAndRestoreViewModel : MyReactiveObject
99
{
10+
private readonly string _guiConfigs = "guiConfigs";
11+
private static string BackupFileName => $"backup_{DateTime.Now:yyyyMMddHHmmss}.zip";
12+
1013
public ReactiveCommand<Unit, Unit> RemoteBackupCmd { get; }
1114
public ReactiveCommand<Unit, Unit> RemoteRestoreCmd { get; }
1215
public ReactiveCommand<Unit, Unit> WebDavCheckCmd { get; }
@@ -65,7 +68,7 @@ private async Task WebDavCheck()
6568
private async Task RemoteBackup()
6669
{
6770
DisplayOperationMsg();
68-
var fileName = Utils.GetBackupPath($"backup_{DateTime.Now:yyyyMMddHHmmss}.zip");
71+
var fileName = Utils.GetBackupPath(BackupFileName);
6972
var result = await CreateZipFileFromDirectory(fileName);
7073
if (result)
7174
{
@@ -122,9 +125,16 @@ public async Task LocalRestore(string fileName)
122125
{
123126
return;
124127
}
128+
//check
129+
var lstFiles = FileManager.GetFilesFromZip(fileName);
130+
if (lstFiles is null || !lstFiles.Where(t => t.Contains(_guiConfigs)).Any())
131+
{
132+
DisplayOperationMsg(ResUI.LocalRestoreInvalidZipTips);
133+
return;
134+
}
125135

126136
//backup first
127-
var fileBackup = Utils.GetBackupPath($"backup_{DateTime.Now:yyyyMMddHHmmss}.zip");
137+
var fileBackup = Utils.GetBackupPath(BackupFileName);
128138
var result = await CreateZipFileFromDirectory(fileBackup);
129139
if (result)
130140
{
@@ -145,7 +155,7 @@ private async Task<bool> CreateZipFileFromDirectory(string fileName)
145155

146156
var configDir = Utils.GetConfigPath();
147157
var configDirZipTemp = Utils.GetTempPath($"v2rayN_{DateTime.Now:yyyyMMddHHmmss}");
148-
var configDirTemp = Path.Combine(configDirZipTemp, "guiConfigs");
158+
var configDirTemp = Path.Combine(configDirZipTemp, _guiConfigs);
149159

150160
await Task.Run(() => FileManager.CopyDirectory(configDir, configDirTemp, false, "cache.db"));
151161
var ret = await Task.Run(() => FileManager.CreateFromDirectory(configDirZipTemp, fileName));

0 commit comments

Comments
 (0)