private void OpenKFNMenuItem_Click(object sender, RoutedEventArgs e) { if (OpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { viewConfigButton.IsEnabled = false; KFN = new KFN(OpenFileDialog.FileName); if (KFN.isError != null) { System.Windows.MessageBox.Show(KFN.isError); return; } MainWindowElement.Title = this.windowTitle + " - " + KFN.FullFileName; this.UpdateKFN(); viewConfigButton.IsEnabled = true; toEMZMenu.IsEnabled = true; toMP3LRCMenu.IsEnabled = true; toKFNMenu.IsEnabled = true; KFN.ResourceFile encResource = KFN.Resources.Where(r => r.IsEncrypted == true).FirstOrDefault(); if (encResource != null) { decryptKFN.IsEnabled = true; } } }
private void ExportResourceToFile(KFN.ResourceFile resource, string folder) { byte[] data = KFN.GetDataFromResource(resource); using (FileStream fs = new FileStream(folder + "\\" + resource.FileName, FileMode.Create, FileAccess.Write)) { fs.Write(data, 0, data.Length); } }
private void ParseINI(KFN KFN) { KFN.ResourceFile resource = KFN.Resources.Where(r => r.FileName == "Song.ini").First(); byte[] data = KFN.GetDataFromResource(resource); string iniText = new string(Encoding.UTF8.GetChars(data)); SongINI sINI = new SongINI(iniText); iniBlocksView.ItemsSource = sINI.Blocks; this.AutoSizeColumns(iniBlocksView.View as GridView); }
private string GetResourceText(KFN.ResourceFile resource) { byte[] data = KFN.GetDataFromResource(resource); ////UTF-8 int detEncoding = 65001; UniversalDetector Det = new UniversalDetector(null); Det.HandleData(data, 0, data.Length); Det.DataEnd(); string enc = Det.GetDetectedCharset(); if (enc != null && enc != "Not supported") { // fix encoding for 1251 upper case and MAC //if (enc == "KOI8-R" || enc == "X-MAC-CYRILLIC") { enc = "WINDOWS-1251"; } Encoding denc = Encoding.GetEncoding(enc); detEncoding = denc.CodePage; } return(new string(Encoding.GetEncoding(detEncoding).GetChars(data))); }
private void resourcesViewContext(object sender, ContextMenuEventArgs e) { KFN.ResourceFile resource = resourcesView.SelectedItem as KFN.ResourceFile; System.Windows.Controls.ContextMenu rvcontext = resourcesView.ContextMenu; if (rvcontext.Items.Count > 1) { while (rvcontext.Items.Count > 1) { rvcontext.Items.RemoveAt(1); } } if (resource.FileType == "Text" || resource.FileType == "Image") { System.Windows.Controls.MenuItem viewItem = new System.Windows.Controls.MenuItem() { Header = "View" }; viewItem.Click += ViewResourceButtonClick; rvcontext.Items.Add(viewItem); } }
private void ExportResourceButtonClick(object sender, RoutedEventArgs e) { KFN.ResourceFile resource = resourcesView.SelectedItem as KFN.ResourceFile; FolderBrowserDialog.SelectedPath = new FileInfo(KFN.FullFileName).DirectoryName; if (FolderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string exportFolder = FolderBrowserDialog.SelectedPath; try { System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(exportFolder); } catch (UnauthorizedAccessException error) { System.Windows.MessageBox.Show(error.Message); return; } ExportResourceToFile(resource, exportFolder); System.Windows.MessageBox.Show("Export OK: " + exportFolder + "\\" + resource.FileName); } }
public void ViewResourceButtonClick(object sender, RoutedEventArgs e) { KFN.ResourceFile resource = resourcesView.SelectedItem as KFN.ResourceFile; if (resource.FileType == "Text") { byte[] data = KFN.GetDataFromResource(resource); ////UTF-8 int detEncoding = 65001; UniversalDetector Det = new UniversalDetector(null); Det.HandleData(data, 0, data.Length); Det.DataEnd(); string enc = Det.GetDetectedCharset(); if (enc != null && enc != "Not supported") { // fix encoding for 1251 upper case and MAC //if (enc == "KOI8-R" || enc == "X-MAC-CYRILLIC") { enc = "WINDOWS-1251"; } Encoding denc = Encoding.GetEncoding(enc); detEncoding = denc.CodePage; } string text = new string(Encoding.GetEncoding(detEncoding).GetChars(data)); Window viewWindow = new ViewWindow( resource.FileName, text, Encoding.GetEncodings().Where(en => en.CodePage == detEncoding).First().DisplayName ); viewWindow.Show(); } else if (resource.FileType == "Image") { byte[] data = KFN.GetDataFromResource(resource); Window viewWindow = new ImageWindow(resource.FileName, data); viewWindow.Show(); } }
public ExportWindow(string exportType, KFN KFN) { InitializeComponent(); WindowElement.Title += exportType; this.KFN = KFN; this.exportType = exportType; videoLabel.Visibility = (exportType == "EMZ") ? Visibility.Visible : Visibility.Hidden; videoSelect.Visibility = (exportType == "EMZ") ? Visibility.Visible : Visibility.Hidden; playVideoButton.Visibility = (exportType == "EMZ") ? Visibility.Visible : Visibility.Hidden; deleteID3Tags.IsChecked = true; deleteID3Tags.Visibility = (exportType == "MP3+LRC") ? Visibility.Visible : Visibility.Hidden; artistLabel.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; titleLabel.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; artistSelect.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; titleSelect.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; encLabel.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; encSelect.Visibility = (exportType != "EMZ") ? Visibility.Visible : Visibility.Hidden; // TODO playVideoButton.IsEnabled = false; playAudioButton.IsEnabled = false; // AUDIO List <KFN.ResourceFile> audios = KFN.Resources.Where(r => r.FileType == "Audio").ToList(); string audioSource = KFN.GetAudioSourceName(); audioSelect.ItemsSource = audios; audioSelect.DisplayMemberPath = "FileName"; audioSelect.SelectedItem = audios.Where(a => a.FileName == audioSource).FirstOrDefault(); if (audioSelect.SelectedItem == null) { System.Windows.MessageBox.Show("Can`t find audio source!"); return; } if (audios.Count == 1) { audioSelect.IsEnabled = false; } // LYRICS Dictionary <string, string> lyrics = new Dictionary <string, string>(); List <KFN.ResourceFile> texts = KFN.Resources.Where(r => r.FileType == "Text").ToList(); foreach (KFN.ResourceFile resource in texts) { lyrics.Add(resource.FileName, this.GetResourceText(resource)); } KFN.ResourceFile songIni = KFN.Resources.Where(r => r.FileName == "Song.ini").First(); byte[] data = KFN.GetDataFromResource(songIni); string iniText = new string(Encoding.UTF8.GetChars(data)); SongINI sINI = new SongINI(iniText); foreach (SongINI.BlockInfo block in sINI.Blocks.Where(b => b.Id == "1" || b.Id == "2")) { string lyricFromBlock = (exportType == "EMZ") ? KFN.INIToELYR(block.Content) : KFN.INIToExtLRC(block.Content); if (lyricFromBlock != null) { lyrics.Add("Song.ini: " + block.Name, lyricFromBlock); } else { lyrics.Add("Song.ini: " + block.Name, "Can`t convert lyric from Song.ini"); } } lyricSelect.DisplayMemberPath = "Key"; lyricSelect.SelectedIndex = 0; if (lyrics.Count == 1) { lyricSelect.IsEnabled = false; } lyricSelect.ItemsSource = lyrics; lyricPreview.Text = ((KeyValuePair <string, string>)lyricSelect.SelectedItem).Value; // ARTIST-TITLE if (exportType == "MP3+LRC") { List <string> artists = new List <string> { null }; List <string> titles = new List <string> { null }; KeyValuePair <string, string> kfnArtist = KFN.Properties.Where(p => p.Key == "Artist").FirstOrDefault(); if (kfnArtist.Value != null && kfnArtist.Value.Length > 0) { artists.Add(kfnArtist.Value); } KeyValuePair <string, string> kfnTitle = KFN.Properties.Where(p => p.Key == "Title").FirstOrDefault(); if (kfnTitle.Value != null && kfnTitle.Value.Length > 0) { titles.Add(kfnTitle.Value); } foreach (KFN.ResourceFile resource in KFN.Resources.Where(r => r.FileType == "Audio")) { string[] atFromID3 = ID3Class.GetArtistAndTitle(KFN.GetDataFromResource(resource)); if (atFromID3[0] != null) { artists.Add(atFromID3[0]); } if (atFromID3[1] != null) { titles.Add(atFromID3[1]); } } artists = artists.Distinct().ToList(); titles = titles.Distinct().ToList(); artistSelect.ItemsSource = artists; artistSelect.SelectedIndex = 0; titleSelect.ItemsSource = titles; titleSelect.SelectedIndex = 0; encSelect.ItemsSource = this.encodings; encSelect.DisplayMemberPath = "Value"; encSelect.SelectedIndex = 0; } // VIDEO if (exportType == "EMZ") { List <KFN.ResourceFile> videos = KFN.Resources.Where(r => r.FileType == "Video").ToList(); if (videos.Count == 0) { videos.Add(new KFN.ResourceFile("Video", "video not found", 0, 0, 0, false)); videoSelect.IsEnabled = false; } else { videos.Add(new KFN.ResourceFile("Video", "don`t use video", 0, 0, 0, false)); } videoSelect.ItemsSource = videos; videoSelect.DisplayMemberPath = "FileName"; videoSelect.SelectedIndex = 0; } }
private void ExportButton_Click(object sender, RoutedEventArgs e) { KFN.ResourceFile audio = (KFN.ResourceFile)audioSelect.SelectedItem; if (audio == null) { return; } string lyric = lyricPreview.Text; if (lyric.Length == 0 || lyric.Contains("Can`t convert lyric from Song.ini")) { return; } FileInfo kfnFile = new FileInfo(KFN.FullFileName); FolderBrowserDialog.SelectedPath = kfnFile.DirectoryName; if (FolderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string exportFolder = FolderBrowserDialog.SelectedPath; try { System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(exportFolder); } catch (UnauthorizedAccessException error) { System.Windows.MessageBox.Show(error.Message); return; } if (this.exportType == "EMZ") { KFN.ResourceFile video = (KFN.ResourceFile)videoSelect.SelectedItem; byte[] fileData = KFN.createEMZ(lyric, video.FileLength > 0, video, audio); if (fileData == null) { System.Windows.MessageBox.Show((KFN.isError != null) ? KFN.isError : "Fail to create EMZ!"); return; } string emzFileName = kfnFile.Name.Substring(0, kfnFile.Name.Length - kfnFile.Extension.Length) + ".emz"; using (FileStream fs = new FileStream(exportFolder + "\\" + emzFileName, FileMode.Create, FileAccess.Write)) { fs.Write(fileData, 0, fileData.Length); } System.Windows.MessageBox.Show("Export OK: " + exportFolder + "\\" + emzFileName); } else if (this.exportType == "MP3+LRC") { FileInfo audioFile = new FileInfo(audio.FileName); string mp3FileName = kfnFile.Name.Substring(0, kfnFile.Name.Length - kfnFile.Extension.Length) + audioFile.Extension; string lrcFileName = kfnFile.Name.Substring(0, kfnFile.Name.Length - kfnFile.Extension.Length) + ".lrc"; byte[] mp3Data = KFN.GetDataFromResource(audio); if (deleteID3Tags.IsChecked == true) { mp3Data = ID3Class.RemoveAllTags(mp3Data); } using (FileStream fs = new FileStream(exportFolder + "\\" + mp3FileName, FileMode.Create, FileAccess.Write)) { fs.Write(mp3Data, 0, mp3Data.Length); } int encCode = ((KeyValuePair <int, string>)encSelect.SelectedItem).Key; Encoding lrcEnc = (encCode == 0) ? Encoding.Default : Encoding.GetEncoding(encCode); byte[] lrcData = lrcEnc.GetBytes(lyric); byte[] bom = lrcEnc.GetPreamble(); using (FileStream fs = new FileStream(exportFolder + "\\" + lrcFileName, FileMode.Create, FileAccess.Write)) { fs.Write(bom, 0, bom.Length); fs.Write(lrcData, 0, lrcData.Length); } System.Windows.MessageBox.Show("Export OK: " + exportFolder + "\\" + mp3FileName); } } }