diff --git a/src/ElectronBot.BraincasePreview/Constants.cs b/src/ElectronBot.BraincasePreview/Constants.cs index de9fa6a..55a4c77 100644 --- a/src/ElectronBot.BraincasePreview/Constants.cs +++ b/src/ElectronBot.BraincasePreview/Constants.cs @@ -13,6 +13,8 @@ public class Constants public const string EmojisFolder = "EmojisAction"; + public const string EmojisTempFileFolder = "EmojisFileTemp"; + public const string CustomClockTitleConfigKey = "CustomClockTitleConfigKey"; public const string DefaultCameraNameKey = "DefaultCameraNameKey"; diff --git a/src/ElectronBot.BraincasePreview/Strings/en-us/Resources.resw b/src/ElectronBot.BraincasePreview/Strings/en-us/Resources.resw index b0b0b02..e2a4d65 100644 --- a/src/ElectronBot.BraincasePreview/Strings/en-us/Resources.resw +++ b/src/ElectronBot.BraincasePreview/Strings/en-us/Resources.resw @@ -593,4 +593,7 @@ 导出表情文件 + + 导入表情 + \ No newline at end of file diff --git a/src/ElectronBot.BraincasePreview/Strings/zh-cn/Resources.resw b/src/ElectronBot.BraincasePreview/Strings/zh-cn/Resources.resw index 0bf0d5d..e0a582d 100644 --- a/src/ElectronBot.BraincasePreview/Strings/zh-cn/Resources.resw +++ b/src/ElectronBot.BraincasePreview/Strings/zh-cn/Resources.resw @@ -594,6 +594,9 @@ 电子动作时间轴 - 导出表情文件 + 导出表情 + + + 导入表情 \ No newline at end of file diff --git a/src/ElectronBot.BraincasePreview/ViewModels/EmojisEditViewModel.cs b/src/ElectronBot.BraincasePreview/ViewModels/EmojisEditViewModel.cs index 7a64ee1..0248425 100644 --- a/src/ElectronBot.BraincasePreview/ViewModels/EmojisEditViewModel.cs +++ b/src/ElectronBot.BraincasePreview/ViewModels/EmojisEditViewModel.cs @@ -9,7 +9,8 @@ using ElectronBot.BraincasePreview.Controls; using ElectronBot.BraincasePreview.Helpers; using ElectronBot.BraincasePreview.Models; using Microsoft.UI.Xaml.Controls; -using Services; +using Models; +using Verdure.ElectronBot.Core.Helpers; using Windows.ApplicationModel; using Windows.Storage; @@ -49,6 +50,9 @@ public partial class EmojisEditViewModel : ObservableRecipient private readonly ILocalSettingsService _localSettingsService; private readonly IEmojisFileService _emojisFileService; + + + private readonly IntPtr _hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow); public EmojisEditViewModel(IActionExpressionProvider actionExpressionProvider, ILocalSettingsService localSettingsService, IEmojisFileService emojisFileService) @@ -86,6 +90,110 @@ public partial class EmojisEditViewModel : ObservableRecipient } } + /// + /// 导入表情文件 + /// + [RelayCommand] + public async Task ImportEmojisFileAsync() + { + try + { + var picker = new Windows.Storage.Pickers.FileOpenPicker + { + ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail, + + SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Downloads + }; + + picker.FileTypeFilter.Add(".zip"); + + WinRT.Interop.InitializeWithWindow.Initialize(picker, _hwnd); + + var file = await picker.PickSingleFileAsync(); + + if (file != null) + { + var folder = ApplicationData.Current.LocalFolder; + + var storageFolder = await folder.CreateFolderAsync(Constants.EmojisTempFileFolder, CreationCollisionOption.OpenIfExists); + + ZipFileCreatorHelper.ExtractZipFile(file.Path, storageFolder.Path); + + var fileNames = await storageFolder.GetFilesAsync(); + + var nameId = string.Empty; + + var action = new EmoticonAction(); + + if (fileNames != null && fileNames.Count > 0) + { + foreach (var fileItem in fileNames) + { + if (fileItem.Name.Contains("manifest")) + { + var text = await FileIO.ReadTextAsync(fileItem); + + var emojisFileInfo = JsonSerializer.Deserialize(text) ?? throw new Exception("表情不存在"); + action.Name = emojisFileInfo.Name; + action.NameId = emojisFileInfo.NameId; + action.Desc = emojisFileInfo.Description; + action.EmojisType = emojisFileInfo.EmojisType; + action.HasAction = emojisFileInfo.HasAction; + } + else + { + if (fileItem.FileType == ".mp4") + { + action.EmojisVideoPath = fileItem.Path; + } + else if (fileItem.FileType == ".png" || + fileItem.FileType == ".jpg" || + fileItem.FileType == ".jpeg") + { + action.Avatar = fileItem.Path; + } + else if (fileItem.FileType == ".json") + { + action.EmojisActionPath = fileItem.Path; + } + + //var actionFolder = await folder.CreateFolderAsync(Constants.EmojisFolder, CreationCollisionOption.OpenIfExists); + + //var storageFile = await actionFolder + // .CreateFileAsync(fileItem.Name, CreationCollisionOption.FailIfExists); + + //await FileIO.WriteBytesAsync(storageFile, await fileItem.ReadBytesAsync()); + } + } + + + + var list = (await _localSettingsService + .ReadSettingAsync>(Constants.EmojisActionListKey)) ?? new List(); + + if (list.Where(e => e.NameId == nameId).Any() || Constants.EMOJI_ACTION_LIST.Where(e => e.NameId == nameId).Any()) + { + ToastHelper.SendToast("EmojisNameIdAlreadyExists".GetLocalized(), TimeSpan.FromSeconds(3)); + + return; + } + var actions = new List() + { + action + }; + + list.AddRange(actions); + + await _localSettingsService.SaveSettingAsync>(Constants.EmojisActionListKey, list); + } + } + } + catch (Exception ex) + { + ToastHelper.SendToast($"导入失败-{ex.Message}", TimeSpan.FromSeconds(3)); + } + } + [RelayCommand] public async void DelEmojis(object? obj) { diff --git a/src/ElectronBot.BraincasePreview/Views/EmojisEditPage.xaml b/src/ElectronBot.BraincasePreview/Views/EmojisEditPage.xaml index dc3e62c..9170a93 100644 --- a/src/ElectronBot.BraincasePreview/Views/EmojisEditPage.xaml +++ b/src/ElectronBot.BraincasePreview/Views/EmojisEditPage.xaml @@ -59,8 +59,22 @@ - + + + + + + + Glyph="" />