diff --git a/FModel/Enums.cs b/FModel/Enums.cs index 2e924931..df3f28b8 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -27,6 +27,7 @@ { Path, PathNoExt, + PathNoFile, File, FileNoExt } diff --git a/FModel/MainWindow.xaml b/FModel/MainWindow.xaml index c218fb65..2c52257b 100644 --- a/FModel/MainWindow.xaml +++ b/FModel/MainWindow.xaml @@ -210,6 +210,11 @@ + + + + + diff --git a/FModel/MainWindow.xaml.cs b/FModel/MainWindow.xaml.cs index e2164cf9..71197783 100644 --- a/FModel/MainWindow.xaml.cs +++ b/FModel/MainWindow.xaml.cs @@ -385,6 +385,11 @@ namespace FModel if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) await SortedTreeviewVm.ExtractFolder(treeItem).ConfigureAwait(false); } + private void FModel_MI_Directory_Save_Click(object sender, RoutedEventArgs e) + { + if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) + MenuItems.AddCustomGoTo(treeItem.Header, treeItem.GetFullPath().Substring(1) + "/"); + } private async void CM_Asset_Save_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) @@ -403,28 +408,28 @@ namespace FModel { if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) Assets.Copy(treeItem.GetFullPath().Substring(1) + "/"); - else if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel listItem) - Assets.Copy(listItem.PakEntry.GetPathWithoutFile()); + else if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) + Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.PathNoFile); } private void CM_Copy_FPath_Click(object sender, RoutedEventArgs e) { - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) - Assets.Copy(selectedItem.PakEntry, ECopy.Path); + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) + Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.Path); } private void CM_Copy_FName_Click(object sender, RoutedEventArgs e) { - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) - Assets.Copy(selectedItem.PakEntry, ECopy.File); + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) + Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.File); } private void CM_Copy_FPath_NoExt_Click(object sender, RoutedEventArgs e) { - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) - Assets.Copy(selectedItem.PakEntry, ECopy.PathNoExt); + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) + Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.PathNoExt); } private void CM_Copy_FName_NoExt_Click(object sender, RoutedEventArgs e) { - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) - Assets.Copy(selectedItem.PakEntry, ECopy.FileNoExt); + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) + Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.FileNoExt); } #endregion } diff --git a/FModel/Properties/Resources.Designer.cs b/FModel/Properties/Resources.Designer.cs index 8c5020b1..3b8f4043 100644 --- a/FModel/Properties/Resources.Designer.cs +++ b/FModel/Properties/Resources.Designer.cs @@ -2241,6 +2241,15 @@ namespace FModel.Properties { } } + /// + /// Recherche une chaîne localisée semblable à Save Directory. + /// + public static string SaveDirectory { + get { + return ResourceManager.GetString("SaveDirectory", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à Save Image. /// diff --git a/FModel/Properties/Resources.fr-FR.resx b/FModel/Properties/Resources.fr-FR.resx index d5820cec..498e1a37 100644 --- a/FModel/Properties/Resources.fr-FR.resx +++ b/FModel/Properties/Resources.fr-FR.resx @@ -850,4 +850,7 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite. Utiliser Discord RPC + + Sauvegarder le Répertoire + \ No newline at end of file diff --git a/FModel/Properties/Resources.it-IT.resx b/FModel/Properties/Resources.it-IT.resx index 16e9709f..1679c1a2 100644 --- a/FModel/Properties/Resources.it-IT.resx +++ b/FModel/Properties/Resources.it-IT.resx @@ -808,4 +808,7 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia Usa Discord RPC + + Salva Directory + \ No newline at end of file diff --git a/FModel/Properties/Resources.resx b/FModel/Properties/Resources.resx index e4ae367d..c9e283d8 100644 --- a/FModel/Properties/Resources.resx +++ b/FModel/Properties/Resources.resx @@ -1085,4 +1085,7 @@ It's now the most used free software to leak on Fortnite. Use Discord RPC Should Discord Rich Presence be enabled? + + Save Directory + \ No newline at end of file diff --git a/FModel/Utils/Assets.cs b/FModel/Utils/Assets.cs index 6c1c2206..01ba98f5 100644 --- a/FModel/Utils/Assets.cs +++ b/FModel/Utils/Assets.cs @@ -22,6 +22,8 @@ using FModel.ViewModels.Buttons; using System.Threading; using static FModel.Creator.Creator; using SkiaSharp; +using System.Text; +using FModel.ViewModels.DataGrid; namespace FModel.Utils { @@ -379,7 +381,26 @@ namespace FModel.Utils } } - public static void Copy(FPakEntry entry, ECopy mode) + public static void Copy(IList entries, ECopy mode) + { + StringBuilder sb = new StringBuilder(); + if (entries[0] is ListBoxViewModel) + { + foreach (ListBoxViewModel selectedItem in entries) + { + sb.AppendLine(Copy(selectedItem.PakEntry, mode)); + } + } + else if (entries[0] is DataGridViewModel) + { + foreach (DataGridViewModel selectedItem in entries) + { + sb.AppendLine(Copy(selectedItem.Name, mode)); + } + } + Copy(sb.ToString().Trim()); + } + public static string Copy(FPakEntry entry, ECopy mode) { if (Globals.CachedPakFiles.TryGetValue(entry.PakFileName, out var r)) { @@ -388,27 +409,30 @@ namespace FModel.Utils toCopy += entry.Name; else if (mode == ECopy.PathNoExt) toCopy += entry.GetPathWithoutExtension(); + else if (mode == ECopy.PathNoFile) + toCopy += entry.GetPathWithoutFile(); else if (mode == ECopy.File) toCopy = entry.GetNameWithExtension(); else if (mode == ECopy.FileNoExt) toCopy = entry.GetNameWithoutExtension(); - - Copy(toCopy); + return toCopy; } + return string.Empty; } - public static void Copy(string fullPath, ECopy mode) + public static string Copy(string fullPath, ECopy mode) { string toCopy = string.Empty; if (mode == ECopy.Path) toCopy = fullPath; else if (mode == ECopy.PathNoExt) toCopy = fullPath.Substring(0, fullPath.LastIndexOf(".")); + else if (mode == ECopy.PathNoFile) + toCopy = fullPath.Substring(0, fullPath.LastIndexOf("/") + 1); else if (mode == ECopy.File) toCopy = fullPath.Substring(fullPath.LastIndexOf("/") + 1); else if (mode == ECopy.FileNoExt) toCopy = fullPath.Substring(fullPath.LastIndexOf("/") + 1, fullPath.LastIndexOf(".") - (fullPath.LastIndexOf("/") + 1)); - - Copy(toCopy); + return toCopy; } public static void Copy(string toCopy) { diff --git a/FModel/Utils/Folders.cs b/FModel/Utils/Folders.cs index 5ffe76c8..05124eee 100644 --- a/FModel/Utils/Folders.cs +++ b/FModel/Utils/Folders.cs @@ -40,10 +40,10 @@ namespace FModel.Utils _ => string.Empty, }; - /// - /// if OutputPath is empty the .Exe directory will be OutputPath - /// - private static void FixNoOutputPath() + /// + /// if OutputPath is empty the .Exe directory will be OutputPath + /// + private static void FixNoOutputPath() { if (string.IsNullOrEmpty(Properties.Settings.Default.OutputPath)) { diff --git a/FModel/ViewModels/MenuItem/GotoMenuItemViewModel.cs b/FModel/ViewModels/MenuItem/GotoMenuItemViewModel.cs index 221415e8..c85d37e9 100644 --- a/FModel/ViewModels/MenuItem/GotoMenuItemViewModel.cs +++ b/FModel/ViewModels/MenuItem/GotoMenuItemViewModel.cs @@ -111,44 +111,7 @@ namespace FModel.ViewModels.MenuItem } private bool DirectoryAddCanExecute() => Header.Equals(Properties.Resources.AddDirectory); - private void AddDirectory() - { - var input = new GoToUserInput(); - if ((bool)input.ShowDialog()) - { - var newDir = new GotoMenuItemViewModel - { - Header = input.Name, - DirectoryPath = input.Directory - }; - newDir.Childrens = new ObservableCollection - { - new GotoMenuItemViewModel - { - Header = Properties.Resources.GoTo, - Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/share.png", UriKind.Relative)) }, - Parent = newDir - }, - new GotoMenuItemViewModel - { - Header = Properties.Resources.EditDirectory, - Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/pencil.png", UriKind.Relative)) }, - Parent = newDir - }, - new GotoMenuItemViewModel - { - Header = Properties.Resources.RemoveDirectory, - Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/delete-forever.png", UriKind.Relative)) }, - StaysOpenOnClick = true, - Parent = newDir - } - }; - - MenuItems.customGoTos.Add(newDir); - Properties.Settings.Default.CustomGoTos = JsonConvert.SerializeObject(MenuItems.customGoTos.Skip(2), Formatting.None); - Properties.Settings.Default.Save(); - } - } + private void AddDirectory() => MenuItems.AddCustomGoTo(); private bool DirectoryEditCanExecute() => Header.Equals(Properties.Resources.EditDirectory); private void EditDirectory() diff --git a/FModel/ViewModels/MenuItem/MenuItems.cs b/FModel/ViewModels/MenuItem/MenuItems.cs index 0d7d89cc..d301fcf1 100644 --- a/FModel/ViewModels/MenuItem/MenuItems.cs +++ b/FModel/ViewModels/MenuItem/MenuItems.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using FModel.Windows.UserInput; +using Newtonsoft.Json; using PakReader.Pak; using PakReader.Parsers.Objects; using System; @@ -59,6 +60,46 @@ namespace FModel.ViewModels.MenuItem } } + public static void AddCustomGoTo() => AddCustomGoTo(string.Empty, string.Empty); + public static void AddCustomGoTo(string name, string dir) + { + var input = new GoToUserInput(name, dir); + if ((bool)input.ShowDialog()) + { + var newDir = new GotoMenuItemViewModel + { + Header = input.Name, + DirectoryPath = input.Directory + }; + newDir.Childrens = new ObservableCollection + { + new GotoMenuItemViewModel + { + Header = Properties.Resources.GoTo, + Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/share.png", UriKind.Relative)) }, + Parent = newDir + }, + new GotoMenuItemViewModel + { + Header = Properties.Resources.EditDirectory, + Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/pencil.png", UriKind.Relative)) }, + Parent = newDir + }, + new GotoMenuItemViewModel + { + Header = Properties.Resources.RemoveDirectory, + Icon = new Image { Source = new BitmapImage(new Uri("/FModel;component/Resources/delete-forever.png", UriKind.Relative)) }, + StaysOpenOnClick = true, + Parent = newDir + } + }; + + customGoTos.Add(newDir); + Properties.Settings.Default.CustomGoTos = JsonConvert.SerializeObject(MenuItems.customGoTos.Skip(2), Formatting.None); + Properties.Settings.Default.Save(); + } + } + // PLEASE DON'T USE THIS FOR BACKUP FILES // comment methods you don't use, thx public static bool AtLeastOnePak(this ObservableCollection o) => o.Any(x => !x.GetType().Equals(typeof(Separator)) && x.PakFile != null); diff --git a/FModel/Windows/Search/Search.xaml.cs b/FModel/Windows/Search/Search.xaml.cs index a4988a31..a8404f90 100644 --- a/FModel/Windows/Search/Search.xaml.cs +++ b/FModel/Windows/Search/Search.xaml.cs @@ -91,28 +91,28 @@ namespace FModel.Windows.Search private void CM_Copy_DPath_Click(object sender, RoutedEventArgs e) { - if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0 && Assets_DtGrd.SelectedItem is DataGridViewModel selectedItem) - Assets.Copy(selectedItem.Name.Substring(0, selectedItem.Name.LastIndexOf("/") + 1)); + if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0) + Assets.Copy(Assets_DtGrd.SelectedItems, ECopy.PathNoFile); } private void CM_Copy_FPath_Click(object sender, RoutedEventArgs e) { - if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0 && Assets_DtGrd.SelectedItem is DataGridViewModel selectedItem) - Assets.Copy(selectedItem.Name, ECopy.Path); + if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0) + Assets.Copy(Assets_DtGrd.SelectedItems, ECopy.Path); } private void CM_Copy_FName_Click(object sender, RoutedEventArgs e) { - if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0 && Assets_DtGrd.SelectedItem is DataGridViewModel selectedItem) - Assets.Copy(selectedItem.Name, ECopy.File); + if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0) + Assets.Copy(Assets_DtGrd.SelectedItems, ECopy.File); } private void CM_Copy_FPath_NoExt_Click(object sender, RoutedEventArgs e) { - if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0 && Assets_DtGrd.SelectedItem is DataGridViewModel selectedItem) - Assets.Copy(selectedItem.Name, ECopy.PathNoExt); + if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0) + Assets.Copy(Assets_DtGrd.SelectedItems, ECopy.PathNoExt); } private void CM_Copy_FName_NoExt_Click(object sender, RoutedEventArgs e) { - if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0 && Assets_DtGrd.SelectedItem is DataGridViewModel selectedItem) - Assets.Copy(selectedItem.Name, ECopy.FileNoExt); + if (Assets_DtGrd.HasItems && Assets_DtGrd.SelectedIndex >= 0) + Assets.Copy(Assets_DtGrd.SelectedItems, ECopy.FileNoExt); } private void OnSelectedItemChanged(object sender, SelectionChangedEventArgs e)