// Checks for existing settings file, if none exists generate a new one using the defaults.
        private void DoGetSettings()
        {                   
            bool isEmpty = !File.Exists(ConfigClass.settingsFile); // Check if file exists

            // If file doesn't exist, generate one from the DefaultSettings class.
            if (isEmpty)
            {
                UserSettings tempSettings = new UserSettings();
                tempSettings = DefaultSettings.set();
                MainWindow.currentSettings = tempSettings;
                JSON.SerializeSettings(tempSettings);
            }

            // If file does exist, deserialise the file and load the object up into the "currentSettings" object - If the object is unusable, prompts the user and creates settings from default.
            else
            {
                try
                {
                    UserSettings tempSettings = JSON.DeserializeSettings();
                    MainWindow.currentSettings = tempSettings;
                }
                catch
                {
                    MusickError errorWin = new MusickError();
                    errorWin.Owner = this;
                    errorWin.lblError.Content = "Settings file corrupted - Using default settings";
                    if (errorWin.ShowDialog() == true)
                    {
                        UserSettings tempSettings = new UserSettings();
                        tempSettings = DefaultSettings.set();
                        MainWindow.currentSettings = tempSettings;
                        JSON.SerializeSettings(tempSettings);
                    }
                }
            }        
        }
        // If a local library (or libraries) exists, this will deserialise the file(s) into the songList object for the Library window to use. 
        private async Task<string> DoLoadLibrary()
        {
            await Task.Run(() => 
            {               
                foreach (var file in Directory.GetFiles(ConfigClass.appLibraryFolder))
                {
                    ObservableCollection<Song> tempLibrary = JSON.DeserializeLibrary(file);
                    LibraryFile tempLibFile = GenerateLibrary.CreateLibraryEntry(tempLibrary, file);
                    foreach (var song in tempLibrary.ToList())
                    {
                        if (!File.Exists(song.FileLocation))
                        {
                            tempLibrary.Remove(song);
                        }
                    }
                    foreach (var musicFile in Directory.GetFiles(tempLibFile.LibrarySource, "*", SearchOption.AllDirectories))
                    {
                        if (!tempLibrary.Any(p => p.FileLocation == musicFile))
                        {
                            if(file.Contains(".mp3") || file.Contains(".wma") || file.Contains(".wav"))
                            {
                                tempLibrary.Add(GenerateLibrary.GenerateSong(musicFile));
                            }                     
                        }
                    }
                    JSON.SerializeLibrary(file, tempLibrary);
                    try
                    {
                        foreach (var tempSong in tempLibrary)
                        {
                            tempSongList.Add(tempSong);
                        }

                        MusickSettings.libList.Add(tempLibFile); // Creates an entry for the local library file to be displayed and interracted with.
                    }


                    catch // If the object returned is unusable, it'll throw this error.
                    {                                              
                        Dispatcher.Invoke(() =>
                        {
                            MusickError errorWin = new MusickError();
                            errorWin.Owner = this;
                            errorWin.lblError.Content = "One or more libraries are corrupt/missing - Restart to generate a new library";
                            if (errorWin.ShowDialog() == true)
                            {
                                foreach (var libFile in Directory.GetFiles(ConfigClass.appLibraryFolder))
                                {
                                    File.Delete(libFile);
                                }
                                this.Close();
                            }                         
                        }
                        );
                    }
                }
            }
            );
            MusickLibrary.SongList = tempSongList;
            lblStatus.Content = "Library loaded...";           
            await Task.Delay(729);
            return "";
        }