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="" />