chore: 调整清理图片缓存样式,增加提示

This commit is contained in:
uye
2026-02-10 00:51:49 +08:00
parent 946b1dfe2e
commit 53e59bea59
9 changed files with 143 additions and 89 deletions

View File

@@ -37,7 +37,7 @@ MAA now supports the PC version of Arknights. However, due to limited maintenanc
* 界园肉鸽可选难度提高至 18 @SherkeyXD
* 芯片本支持显示库存数量 @ABA2396
* 发布时 minify resource 文件下的 json (#15567) @soundofautumn
* WpfGui 清空缓存按钮 (#15582) @soundofautumn @Constrat @HX3N
* wpf 增加清理图片缓存功能 @soundofautumn @Constrat @HX3N @status102 @ABA2396
* 界园肉鸽指定种子开局 (#15588) @status102 @HX3N @Manicsteiner
### 改进 | Improved
@@ -46,7 +46,6 @@ MAA now supports the PC version of Arknights. However, due to limited maintenanc
* 自动战斗不支持技能重置说明中, 干员名遵循干员名语言设置 @status102
* 移除过时的参数兼容 @status102
* 追加自定干员允许不切换技能 @status102
* 清空缓存移动到界面设置 @status102
* 自动战斗作业列表使用相对路径代替绝对路径 @status102
* TaskQueue 任务开始&完成显示修改后的任务名 @status102

View File

@@ -1289,10 +1289,14 @@ Before use, please ensure:
<system:String x:Key="OpenDebugFolder">Open Debug Folder</system:String>
<system:String x:Key="GenerateSupportPayloadSuccessful">Support payload generated successfully</system:String>
<system:String x:Key="GenerateSupportPayloadException">An error occurred while generating the support payload:</system:String>
<system:String x:Key="ClearCache">Clear Cache</system:String>
<system:String x:Key="ClearCacheSuccessful">Cache cleared successfully</system:String>
<system:String x:Key="ClearCacheAlreadyEmpty">Cache directories are already empty</system:String>
<system:String x:Key="ClearCacheException">An error occurred while clearing the cache:</system:String>
<system:String x:Key="ClearImageCache">Clear Image Cache</system:String>
<system:String x:Key="ClearImageCacheTip" xml:space="preserve">Manual cleanup is usually unnecessary.
Images in the DEBUG directory have a quantity limit, and old images are automatically cleaned when exceeded.
Manual cleanup deletes all images, which may result in missing screenshots for troubleshooting.
Cache files (such as maps, operator avatars, etc.) need to be regenerated after clearing, which may affect user experience.</system:String>
<system:String x:Key="ClearImageCacheSuccessful">Image cache cleared successfully</system:String>
<system:String x:Key="ClearImageCacheAlreadyEmpty">Image cache is already empty</system:String>
<system:String x:Key="ClearImageCacheException">An error occurred while clearing the image cache:</system:String>
<!-- !Issues -->
<!-- AutoRecruitSettings -->
<system:String x:Key="AutoRefresh">Auto refresh 3★ Tags</system:String>

View File

@@ -1290,10 +1290,14 @@ MAA Team の開発リソースが限られているため、PC 対応は専任
<system:String x:Key="OpenDebugFolder">デバッグフォルダーを開く</system:String>
<system:String x:Key="GenerateSupportPayloadSuccessful">サポート用ZIPの生成に成功しました</system:String>
<system:String x:Key="GenerateSupportPayloadException">サポート用ZIPの生成中にエラーが発生しました</system:String>
<system:String x:Key="ClearCache">キャッシュをクリア</system:String>
<system:String x:Key="ClearCacheSuccessful">キャッシュをクリアしました</system:String>
<system:String x:Key="ClearCacheAlreadyEmpty">キャッシュディレクトリは既に空です</system:String>
<system:String x:Key="ClearCacheException">キャッシュのクリア中にエラーが発生しました:</system:String>
<system:String x:Key="ClearImageCache">画像キャッシュをクリア</system:String>
<system:String x:Key="ClearImageCacheTip" xml:space="preserve">通常、手動でクリアする必要はありません。
DEBUGディレクトリに保存される画像には数量制限があり、超過すると古い画像が自動的にクリアされます。
手動クリアはすべての画像を削除するため、問題調査時にスクリーンショットが不足する可能性があります。
キャッシュファイル(マップ、オペレーターアイコンなど)はクリア後に再生成が必要で、使用体験に影響する可能性があります。</system:String>
<system:String x:Key="ClearImageCacheSuccessful">画像キャッシュをクリアしました</system:String>
<system:String x:Key="ClearImageCacheAlreadyEmpty">画像キャッシュは既に空です</system:String>
<system:String x:Key="ClearImageCacheException">画像キャッシュのクリア中にエラーが発生しました:</system:String>
<!-- !Issues -->
<!-- 自動募集設定 -->
<system:String x:Key="AutoRefresh">星3タグを自動的に更新する</system:String>

View File

@@ -1291,10 +1291,14 @@ MAA Team의 개발 인력이 제한되어 있어 PC 지원은 전담 관리가
<system:String x:Key="OpenDebugFolder">로그 폴더 열기</system:String>
<system:String x:Key="GenerateSupportPayloadSuccessful">압축 파일 생성 성공</system:String>
<system:String x:Key="GenerateSupportPayloadException">압축 파일 생성 중 오류가 발생했습니다:</system:String>
<system:String x:Key="ClearCache">캐시 비우기</system:String>
<system:String x:Key="ClearCacheSuccessful">캐시 비우기 성공</system:String>
<system:String x:Key="ClearCacheAlreadyEmpty">캐시 폴더가 이미 비어 있음</system:String>
<system:String x:Key="ClearCacheException">캐시 비우기 중 오류가 발생했습니다:</system:String>
<system:String x:Key="ClearImageCache">이미지 캐시 비우기</system:String>
<system:String x:Key="ClearImageCacheTip" xml:space="preserve">일반적으로 수동 정리가 필요하지 않습니다.
DEBUG 디렉토리에 저장된 이미지는 수량 제한이 있으며 초과 시 오래된 이미지가 자동으로 정리됩니다.
수동 정리는 모든 이미지를 삭제하므로 문제 해결 시 스크린샷이 부족할 수 있습니다.
캐시 파일(지도, 오퍼레이터 아바타 등)은 정리 후 재생성이 필요하며 사용 경험에 영향을 줄 수 있습니다.</system:String>
<system:String x:Key="ClearImageCacheSuccessful">이미지 캐시 비우기 성공</system:String>
<system:String x:Key="ClearImageCacheAlreadyEmpty">이미지 캐시가 이미 비어 있음</system:String>
<system:String x:Key="ClearImageCacheException">이미지 캐시 비우기 중 오류가 발생했습니다:</system:String>
<!-- !Issues -->
<!-- AutoRecruitSettings -->
<system:String x:Key="AutoRefresh">★3 태그 자동 새로고침</system:String>

View File

@@ -1290,10 +1290,14 @@ C:\\leidian\\LDPlayer9。\n
<system:String x:Key="OpenDebugFolder">打开日志文件夹</system:String>
<system:String x:Key="GenerateSupportPayloadSuccessful">生成压缩包成功</system:String>
<system:String x:Key="GenerateSupportPayloadException">生成压缩包时出现问题:</system:String>
<system:String x:Key="ClearCache">清空缓存</system:String>
<system:String x:Key="ClearCacheSuccessful">缓存已清空</system:String>
<system:String x:Key="ClearCacheAlreadyEmpty">缓存目录为空</system:String>
<system:String x:Key="ClearCacheException">清空缓存时出现问题:</system:String>
<system:String x:Key="ClearImageCache">清空图片缓存</system:String>
<system:String x:Key="ClearImageCacheTip" xml:space="preserve">正常情况下无需手动清理。
DEBUG 目录下保存的图片有数量限制,超出后会自动清理旧图片。
手动清理会删除所有图片,可能导致问题排查时缺少截图依据。
缓存文件(如地图、干员头像等)清理后需要重新生成,可能影响使用体验。</system:String>
<system:String x:Key="ClearImageCacheSuccessful">图片缓存已清空</system:String>
<system:String x:Key="ClearImageCacheAlreadyEmpty">图片缓存为空</system:String>
<system:String x:Key="ClearImageCacheException">清空图片缓存时出现问题:</system:String>
<!-- !Issues -->
<!-- AutoRecruitSettings -->
<system:String x:Key="AutoRefresh">自动刷新 3 星 Tags</system:String>

View File

@@ -1290,10 +1290,14 @@ C:\\leidian\\LDPlayer9\n
<system:String x:Key="OpenDebugFolder">打開紀錄資料夾</system:String>
<system:String x:Key="GenerateSupportPayloadSuccessful">壓縮檔產生成功</system:String>
<system:String x:Key="GenerateSupportPayloadException">產生壓縮檔時發生問題:</system:String>
<system:String x:Key="ClearCache">清空快取</system:String>
<system:String x:Key="ClearCacheSuccessful">快取已清空</system:String>
<system:String x:Key="ClearCacheAlreadyEmpty">快取內容為空</system:String>
<system:String x:Key="ClearCacheException">清空快取時發生錯誤:</system:String>
<system:String x:Key="ClearImageCache">清空圖片快取</system:String>
<system:String x:Key="ClearImageCacheTip" xml:space="preserve">正常情況下無需手動清理。
DEBUG 目錄下儲存的圖片有數量限制,超出後會自動清理舊圖片。
手動清理會刪除所有圖片,可能導致問題排查時缺少截圖依據。
快取檔案(如地圖、幹員頭像等)清理後需要重新產生,可能影響使用體驗。</system:String>
<system:String x:Key="ClearImageCacheSuccessful">圖片快取已清空</system:String>
<system:String x:Key="ClearImageCacheAlreadyEmpty">圖片快取為空</system:String>
<system:String x:Key="ClearImageCacheException">清空圖片快取時發生錯誤:</system:String>
<!-- !Issues -->
<!-- AutoRecruitSettings -->
<system:String x:Key="AutoRefresh">自動刷新 3★ Tags</system:String>

View File

@@ -24,7 +24,7 @@ namespace MaaWpfGui.Services.Web;
public class MaaApiService : IMaaApiService
{
private static readonly string CacheDir = PathsHelper.BaseDir + "/cache/";
private static readonly string CacheDir = PathsHelper.CacheDir;
public async Task<JObject?> RequestMaaApiWithCache(string api, bool allowFallbackToCache = true)
{

View File

@@ -18,6 +18,7 @@ using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Windows;
using HandyControl.Controls;
using HandyControl.Data;
using JetBrains.Annotations;
@@ -77,42 +78,83 @@ public class IssueReportUserControlModel : PropertyChangedBase
}
/// <summary>
/// 清空缓存 包括 cache 目录和 debug 目录
/// 清空图片缓存 仅删除 cache 目录和 debug 目录中的图片文件,保留文件夹结构
/// </summary>
public static void ClearCache()
public static void ClearImageCache()
{
var result = MessageBoxHelper.Show(
LocalizationHelper.GetString("ClearImageCacheTip"),
LocalizationHelper.GetString("Warning"),
MessageBoxButton.YesNo,
MessageBoxImage.Error,
no: LocalizationHelper.GetString("Confirm"),
yes: LocalizationHelper.GetString("Cancel"));
if (result == MessageBoxResult.Yes)
{
return;
}
try
{
var clearedDirs = new List<string>();
var imageExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
".jpg", ".jpeg", ".png",
};
int deletedCount = 0;
if (Directory.Exists(PathsHelper.CacheDir))
{
Directory.Delete(PathsHelper.CacheDir, recursive: true);
clearedDirs.Add("cache");
deletedCount += DeleteImageFiles(PathsHelper.CacheDir, imageExtensions);
}
if (Directory.Exists(PathsHelper.DebugDir))
{
DeleteDirectoryContentsExcept(PathsHelper.DebugDir, ["asst.log", "gui.log"]);
clearedDirs.Add("debug");
deletedCount += DeleteImageFiles(PathsHelper.DebugDir, imageExtensions);
}
if (clearedDirs.Count > 0)
if (deletedCount > 0)
{
ShowGrowl(LocalizationHelper.GetString("ClearCacheSuccessful"));
ShowGrowl(LocalizationHelper.GetString("ClearImageCacheSuccessful"));
}
else
{
ShowGrowl(LocalizationHelper.GetString("ClearCacheAlreadyEmpty"));
ShowGrowl(LocalizationHelper.GetString("ClearImageCacheAlreadyEmpty"));
}
}
catch (Exception ex)
{
ShowGrowl($"{LocalizationHelper.GetString("ClearCacheException")}\n{ex.Message}");
Log.Error(ex, "Failed to clear cache");
ShowGrowl($"{LocalizationHelper.GetString("ClearImageCacheException")}\n{ex.Message}");
Log.Error(ex, "Failed to clear image cache");
}
}
/// <summary>
/// 删除指定目录及其子目录中的所有图片文件。
/// </summary>
private static int DeleteImageFiles(string dir, HashSet<string> imageExtensions)
{
int deletedCount = 0;
foreach (var file in Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories))
{
string extension = Path.GetExtension(file);
if (imageExtensions.Contains(extension))
{
try
{
File.Delete(file);
deletedCount++;
}
catch (Exception ex)
{
Log.Warning(ex, $"Failed to delete image file: {file}");
}
}
}
return deletedCount;
}
/// <summary>
/// 生成日志压缩包
/// </summary>
@@ -245,6 +287,7 @@ public class IssueReportUserControlModel : PropertyChangedBase
}
}
/*
/// <summary>
/// 删除目录下的所有文件和子目录,排除指定的文件名。
/// </summary>
@@ -266,6 +309,7 @@ public class IssueReportUserControlModel : PropertyChangedBase
Directory.Delete(subDir, recursive: true);
}
}
*/
/// <summary>
/// 从 sourceDir 复制文件到 targetDir支持过滤。

View File

@@ -41,67 +41,58 @@
TextWrapping="Wrap"
Visibility="{c:Binding 'NewVersionFoundInfo.Length + NewResourceFoundInfo.Length == 0',
Source={x:Static ui_vms:SettingsViewModel.VersionUpdateSettings}}" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<controls:TextBlock
Grid.Row="0"
<StackPanel
Grid.Column="0"
Margin="5,0"
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding Source={x:Static constants:MaaUrls.HelpUri}}"
TextDecorations="None">
<TextBlock Text="{DynamicResource Help}" />
</Hyperlink>
</controls:TextBlock>
<controls:TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="5,0"
<controls:TextBlock Margin="5" HorizontalAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding Source={x:Static constants:MaaUrls.HelpUri}}"
TextDecorations="None">
<TextBlock Text="{DynamicResource Help}" />
</Hyperlink>
</controls:TextBlock>
<controls:TextBlock Margin="5" HorizontalAlignment="Center">
<Hyperlink
Command="{s:Action SetAcknowledgedNightlyWarning}"
Cursor="Hand"
NavigateUri="{Binding Source={x:Static constants:MaaUrls.GitHubIssues}}"
TextDecorations="None">
<TextBlock Text="{DynamicResource Issue}" />
</Hyperlink>
</controls:TextBlock>
</StackPanel>
<StackPanel
Grid.Column="1"
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Hyperlink
Command="{s:Action SetAcknowledgedNightlyWarning}"
Cursor="Hand"
NavigateUri="{Binding Source={x:Static constants:MaaUrls.GitHubIssues}}"
TextDecorations="None">
<TextBlock Text="{DynamicResource Issue}" />
</Hyperlink>
</controls:TextBlock>
<Button
Grid.Row="0"
Grid.Column="1"
Width="Auto"
Margin="5,2"
Command="{s:Action GenerateSupportPayload}"
Content="{DynamicResource GenerateSupportPayload}" />
<Button
Grid.Row="1"
Grid.Column="1"
Width="Auto"
Margin="5,2"
Command="{s:Action OpenDebugFolder}"
Content="{DynamicResource OpenDebugFolder}" />
<Button
Grid.Row="2"
Grid.Column="1"
Width="Auto"
Margin="5,2"
Command="{s:Action ClearCache,
Target={x:Type settings_vms:IssueReportUserControlModel}}"
Content="{DynamicResource ClearCache}" />
<Button
Margin="5,2"
HorizontalAlignment="Left"
Command="{s:Action GenerateSupportPayload}"
Content="{DynamicResource GenerateSupportPayload}" />
<Button
Margin="5,2"
HorizontalAlignment="Left"
Command="{s:Action OpenDebugFolder}"
Content="{DynamicResource OpenDebugFolder}" />
<StackPanel Margin="5,2" Orientation="Horizontal">
<Button
HorizontalAlignment="Left"
Command="{s:Action ClearImageCache,
Target={x:Type settings_vms:IssueReportUserControlModel}}"
Content="{DynamicResource ClearImageCache}" />
<controls:TooltipBlock TooltipText="{DynamicResource ClearImageCacheTip}" />
</StackPanel>
</StackPanel>
</Grid>
</StackPanel>
</UserControl>