/// <summary>
 /// Lägger till ett nytt album till databasen
 /// </summary>
 public void AddNewAlbum(MediaAlbum album)
 {
     using (var db = new MediaPlayerContext())
     {
         db.MediaAlbums.Add(album);
         db.SaveChanges();
     }
 }
        /// <summary>
        /// Retunererar en pekare till ett album i databasen
        /// </summary>
        private MediaAlbum GetPointerToAlbum(string albumName, MediaPlayerContext db)
        {
            var query = db.MediaAlbums.Where(album => album.Name.ToLower().Equals(albumName.ToLower()));

            if (query.ToArray().Length == 1)
            {
                return(query.ToArray()[0]);
            }

            return(null);
        }
 /// <summary>
 /// Ändrar namnet på ett album i databasen
 /// </summary>
 public void ChangeAlbumName(MediaAlbum album, string newName)
 {
     using (var db = new MediaPlayerContext())
     {
         album = GetPointerToAlbum(album.Name, db);
         if (album != null)
         {
             album.Name = newName;
             db.SaveChanges();
         }
     }
 }
 /// <summary>
 /// Tar bort ett album ur databasen
 /// </summary>
 public void DeleteAlbum(string albumName)
 {
     using (var db = new MediaPlayerContext())
     {
         MediaAlbum albumToRemove = GetPointerToAlbum(albumName, db);
         if (albumToRemove != null)
         {
             db.MediaAlbums.Remove(albumToRemove);
             db.SaveChanges();
         }
     }
 }
 /// <summary>
 /// Uppdaterar det aktuella albument i databasen
 /// </summary>
 public void UpdateAlbum(MediaAlbum updatedAlbum)
 {
     using (var db = new MediaPlayerContext())
     {
         MediaAlbum existingAlbum = GetPointerToAlbum(updatedAlbum.Name, db);
         if (existingAlbum != null)
         {
             MatchExistingAlbumToUpdated(existingAlbum, updatedAlbum, db);
             CopyFileDescriptions(existingAlbum, updatedAlbum, db);
             db.SaveChanges();
         }
     }
 }
        /// <summary>
        /// Kontrollerar om det finns ett album med samma namn som metodparametern i databasen
        /// </summary>
        public bool AlbumExists(string albumName)
        {
            using (var db = new MediaPlayerContext())
            {
                MediaAlbum album = GetPointerToAlbum(albumName, db);
                if (album != null)
                {
                    return(true);
                }

                return(false);
            }
        }
        /// <summary>
        /// Returnerar namnen på de album som finns lagrade i databasen
        /// </summary>
        public List <string> GetAlbumNames()
        {
            List <string> names = new List <string>();

            using (var db = new MediaPlayerContext())
            {
                foreach (MediaAlbum album in db.MediaAlbums.ToArray())
                {
                    names.Add(album.Name);
                }

                return(names);
            }
        }
        /// <summary>
        /// Tar bort en MediaFile från databasen
        /// </summary>
        private void RemoveMediaFile(MediaFile file, MediaPlayerContext db)
        {
            var query = db.MediaFiles.Where(x => x.FileName.ToLower().Equals(file.FileName.ToLower())).Where(x => x.Album.Name.ToLower().Equals(file.Album.Name.ToLower()));

            //var query = from mediaFile in db.MediaFiles
            //            where mediaFile.FileName.ToLower().Equals(file.FileName.ToLower())
            //            where mediaFile.Album.Name.ToLower().Equals(file.Album.Name.ToLower())
            //            select mediaFile;

            if (query.ToArray().Length == 1)
            {
                MediaFile fileToRemove = (MediaFile)query.ToArray()[0];
                db.MediaFiles.Remove(fileToRemove);
            }
        }
        /// <summary>
        /// Returnerar en lista med kopior av alla MediaFiles som finns i ett album i databasen
        /// </summary>
        public List <MediaFile> GetFilesFromAlbum(string albumName)
        {
            List <MediaFile> files = new List <MediaFile>();

            using (var db = new MediaPlayerContext())
            {
                MediaAlbum album = GetPointerToAlbum(albumName, db);
                if (album != null)
                {
                    foreach (MediaFile file in album.MediaFiles)
                    {
                        files.Add(new MediaFile(file));
                    }
                }
            }

            return(files);
        }
 /// <summary>
 /// Kopierar mediafilernas Description från albumet som ska sparas till det som finns lagrat i databasen
 /// </summary>
 /// <param name="existingAlbum"></param>
 /// <param name="updatedAlbum"></param>
 private void CopyFileDescriptions(MediaAlbum existingAlbum, MediaAlbum updatedAlbum, MediaPlayerContext db)
 {
     foreach (MediaFile updatedFile in updatedAlbum.MediaFiles)
     {
         foreach (MediaFile oldFile in existingAlbum.MediaFiles)
         {
             if (oldFile.Matches(updatedFile))
             {
                 oldFile.Description = updatedFile.Description;
                 break;
             }
         }
     }
 }
        /// <summary>
        /// Tar bort och lägger till filer från albument i databasen så att det matchar albumet som ska sparas
        /// </summary>
        /// <param name="Albumet som finns lagrat i databasen"></param>
        /// <param name="Albumet som ska sparas"></param>
        private void MatchExistingAlbumToUpdated(MediaAlbum existingAlbum, MediaAlbum updatedAlbum, MediaPlayerContext db)
        {
            foreach (MediaFile file in updatedAlbum.MediaFiles)
            {
                if (!IsInList(file, existingAlbum.MediaFiles))
                {
                    existingAlbum.MediaFiles.Add(file);
                }
            }

            foreach (MediaFile file in existingAlbum.MediaFiles)
            {
                if (!IsInList(file, updatedAlbum.MediaFiles))
                {
                    RemoveMediaFile(file, db);
                    break;
                }
            }
        }