diff --git a/OpenNetMeter/Models/ApplicationDB.cs b/OpenNetMeter/Models/ApplicationDB.cs index 7ca045a..157b3a9 100644 --- a/OpenNetMeter/Models/ApplicationDB.cs +++ b/OpenNetMeter/Models/ApplicationDB.cs @@ -4,6 +4,7 @@ using System.IO; using System.Reflection; using DatabaseEngine; +using OpenNetMeter.Properties; namespace OpenNetMeter.Models { @@ -22,10 +23,8 @@ public ApplicationDB(string dBFileName, string[]? extraParams = null) public static string GetFilePath() { - string? appName = Assembly.GetEntryAssembly()?.GetName().Name; - string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - path = Path.Combine(path, appName ?? "OpenNetMeter"); - Directory.CreateDirectory(path); + string path = SettingsManager.Current.Folder; + path = Path.Combine(path); return path; } diff --git a/OpenNetMeter/Properties/AppSettings.cs b/OpenNetMeter/Properties/AppSettings.cs index 0fe14c5..4899907 100644 --- a/OpenNetMeter/Properties/AppSettings.cs +++ b/OpenNetMeter/Properties/AppSettings.cs @@ -1,6 +1,8 @@ using System.ComponentModel; using System.Diagnostics; using System.Drawing; +using System.IO; +using System.Reflection; namespace OpenNetMeter.Properties { @@ -43,6 +45,9 @@ public class AppSettings : INotifyPropertyChanged private int miniWidgetTransparentSlider; public int MiniWidgetTransparentSlider { get => miniWidgetTransparentSlider; set { if (miniWidgetTransparentSlider != value) { miniWidgetTransparentSlider = value; OnPropertyChanged("MiniWidgetTransparentSlider"); } } } + private string folder =Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), Assembly.GetEntryAssembly()?.GetName().Name ?? "OpenNetMeter"); + public string Folder { get => folder; set { if (folder != value) { folder = value; OnPropertyChanged("Folder"); } } } + public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged(string propName) { diff --git a/OpenNetMeter/ViewModels/SettingsVM.cs b/OpenNetMeter/ViewModels/SettingsVM.cs index aa18f7d..cc5f09d 100644 --- a/OpenNetMeter/ViewModels/SettingsVM.cs +++ b/OpenNetMeter/ViewModels/SettingsVM.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.IO; using System.Reflection; +using System.Windows.Forms; using System.Windows.Input; using TaskScheduler = Microsoft.Win32.TaskScheduler; @@ -58,7 +59,7 @@ public bool UnlockOptionStartWin } private bool minimizeOnStart; - public bool MinimizeOnStart + public bool MinimizeOnStart { get { return minimizeOnStart; } set @@ -73,7 +74,7 @@ public bool MinimizeOnStart } private bool unlockMinimizeOnStart; - public bool UnlockMinimizeOnStart + public bool UnlockMinimizeOnStart { get { return unlockMinimizeOnStart; } @@ -113,7 +114,7 @@ public int NetworkSpeedFormat get { return networkSpeedFormat; } set { - if(networkSpeedFormat != value) + if (networkSpeedFormat != value) { networkSpeedFormat = value; SettingsManager.Current.NetworkSpeedFormat = value; @@ -122,6 +123,24 @@ public int NetworkSpeedFormat } } } + private string? dataFolder; + public string DataFolder + { + get { return dataFolder ?? " "; } + set + { + if (dataFolder != value) + { + var oldvalue = dataFolder; + dataFolder = value; + SettingsManager.Current.Folder = value; + SettingsManager.Save(); + OnPropertyChanged("DataFolder"); + Debug.WriteLine($"folder:{dataFolder}"); + } + } + } + private bool darkMode; public bool DarkMode @@ -149,10 +168,10 @@ public int MiniWidgetTransparentSlider set { miniWidgetTransparentSlider = value; - + OnPropertyChanged("MiniWidgetTransparentSlider"); //Debug.WriteLine($"MiniWidgetTransparentSlider: {value}"); - + //trigger the miniwidget's BackgroundColor property. SetMiniWidgetBackgroundColor(DarkMode, value); @@ -170,7 +189,7 @@ public bool DeleteAllFiles if (deleteAllFiles != value) { deleteAllFiles = value; - if(value) + if (value) OnPropertyChanged("DeleteAllFiles"); } } @@ -179,14 +198,15 @@ public bool DeleteAllFiles private ConfirmationDialogVM? cdvm; private MiniWidgetVM? mwvm; + public ICommand? BrowseFolderCommand { get; } public SettingsVM(MiniWidgetVM mw_ref, ConfirmationDialogVM cdvm_ref) { + mwvm = mw_ref; cdvm = cdvm_ref; cdvm.BtnCommand = new BaseCommand(ResetDataYesOrNo, true); cdvm.DialogMessage = "Warning!!! This will delete all saved profiles.\nDo you still want to continue?"; - taskFolder = "OpenNetMeter"; taskName = "OpenNetMeter" + "-" + Assembly.GetExecutingAssembly()?.GetName()?.Version?.ToString(3); @@ -196,6 +216,10 @@ public SettingsVM(MiniWidgetVM mw_ref, ConfirmationDialogVM cdvm_ref) MinimizeOnStart = SettingsManager.Current.MinimizeOnStart; DarkMode = SettingsManager.Current.DarkMode; MiniWidgetTransparentSlider = SettingsManager.Current.MiniWidgetTransparentSlider; + DataFolder = SettingsManager.Current.Folder; + + BrowseFolderCommand = new BaseCommand(BrowseFolder, true); + if (SetStartWithWin) UnlockMinimizeOnStart = false; @@ -225,13 +249,54 @@ private void SetMiniWidgetBackgroundColor(bool darkMode, int transparency) private void ResetData(object? obj) { - if(cdvm != null) + if (cdvm != null) cdvm.IsVisible = System.Windows.Visibility.Visible; } + private void BrowseFolder(object? obj) + { + var oldvalue = DataFolder; + using (var dialog = new FolderBrowserDialog()) + { + dialog.Description = "Select a folder"; + dialog.ShowNewFolderButton = true; + + if (dialog.ShowDialog() == DialogResult.OK) + { + DataFolder = dialog.SelectedPath; + } + } + moveAndDelete(oldvalue, dataFolder); + + } + private void moveAndDelete(string? oldFolderPath, string? newPath) + { + if (oldFolderPath == null || !Directory.Exists(oldFolderPath)) + oldFolderPath = AppDomain.CurrentDomain.BaseDirectory; + if (newPath == null || !Directory.Exists(newPath)) + newPath = AppDomain.CurrentDomain.BaseDirectory; + + string[] files = Directory.GetFiles(oldFolderPath); + + foreach (string filePath in files) + { + string fileName = Path.GetFileName(filePath); + string destFile = Path.Combine(newPath, fileName); + + try + { + // Move the file + File.Move(filePath, destFile); + } + catch (IOException ex) + { + Console.WriteLine($"Error moving file {fileName}: {ex.Message}"); + } + } + } private void ResetDataYesOrNo(object? obj) { - if(obj != null) + if (obj != null) { if ((string)obj == "Yes") DeleteAllFiles = true; @@ -250,7 +315,7 @@ private void SetAppAsTask(bool set) TaskScheduler.TaskFolder sub = TaskScheduler.TaskService.Instance.RootFolder.SubFolders["OpenNetMeter"]; if (!set) { - for(int i = 0; i < sub.Tasks.Count; i++) + for (int i = 0; i < sub.Tasks.Count; i++) { sub.DeleteTask(sub.Tasks[i].Name); } @@ -310,14 +375,14 @@ private void CreateTask() //set action to run application TaskScheduler.ExecAction action = new TaskScheduler.ExecAction(); action.Path = Path.Combine(AppContext.BaseDirectory, "OpenNetMeter.exe"); - if(MinimizeOnStart) + if (MinimizeOnStart) action.Arguments = "/StartMinimized"; td.Actions.Add(action); // Register the task in the sub folder TaskScheduler.TaskService.Instance.RootFolder.SubFolders["OpenNetMeter"].RegisterTaskDefinition(taskName, td); } - catch(Exception ex) + catch (Exception ex) { Debug.WriteLine("Error: " + ex.Message); } diff --git a/OpenNetMeter/Views/MainWindowTabs/SettingsV.xaml b/OpenNetMeter/Views/MainWindowTabs/SettingsV.xaml index 5d3bbc3..75b6b16 100644 --- a/OpenNetMeter/Views/MainWindowTabs/SettingsV.xaml +++ b/OpenNetMeter/Views/MainWindowTabs/SettingsV.xaml @@ -70,6 +70,16 @@ + + + + Data Folder + + +