Imports System.ComponentModel Imports System.Data.Common Imports System.Data.SQLite Imports DevExpress.Text Public Class SongRepository Implements System.ComponentModel.IChangeTracking Public ReadOnly Property IsChanged As Boolean Implements IChangeTracking.IsChanged Get Throw New NotImplementedException() End Get End Property Friend Shared Async Function GetSongs() As Task(Of BindingList(Of Song)) Dim con = DB.getConnection Dim cmd As New SQLiteCommand(Nothing, con) Dim reader As DbDataReader Await con.OpenAsync Dim result As New BindingList(Of Song) cmd.CommandText = "SELECT * FROM t_songs" reader = Await cmd.ExecuteReaderAsync result.Clear() Dim s As Song Do While Await reader.ReadAsync s = New Song s.ID = CInt(reader("S_ID")) s.RootDir = CStr(reader("S_Path")) s.SubDirectory = CStr(reader("S_Subpath")) s.Artist = TryCast(reader("S_Info_Artist"), String) s.Title = TryCast(reader("S_Info_Title"), String) s.Year = CInt(reader("S_Info_Year")) s.Language = TryCast(reader("S_Info_Language"), String) s.Genre = TryCast(reader("S_Info_Genre"), String) s.Previewstart = CDec(reader("S_Info_Previewstart")) s.BPM = CInt(reader("S_Info_BPM")) s.GAP = CInt(reader("S_Info_GAP")) s.IsFavorite = CBool(reader("S_Favorite")) s.InfoFile = TryCast(reader("S_File_Info"), String) s.Songfilename = TryCast(reader("S_File_Song"), String) s.CoverFilename = TryCast(reader("S_File_Cover"), String) s.VideoFilename = TryCast(reader("S_File_Video"), String) s.SongInfos = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(TryCast(reader("S_Info_Additional"), String)) result.Add(s) 'ToDo:Songinfos laden (oder erst beim Anklicken des Liedes) Loop Return result End Function Friend Shared Async Sub DeleteAllSongs() Dim con = DB.getConnection Dim cmd As New SQLiteCommand(Nothing, con) Await con.OpenAsync() cmd.CommandText = "DELETE FROM t_songs" Await cmd.ExecuteNonQueryAsync() con.Close() End Sub Friend Shared Async Sub SaveSongs(songs As List(Of Song)) Dim con = DB.getConnection Dim cmd As New SQLiteCommand(Nothing, con) With cmd.Parameters .Add("@path", DbType.String) .Add("@subpath", DbType.String) .Add("@artist", DbType.String) .Add("@title", DbType.String) .Add("@year", DbType.Int32) .Add("@language", DbType.String) .Add("@genre", DbType.String) .Add("@previewstart", DbType.Double) .Add("@bpm", DbType.Int32) .Add("@gap", DbType.Int32) .Add("@additional", DbType.String) .Add("@favorite", DbType.Boolean) .Add("@fileinfo", DbType.String) .Add("@filesong", DbType.String) .Add("@filecover", DbType.String) .Add("@filevideo", DbType.String) End With Await con.OpenAsync() cmd.CommandText = "INSERT INTO t_songs ( S_Path, S_Subpath, S_Info_Artist, S_Info_Title, S_Info_Year, S_Info_Language, S_Info_Genre, S_Info_Previewstart, S_Info_BPM, S_Info_GAP, S_Info_Additional, S_Favorite, S_File_Info, S_File_Song, S_File_Cover, S_File_Video ) VALUES ( @path, @subpath, @artist, @title, @year, @language, @genre, @previewstart, @bpm, @gap, @additional, @favorite, @fileinfo, @filesong, @filecover, @filevideo )" For Each s As Song In songs cmd.Parameters("@path").Value = s.RootDir cmd.Parameters("@subpath").Value = s.SubDirectory cmd.Parameters("@artist").Value = s.Artist cmd.Parameters("@title").Value = s.Title cmd.Parameters("@year").Value = s.Year cmd.Parameters("@language").Value = s.Language cmd.Parameters("@genre").Value = s.Genre cmd.Parameters("@previewstart").Value = s.Previewstart cmd.Parameters("@bpm").Value = s.BPM cmd.Parameters("@gap").Value = s.GAP cmd.Parameters("@additional").Value = Newtonsoft.Json.JsonConvert.SerializeObject(s.SongInfos) cmd.Parameters("@favorite").Value = s.IsFavorite cmd.Parameters("@fileinfo").Value = s.InfoFile cmd.Parameters("@filesong").Value = s.Songfilename cmd.Parameters("@filecover").Value = s.CoverFilename cmd.Parameters("@filevideo").Value = s.VideoFilename Await cmd.ExecuteNonQueryAsync() Next con.Close() End Sub Public Sub AcceptChanges() Implements IChangeTracking.AcceptChanges Throw New NotImplementedException() End Sub End Class