예제 #1
0
        /// <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();
        }
예제 #3
0
        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);
        }
예제 #4
0
        public void FileFiltersByType()
        {
            var kore = new KoreManager(".");

            var filters = kore.FileFiltersByType <ILoadFiles>();

            Assert.IsTrue(filters.Contains("TestPlugin (*.test)|*.test"));
        }
예제 #5
0
        public void FileExtensionsByType()
        {
            var kore = new KoreManager(".");

            var exts = kore.FileExtensionsByType <ILoadFiles>();

            Assert.IsTrue(exts.Contains(".test"));
        }
예제 #6
0
        public void GetAdapters()
        {
            var kore = new KoreManager(".");

            var list = kore.GetAdapters <ILoadFiles>().Where(x => x is ITest);

            Assert.IsTrue(list.Any());
        }
예제 #7
0
        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();
        }
예제 #8
0
        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();
        }
예제 #9
0
        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;