/// <summary> /// Imports the text from any supported text file into the adapter provided. /// </summary> /// <param name="kore">An instance of kore that will be used to load the input file.</param> /// <param name="adapter">The adapter that will be imported into.</param> /// <param name="inputFileName">The input file to be imported from.</param> public static bool ImportFile(this KoreManager kore, ITextAdapter adapter, string inputFileName) { var result = false; //TODO var kfi = kore.LoadFile(new KoreLoadInfo(File.Open(inputFileName, FileMode.Open), inputFileName) { TrackFile = false }); if (!(kfi.Adapter is ITextAdapter inAdapter)) { return(false); } foreach (var inEntry in inAdapter.Entries) { var entry = adapter.Entries.FirstOrDefault(e => e.Name == inEntry.Name); if (entry == null || entry.EditedText == inEntry.EditedText) { continue; } entry.EditedText = inEntry.EditedText; result = true; } return(result); }
// Constructor public TextEditor2ViewModel(KoreManager kore, KoreFileInfo koreFile) { _kore = kore; KoreFile = koreFile; _adapter = KoreFile.Adapter as ITextAdapter; GameAdapters = _kore.GetAdapters <IGameAdapter>().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "84D2BD62-7AC6-459B-B3BB-3A65855135F6") ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "B344166C-F1BE-49B2-9ADC-38771D0A15DA") ?? GameAdapters.First(); SelectedZoomLevel = 1; } // Direct entry loading is now dead since GameAdapters have become a thing //if (_adapter != null) // Entries = new ObservableCollection<TextEntry>(_adapter.Entries); SelectedEntry = Entries?.FirstOrDefault(); }
public void SaveAsOtherDirectory() { var kore = new KoreManager("."); var kfi = kore.LoadFile(new KoreLoadInfo(File.Open(_testFile, FileMode.Open), _testFile) { FileSystem = new PhysicalFileSystem(Path.GetFullPath(@"..\..\TestFiles\")) }); Assert.IsNotNull(kfi); Assert.IsTrue(kfi.Adapter is ITest); Assert.IsTrue((kfi.Adapter as ITest).Communication.Contains("string1")); Assert.IsTrue((kfi.Adapter as ITest).Communication.Contains("string2")); var savedKfi = kore.SaveFile(new KoreSaveInfo(kfi, @"..\..\temp\") { NewSaveFile = @"..\..\TestFiles\SaveAsLocation\newmain.test" }); Assert.IsFalse((savedKfi.Adapter as ITest).Communication.Contains("string3")); var closeResult = kore.CloseFile(savedKfi); Assert.IsTrue(closeResult); Assert.IsFalse(kore.OpenFiles.Contains(kfi)); Assert.IsFalse(kore.OpenFiles.Contains(savedKfi)); Assert.AreEqual(4, new FileInfo(_testFile).Length); Assert.AreEqual(4, new FileInfo(_metaFile).Length); }
public void FileFiltersByType() { var kore = new KoreManager("."); var filters = kore.FileFiltersByType <ILoadFiles>(); Assert.IsTrue(filters.Contains("TestPlugin (*.test)|*.test")); }
public void FileExtensionsByType() { var kore = new KoreManager("."); var exts = kore.FileExtensionsByType <ILoadFiles>(); Assert.IsTrue(exts.Contains(".test")); }
public void GetAdapters() { var kore = new KoreManager("."); var list = kore.GetAdapters <ILoadFiles>().Where(x => x is ITest); Assert.IsTrue(list.Any()); }
public Kuriimu2() { InitializeComponent(); _timer = new Timer { Interval = 14 }; _timer.Tick += _timer_Tick; _globalOperationWatch = new Stopwatch(); Icon = Resources.kuriimu2winforms; _kore = new KoreManager(); tabCloseButtons.Images.Add(Resources.menu_delete); tabCloseButtons.Images.SetKeyName(0, "close-button"); LoadExtensions(); //LoadImageView(); }
public void SaveAsSameDirectory() { var kore = new KoreManager("."); var kfi = kore.LoadFile(new KoreLoadInfo(File.Open(_testFile, FileMode.Open), _testFile) { FileSystem = new PhysicalFileSystem(Path.GetFullPath(@"..\..\TestFiles\")) }); Assert.IsNotNull(kfi); Assert.IsTrue(kfi.Adapter is ITest); Assert.IsTrue((kfi.Adapter as ITest).Communication.Contains("string1")); Assert.IsTrue((kfi.Adapter as ITest).Communication.Contains("string2")); var savedKfi = kore.SaveFile(new KoreSaveInfo(kfi, @"..\..\temp\") { NewSaveFile = _testFile }); Assert.IsFalse((savedKfi.Adapter as ITest).Communication.Contains("string3")); var closeResult = kore.CloseFile(savedKfi); Assert.IsTrue(closeResult); Assert.IsFalse(kore.OpenFiles.Contains(kfi)); Assert.IsFalse(kore.OpenFiles.Contains(savedKfi)); Assert.AreEqual(6, new FileInfo(_testFile).Length); Assert.AreEqual(6, new FileInfo(_metaFile).Length); var t = File.OpenRead(_testFile); var m = File.OpenRead(_metaFile); Assert.IsTrue(new BinaryReader(t).ReadBytes(6).SequenceEqual(new byte[] { 0x16, 0x16, 0x16, 0x16, 0x32, 0x32 })); Assert.IsTrue(new BinaryReader(m).ReadBytes(6).SequenceEqual(new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 })); t.Close(); m.Close(); RestoreTestFile(); }
public async Task <bool> Export(KoreManager kore, IProgress <ProgressReport> progress) { if (kore == null) { progress.Report(new ProgressReport { Message = "Kore was not initialized.", Percentage = 0 }); return(false); } if (InputDirectory == string.Empty) { progress.Report(new ProgressReport { Message = "An input directory was not provided.", Percentage = 0 }); return(false); } if (!Directory.Exists(InputDirectory)) { progress.Report(new ProgressReport { Message = "The input directory provided doesn't exist.", Percentage = 0 }); return(false); } if (OutputDirectory != string.Empty && !Directory.Exists(OutputDirectory)) { progress.Report(new ProgressReport { Message = "The output directory provided doesn't exist.", Percentage = 0 }); return(false); } IEnumerable <string> patterns; // = SearchPattern.Trim() != string.Empty ? SearchPattern.Trim() : ""; IList <string> files; var max = 0.0; var current = 0.0; switch (typeof(T).Name) { //case nameof(ITextAdapter): // patterns = kore.FileExtensionsByType<ITextAdapter>(); // files = Directory.EnumerateFiles(InputDirectory, "*", SearchOption).Where(f => patterns.Any(p => f.EndsWith(p, StringComparison.OrdinalIgnoreCase))).ToList(); // max = files.Count; // foreach (var file in files) // { // await Task.Run(() => // { // try // { // var outFile = file + Utilities.Common.GetAdapterExtension<KupAdapter>(); // //TODO // Utilities.Text.ExportFile((ITextAdapter)kore.LoadFile(new KoreLoadInfo(File.Open(file, FileMode.Open), file) { TrackFile = false }).Adapter, outFile); // current++; // progress.Report(new ProgressReport { Message = $"Exported {Path.GetFileName(outFile)}...", Percentage = current / max * 100, Data = ((int)current, (int)max) }); // } // catch (Exception e) // { // current++; // progress.Report(new ProgressReport { Percentage = current / max * 100 }); // } // }); // } // break; case nameof(IImageAdapter): patterns = kore.FileExtensionsByType <IImageAdapter>(); files = Directory.EnumerateFiles(InputDirectory, "*", SearchOption).Where(f => patterns.Any(p => f.EndsWith(p, StringComparison.OrdinalIgnoreCase))).ToList(); max = files.Count; foreach (var file in files) { await Task.Run(() => { try { // TODO: Make an image export utility function out of this code //TODO var kfi = kore.LoadFile(new KoreLoadInfo(File.Open(file, FileMode.Open), file) { TrackFile = false }); var adapter = (IImageAdapter)kfi.Adapter; foreach (var info in adapter.BitmapInfos) { if (info.MipMapCount <= 1) { info.Image.Save(file + $".{info.Name.Replace(" ", "_")}.{adapter.BitmapInfos.IndexOf(info)}.png", ImageFormat.Png); } else { foreach (var bitmap in info.MipMaps) { bitmap.Save(file + $".{info.Name.Replace(" ", "_")}.{adapter.BitmapInfos.IndexOf(info)}.{info.MipMaps.IndexOf(bitmap)}.png", ImageFormat.Png); } } } current++; progress.Report(new ProgressReport { Message = $"Exported {Path.GetFileName(file)}.png...", Percentage = current / max * 100, Data = ((int)current, (int)max) }); } catch (Exception e) { current++; progress.Report(new ProgressReport { Percentage = current / max * 100 }); } }); } break;