Rework Start - Multiple Database-Only-Playlist that can be managed and sent to the Ultrastar directory

This commit is contained in:
BuildTools 2023-12-14 20:57:04 +01:00
parent 676717cfbf
commit de1e1e7946
18 changed files with 392 additions and 264 deletions

View File

@ -12,7 +12,7 @@
</startup> </startup>
<userSettings> <userSettings>
<UltraStarSongPicker.My.MySettings> <UltraStarSongPicker.My.MySettings>
<setting name="FavDir" serializeAs="String"> <setting name="UltraStarDirectory" serializeAs="String">
<value /> <value />
</setting> </setting>
</UltraStarSongPicker.My.MySettings> </UltraStarSongPicker.My.MySettings>
@ -23,12 +23,6 @@
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers> </providers>
</entityFramework> </entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
</system.data>
<runtime> <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
@ -41,4 +35,10 @@
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
</configuration> <system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
</system.data>
</configuration>

View File

@ -15,7 +15,7 @@ Option Explicit On
Namespace My Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0"), _ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase Inherits Global.System.Configuration.ApplicationSettingsBase
@ -57,12 +57,12 @@ Namespace My
<Global.System.Configuration.UserScopedSettingAttribute(), _ <Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _ Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property FavDir() As String Public Property UltraStarDirectory() As String
Get Get
Return CType(Me("FavDir"),String) Return CType(Me("UltraStarDirectory"),String)
End Get End Get
Set Set
Me("FavDir") = value Me("UltraStarDirectory") = value
End Set End Set
End Property End Property
End Class End Class

View File

@ -2,7 +2,7 @@
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true"> <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles /> <Profiles />
<Settings> <Settings>
<Setting Name="FavDir" Type="System.String" Scope="User"> <Setting Name="UltraStarDirectory" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
</Settings> </Settings>

View File

@ -14,7 +14,6 @@ Public Class Song
Public Property Songfilename As String Public Property Songfilename As String
Public Property CoverFilename As String Public Property CoverFilename As String
Public Property VideoFilename As String Public Property VideoFilename As String
Public Property SongInfos As New Dictionary(Of String, String) Public Property SongInfos As New Dictionary(Of String, String)
'Weitere Properties 'Weitere Properties

View File

@ -0,0 +1,52 @@
Imports System.Data.Common
Imports System.Data.SQLite
Public Class LibraryRepository
Friend Shared Async Function GetLibraries() As Task(Of List(Of String))
Dim con = DB.getConnection
Dim cmd As New SQLiteCommand(Nothing, con)
Dim reader As DbDataReader
Dim result As New List(Of String)
'Pfade aus Datenbank auslesen
Await con.OpenAsync()
cmd.CommandText = "SELECT p_path FROM t_paths ORDER BY p_path"
reader = Await cmd.ExecuteReaderAsync
Do While Await reader.ReadAsync
result.Add(CStr(reader("p_path")))
Loop
con.Close()
Return result
End Function
Friend Shared Async Sub AddLibraries(paths As List(Of String))
Dim con = DB.getConnection
Dim cmd As New SQLiteCommand(Nothing, con)
cmd.Parameters.Add("@path", DbType.String)
Await con.OpenAsync()
cmd.CommandText = "INSERT INTO t_paths (p_path) VALUES (@path)"
For Each p As String In paths
cmd.Parameters("@path").Value = p
cmd.ExecuteNonQuery()
Next
con.Close()
End Sub
Friend Shared Async Sub DeleteLibraries(paths As List(Of String))
Dim con = DB.getConnection
Dim cmd As New SQLiteCommand(Nothing, con)
cmd.Parameters.Add("@path", DbType.String)
Await con.OpenAsync()
cmd.CommandText = "DELETE FROM t_paths WHERE p_path = @path"
For Each p As String In paths
cmd.Parameters("@path").Value = p
cmd.ExecuteNonQuery()
Next
con.Close()
End Sub
End Class

View File

@ -0,0 +1,131 @@
Imports System.Data.Common
Imports System.Data.SQLite
Imports DevExpress.Text
Public Class SongRepository
Friend Shared Async Function GetSongs() As Task(Of List(Of Song))
Dim con = DB.getConnection
Dim cmd As New SQLiteCommand(Nothing, con)
Dim reader As DbDataReader
Await con.OpenAsync
Dim result As New List(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
End Class

View File

@ -107,7 +107,7 @@
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath> <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
@ -115,14 +115,14 @@
</Reference> </Reference>
<Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.117.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\lib\net46\System.Data.SQLite.dll</HintPath> <HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\lib\net46\System.Data.SQLite.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.EF6, Version=1.0.117.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.EF6, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.EF6.1.0.117.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.EF6.1.0.118.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.Linq, Version=1.0.117.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.Linq, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Linq.1.0.117.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Linq.1.0.118.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Deployment" /> <Reference Include="System.Deployment" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
@ -157,13 +157,13 @@
<Import Include="System.Threading.Tasks" /> <Import Include="System.Threading.Tasks" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="clsDB.vb" /> <Compile Include="DB.vb" />
<Compile Include="clsFileFunctions.vb" /> <Compile Include="FileFunctions.vb" />
<Compile Include="clsSong.vb" /> <Compile Include="Objects\Song.vb" />
<Compile Include="ctrlAudioVideoPlayer.Designer.vb"> <Compile Include="Controls\ctrlAudioVideoPlayer.Designer.vb">
<DependentUpon>ctrlAudioVideoPlayer.vb</DependentUpon> <DependentUpon>ctrlAudioVideoPlayer.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="ctrlAudioVideoPlayer.vb"> <Compile Include="Controls\ctrlAudioVideoPlayer.vb">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Include="frmErrorList.Designer.vb"> <Compile Include="frmErrorList.Designer.vb">
@ -207,9 +207,11 @@
<Compile Include="repFavoritesList.vb"> <Compile Include="repFavoritesList.vb">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Repositories\LibraryRepository.vb" />
<Compile Include="Repositories\SongRepository.vb" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="ctrlAudioVideoPlayer.resx"> <EmbeddedResource Include="Controls\ctrlAudioVideoPlayer.resx">
<DependentUpon>ctrlAudioVideoPlayer.vb</DependentUpon> <DependentUpon>ctrlAudioVideoPlayer.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmErrorList.resx"> <EmbeddedResource Include="frmErrorList.resx">
@ -291,8 +293,8 @@
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" /> <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" /> <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets'))" /> <Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
</Target> </Target>
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" /> <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.117.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" /> <Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
</Project> </Project>

View File

@ -44,6 +44,11 @@ Partial Class frmMain
Me.grdSongInfos = New DevExpress.XtraGrid.GridControl() Me.grdSongInfos = New DevExpress.XtraGrid.GridControl()
Me.grdvSongInfos = New DevExpress.XtraGrid.Views.Grid.GridView() Me.grdvSongInfos = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.SFD = New System.Windows.Forms.SaveFileDialog() Me.SFD = New System.Windows.Forms.SaveFileDialog()
Me.splLibraryPlaylists = New DevExpress.XtraEditors.SplitContainerControl()
Me.grdPlaylist = New DevExpress.XtraGrid.GridControl()
Me.grdvPlaylist = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.rpgPlaylists = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
CType(Me.rcMain, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.rcMain, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.grdSongs, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.grdSongs, System.ComponentModel.ISupportInitialize).BeginInit()
Me.cmsSongs.SuspendLayout() Me.cmsSongs.SuspendLayout()
@ -62,14 +67,22 @@ Partial Class frmMain
Me.splSongInfo.SuspendLayout() Me.splSongInfo.SuspendLayout()
CType(Me.grdSongInfos, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.grdSongInfos, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.grdvSongInfos, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.grdvSongInfos, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.splLibraryPlaylists, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.splLibraryPlaylists.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.splLibraryPlaylists.Panel1.SuspendLayout()
CType(Me.splLibraryPlaylists.Panel2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.splLibraryPlaylists.Panel2.SuspendLayout()
Me.splLibraryPlaylists.SuspendLayout()
CType(Me.grdPlaylist, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.grdvPlaylist, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout() Me.SuspendLayout()
' '
'rcMain 'rcMain
' '
Me.rcMain.ExpandCollapseItem.Id = 0 Me.rcMain.ExpandCollapseItem.Id = 0
Me.rcMain.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.rcMain.ExpandCollapseItem, Me.rcMain.SearchEditItem, Me.btnSettings, Me.btnReread, Me.btnSave, Me.btnPrint}) Me.rcMain.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.rcMain.ExpandCollapseItem, Me.rcMain.SearchEditItem, Me.btnSettings, Me.btnReread, Me.btnSave, Me.btnPrint, Me.BarButtonItem1})
Me.rcMain.Location = New System.Drawing.Point(0, 0) Me.rcMain.Location = New System.Drawing.Point(0, 0)
Me.rcMain.MaxItemId = 5 Me.rcMain.MaxItemId = 6
Me.rcMain.Name = "rcMain" Me.rcMain.Name = "rcMain"
Me.rcMain.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.rpGeneral}) Me.rcMain.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.rpGeneral})
Me.rcMain.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] Me.rcMain.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
@ -86,7 +99,7 @@ Partial Class frmMain
' '
'btnReread 'btnReread
' '
Me.btnReread.Caption = "Ordner neu einlesen" Me.btnReread.Caption = "Bibliothek neu einlesen"
Me.btnReread.Id = 2 Me.btnReread.Id = 2
Me.btnReread.ImageOptions.SvgImage = Global.UltraStarSongPicker.My.Resources.Resources.changeview Me.btnReread.ImageOptions.SvgImage = Global.UltraStarSongPicker.My.Resources.Resources.changeview
Me.btnReread.Name = "btnReread" Me.btnReread.Name = "btnReread"
@ -111,7 +124,7 @@ Partial Class frmMain
' '
'rpGeneral 'rpGeneral
' '
Me.rpGeneral.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.rpgGeneral, Me.rpgManagement}) Me.rpGeneral.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.rpgGeneral, Me.rpgManagement, Me.rpgPlaylists})
Me.rpGeneral.Name = "rpGeneral" Me.rpGeneral.Name = "rpGeneral"
Me.rpGeneral.Text = "Allgemein" Me.rpGeneral.Text = "Allgemein"
' '
@ -149,7 +162,7 @@ Partial Class frmMain
Me.grdSongs.MainView = Me.grdvSongs Me.grdSongs.MainView = Me.grdvSongs
Me.grdSongs.MenuManager = Me.rcMain Me.grdSongs.MenuManager = Me.rcMain
Me.grdSongs.Name = "grdSongs" Me.grdSongs.Name = "grdSongs"
Me.grdSongs.Size = New System.Drawing.Size(655, 603) Me.grdSongs.Size = New System.Drawing.Size(655, 342)
Me.grdSongs.TabIndex = 1 Me.grdSongs.TabIndex = 1
Me.grdSongs.UseEmbeddedNavigator = True Me.grdSongs.UseEmbeddedNavigator = True
Me.grdSongs.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.grdvSongs}) Me.grdSongs.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.grdvSongs})
@ -180,6 +193,8 @@ Partial Class frmMain
Me.grdvSongs.OptionsBehavior.AutoExpandAllGroups = True Me.grdvSongs.OptionsBehavior.AutoExpandAllGroups = True
Me.grdvSongs.OptionsFind.AlwaysVisible = True Me.grdvSongs.OptionsFind.AlwaysVisible = True
Me.grdvSongs.OptionsSelection.MultiSelect = True Me.grdvSongs.OptionsSelection.MultiSelect = True
Me.grdvSongs.OptionsView.ShowViewCaption = True
Me.grdvSongs.ViewCaption = "Bibiliothek"
' '
'splMain 'splMain
' '
@ -190,8 +205,8 @@ Partial Class frmMain
' '
'splMain.Panel1 'splMain.Panel1
' '
Me.splMain.Panel1.Controls.Add(Me.splLibraryPlaylists)
Me.splMain.Panel1.Controls.Add(Me.prgMain) Me.splMain.Panel1.Controls.Add(Me.prgMain)
Me.splMain.Panel1.Controls.Add(Me.grdSongs)
Me.splMain.Panel1.Text = "Panel1" Me.splMain.Panel1.Text = "Panel1"
' '
'splMain.Panel2 'splMain.Panel2
@ -270,6 +285,74 @@ Partial Class frmMain
Me.SFD.FileName = "Songliste.pdf" Me.SFD.FileName = "Songliste.pdf"
Me.SFD.Filter = "PDF-Dateien (*.pdf)|*.pdf|Alle Dateien (*.*)|*.*" Me.SFD.Filter = "PDF-Dateien (*.pdf)|*.pdf|Alle Dateien (*.*)|*.*"
' '
'splLibraryPlaylists
'
Me.splLibraryPlaylists.Dock = System.Windows.Forms.DockStyle.Fill
Me.splLibraryPlaylists.Horizontal = False
Me.splLibraryPlaylists.Location = New System.Drawing.Point(0, 0)
Me.splLibraryPlaylists.Name = "splLibraryPlaylists"
'
'splLibraryPlaylists.splLibraryPlaylists_Panel1
'
Me.splLibraryPlaylists.Panel1.Controls.Add(Me.grdSongs)
Me.splLibraryPlaylists.Panel1.Text = "Panel1"
'
'splLibraryPlaylists.splLibraryPlaylists_Panel2
'
Me.splLibraryPlaylists.Panel2.Controls.Add(Me.grdPlaylist)
Me.splLibraryPlaylists.Panel2.Text = "Panel2"
Me.splLibraryPlaylists.Size = New System.Drawing.Size(655, 603)
Me.splLibraryPlaylists.SplitterPosition = 342
Me.splLibraryPlaylists.TabIndex = 3
'
'grdPlaylist
'
Me.grdPlaylist.ContextMenuStrip = Me.cmsSongs
Me.grdPlaylist.Dock = System.Windows.Forms.DockStyle.Fill
Me.grdPlaylist.EmbeddedNavigator.Buttons.Append.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.CancelEdit.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.Edit.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.EndEdit.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.First.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.Last.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.Next.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.NextPage.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.Prev.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.PrevPage.Visible = False
Me.grdPlaylist.EmbeddedNavigator.Buttons.Remove.Visible = False
Me.grdPlaylist.EmbeddedNavigator.TextStringFormat = "Song {0} von {1}"
Me.grdPlaylist.Location = New System.Drawing.Point(0, 0)
Me.grdPlaylist.MainView = Me.grdvPlaylist
Me.grdPlaylist.MenuManager = Me.rcMain
Me.grdPlaylist.Name = "grdPlaylist"
Me.grdPlaylist.Size = New System.Drawing.Size(655, 251)
Me.grdPlaylist.TabIndex = 2
Me.grdPlaylist.UseEmbeddedNavigator = True
Me.grdPlaylist.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.grdvPlaylist})
'
'grdvPlaylist
'
Me.grdvPlaylist.GridControl = Me.grdPlaylist
Me.grdvPlaylist.Name = "grdvPlaylist"
Me.grdvPlaylist.OptionsBehavior.AutoExpandAllGroups = True
Me.grdvPlaylist.OptionsFind.AlwaysVisible = True
Me.grdvPlaylist.OptionsSelection.MultiSelect = True
Me.grdvPlaylist.OptionsView.ShowGroupPanel = False
Me.grdvPlaylist.OptionsView.ShowViewCaption = True
Me.grdvPlaylist.ViewCaption = "Playlist"
'
'rpgPlaylists
'
Me.rpgPlaylists.ItemLinks.Add(Me.BarButtonItem1)
Me.rpgPlaylists.Name = "rpgPlaylists"
Me.rpgPlaylists.Text = "Playlist"
'
'BarButtonItem1
'
Me.BarButtonItem1.Caption = "Playlist öffnen"
Me.BarButtonItem1.Id = 5
Me.BarButtonItem1.Name = "BarButtonItem1"
'
'frmMain 'frmMain
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@ -299,6 +382,14 @@ Partial Class frmMain
Me.splSongInfo.ResumeLayout(False) Me.splSongInfo.ResumeLayout(False)
CType(Me.grdSongInfos, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.grdSongInfos, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.grdvSongInfos, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.grdvSongInfos, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.splLibraryPlaylists.Panel1, System.ComponentModel.ISupportInitialize).EndInit()
Me.splLibraryPlaylists.Panel1.ResumeLayout(False)
CType(Me.splLibraryPlaylists.Panel2, System.ComponentModel.ISupportInitialize).EndInit()
Me.splLibraryPlaylists.Panel2.ResumeLayout(False)
CType(Me.splLibraryPlaylists, System.ComponentModel.ISupportInitialize).EndInit()
Me.splLibraryPlaylists.ResumeLayout(False)
CType(Me.grdPlaylist, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.grdvPlaylist, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@ -324,4 +415,9 @@ Partial Class frmMain
Friend WithEvents btnPrint As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnPrint As DevExpress.XtraBars.BarButtonItem
Friend WithEvents rpgManagement As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents rpgManagement As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents SFD As SaveFileDialog Friend WithEvents SFD As SaveFileDialog
Friend WithEvents splLibraryPlaylists As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents rpgPlaylists As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents grdPlaylist As DevExpress.XtraGrid.GridControl
Friend WithEvents grdvPlaylist As DevExpress.XtraGrid.Views.Grid.GridView
End Class End Class

View File

@ -103,65 +103,21 @@ Public Class frmMain
End Sub End Sub
Private Sub btnReread_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnReread.ItemClick Private Sub btnReread_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnReread.ItemClick
RereadFolders() ScanLibrary()
End Sub End Sub
Private Async Sub GetSongsFromDB() Private Async Sub GetSongsFromDB()
grdvSongs.BeginDataUpdate() grdvSongs.BeginDataUpdate()
Dim con = DB.getConnection Songs = Await SongRepository.GetSongs()
Dim cmd As New SQLiteCommand(Nothing, con)
Dim reader As DbDataReader
Await con.OpenAsync
cmd.CommandText = "SELECT * FROM t_songs"
reader = Await cmd.ExecuteReaderAsync
Songs.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))
Songs.Add(s)
'ToDo:Songinfos laden (oder erst beim Anklicken des Liedes)
Loop
reader.Close()
con.Close()
CheckFavorites() CheckFavorites()
grdvSongs.EndDataUpdate() grdvSongs.EndDataUpdate()
grdvSongs.BestFitColumns() grdvSongs.BestFitColumns()
End Sub End Sub
Private Async Sub RereadFolders() Private Async Sub ScanLibrary()
Dim con = DB.getConnection Dim Pfade As List(Of String) = Await LibraryRepository.GetLibraries()
Dim cmd As New SQLiteCommand(Nothing, con)
Dim reader As DbDataReader
Dim Pfade As New List(Of String)
'Pfade aus Datenbank auslesen
Await con.OpenAsync()
cmd.CommandText = "SELECT p_path FROM t_paths ORDER BY p_path"
reader = Await cmd.ExecuteReaderAsync
Do While Await reader.ReadAsync
Pfade.Add(CStr(reader("p_path")))
Loop
con.Close()
'Ordner auslesen 'Ordner auslesen
prgMain.Visible = True prgMain.Visible = True
@ -170,9 +126,7 @@ Public Class frmMain
prgMain.Visible = False prgMain.Visible = False
ErrorMsgs.Clear() ErrorMsgs.Clear()
If Pfade.Count = 0 Then If Pfade.Count = 0 Then ErrorMsgs.Add("Es sind keine Pfade hinterlegt.")
ErrorMsgs.Add("Es sind keine Pfade hinterlegt.")
End If
If ErrorMsgs.Count > 0 Then If ErrorMsgs.Count > 0 Then
MessageBox.Show(String.Join(vbCrLf, ErrorMsgs), Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) MessageBox.Show(String.Join(vbCrLf, ErrorMsgs), Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
@ -182,8 +136,8 @@ Public Class frmMain
Private Sub ImportSongsToDB(Pfade As List(Of String)) Private Sub ImportSongsToDB(Pfade As List(Of String))
Dim FavDirExists As Boolean = Directory.Exists(My.Settings.FavDir) Dim FavDirExists As Boolean = Directory.Exists(My.Settings.UltraStarDirectory)
Dim FavDir As String = My.Settings.FavDir Dim FavDir As String = My.Settings.UltraStarDirectory
If FavDir.EndsWith("\") = False Then FavDir &= "\" If FavDir.EndsWith("\") = False Then FavDir &= "\"
Dim songinfofiles() As String Dim songinfofiles() As String
Dim duetinfofiles() As String Dim duetinfofiles() As String
@ -221,11 +175,12 @@ Public Class frmMain
ErrorMsgs.Add($"Der Pfad {pfad} existiert nicht oder konnte nicht gelesen werden.") ErrorMsgs.Add($"Der Pfad {pfad} existiert nicht oder konnte nicht gelesen werden.")
End If End If
Next Next
SaveSongsInDB(templist) SongRepository.DeleteAllSongs()
SongRepository.SaveSongs(templist)
End Sub End Sub
Private Sub CheckFavorites() Private Sub CheckFavorites()
Dim FavDir As String = My.Settings.FavDir Dim FavDir As String = My.Settings.UltraStarDirectory
If FavDir.EndsWith("\") = False Then FavDir &= "\" If FavDir.EndsWith("\") = False Then FavDir &= "\"
If Directory.Exists(FavDir) Then If Directory.Exists(FavDir) Then
For Each s As Song In Songs For Each s As Song In Songs
@ -250,89 +205,7 @@ Public Class frmMain
End Sub End Sub
Private Async Sub SaveSongsInDB(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 = "DELETE FROM t_songs"
Await cmd.ExecuteNonQueryAsync()
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
Private Sub grdvSongs_RowClick(sender As Object, e As RowClickEventArgs) Handles grdvSongs.RowClick Private Sub grdvSongs_RowClick(sender As Object, e As RowClickEventArgs) Handles grdvSongs.RowClick
If e.Clicks = 2 AndAlso e.Button = MouseButtons.Left Then If e.Clicks = 2 AndAlso e.Button = MouseButtons.Left Then
Dim s As Song = CType(grdvSongs.GetFocusedRow, Song) Dim s As Song = CType(grdvSongs.GetFocusedRow, Song)
@ -417,7 +290,7 @@ Public Class frmMain
Private Async Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick Private Async Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
grdvSongs.CloseEditor() grdvSongs.CloseEditor()
Dim FavDir = My.Settings.FavDir Dim FavDir = My.Settings.UltraStarDirectory
Dim ToAddToFavs As List(Of Song) = Songs.Where(Function(s) s.IsFavorite = True AndAlso s.ExistsInFavDir = False).ToList Dim ToAddToFavs As List(Of Song) = Songs.Where(Function(s) s.IsFavorite = True AndAlso s.ExistsInFavDir = False).ToList
Dim ToDeleteFromFavs As List(Of Song) = Songs.Where(Function(s) s.IsFavorite = False AndAlso s.ExistsInFavDir = True).ToList Dim ToDeleteFromFavs As List(Of Song) = Songs.Where(Function(s) s.IsFavorite = False AndAlso s.ExistsInFavDir = True).ToList
@ -438,7 +311,7 @@ Public Class frmMain
Private Async Sub SyncFavDir(songlist As List(Of Song)) Private Async Sub SyncFavDir(songlist As List(Of Song))
Dim ToAddToFavs As List(Of Song) = songlist.Where(Function(s) s.IsFavorite = True AndAlso s.ExistsInFavDir = False).ToList Dim ToAddToFavs As List(Of Song) = songlist.Where(Function(s) s.IsFavorite = True AndAlso s.ExistsInFavDir = False).ToList
Dim ToDeleteFromFavs As List(Of Song) = songlist.Where(Function(s) s.IsFavorite = False AndAlso s.ExistsInFavDir = True).ToList Dim ToDeleteFromFavs As List(Of Song) = songlist.Where(Function(s) s.IsFavorite = False AndAlso s.ExistsInFavDir = True).ToList
Dim FavDir = My.Settings.FavDir Dim FavDir = My.Settings.UltraStarDirectory
Dim errors As New List(Of String) Dim errors As New List(Of String)
Dim con As SQLiteConnection = DB.getConnection Dim con As SQLiteConnection = DB.getConnection

View File

@ -1,9 +1,9 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmSettings Partial Class frmSettings
Inherits System.Windows.Forms.Form Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _ <System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean) Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try Try
If disposing AndAlso components IsNot Nothing Then If disposing AndAlso components IsNot Nothing Then
@ -20,7 +20,7 @@ Partial Class frmSettings
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent() Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmSettings)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmSettings))
Me.lstPaths = New DevExpress.XtraEditors.ListBoxControl() Me.lstPaths = New DevExpress.XtraEditors.ListBoxControl()
@ -31,19 +31,19 @@ Partial Class frmSettings
Me.rpGeneral = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.rpGeneral = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.rpgGeneral = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.rpgGeneral = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.rpgPaths = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.rpgPaths = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.grpPaths = New DevExpress.XtraEditors.GroupControl() Me.grpLibraries = New DevExpress.XtraEditors.GroupControl()
Me.FBD = New System.Windows.Forms.FolderBrowserDialog() Me.FBD = New System.Windows.Forms.FolderBrowserDialog()
Me.grpGeneral = New DevExpress.XtraEditors.GroupControl() Me.grpGeneral = New DevExpress.XtraEditors.GroupControl()
Me.btnFavDir = New DevExpress.XtraEditors.SimpleButton() Me.lblUSDir = New DevExpress.XtraEditors.LabelControl()
Me.lblFavDir = New DevExpress.XtraEditors.LabelControl() Me.btnUSDir = New DevExpress.XtraEditors.SimpleButton()
Me.txtFavDir = New DevExpress.XtraEditors.TextEdit() Me.txtUSDir = New DevExpress.XtraEditors.TextEdit()
CType(Me.lstPaths, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.lstPaths, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.rcMain, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.rcMain, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.grpPaths, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.grpLibraries, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpPaths.SuspendLayout() Me.grpLibraries.SuspendLayout()
CType(Me.grpGeneral, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.grpGeneral, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpGeneral.SuspendLayout() Me.grpGeneral.SuspendLayout()
CType(Me.txtFavDir.Properties, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtUSDir.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout() Me.SuspendLayout()
' '
'lstPaths 'lstPaths
@ -106,17 +106,17 @@ Partial Class frmSettings
Me.rpgPaths.Name = "rpgPaths" Me.rpgPaths.Name = "rpgPaths"
Me.rpgPaths.Text = "Pfade" Me.rpgPaths.Text = "Pfade"
' '
'grpPaths 'grpLibraries
' '
Me.grpPaths.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Me.grpLibraries.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpPaths.Controls.Add(Me.lstPaths) Me.grpLibraries.Controls.Add(Me.lstPaths)
Me.grpPaths.Location = New System.Drawing.Point(12, 153) Me.grpLibraries.Location = New System.Drawing.Point(12, 153)
Me.grpPaths.Name = "grpPaths" Me.grpLibraries.Name = "grpLibraries"
Me.grpPaths.Size = New System.Drawing.Size(434, 309) Me.grpLibraries.Size = New System.Drawing.Size(434, 309)
Me.grpPaths.TabIndex = 2 Me.grpLibraries.TabIndex = 2
Me.grpPaths.Text = "Pfade" Me.grpLibraries.Text = "Bibliotheken"
' '
'FBD 'FBD
' '
@ -127,41 +127,41 @@ Partial Class frmSettings
' '
Me.grpGeneral.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Me.grpGeneral.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpGeneral.Controls.Add(Me.btnFavDir) Me.grpGeneral.Controls.Add(Me.btnUSDir)
Me.grpGeneral.Controls.Add(Me.lblFavDir) Me.grpGeneral.Controls.Add(Me.lblUSDir)
Me.grpGeneral.Controls.Add(Me.txtFavDir) Me.grpGeneral.Controls.Add(Me.txtUSDir)
Me.grpGeneral.Location = New System.Drawing.Point(12, 89) Me.grpGeneral.Location = New System.Drawing.Point(12, 89)
Me.grpGeneral.Name = "grpGeneral" Me.grpGeneral.Name = "grpGeneral"
Me.grpGeneral.Size = New System.Drawing.Size(434, 58) Me.grpGeneral.Size = New System.Drawing.Size(434, 58)
Me.grpGeneral.TabIndex = 3 Me.grpGeneral.TabIndex = 3
Me.grpGeneral.Text = "Allgemein" Me.grpGeneral.Text = "Allgemein"
' '
'btnFavDir 'lblUSDir
' '
Me.btnFavDir.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.lblUSDir.Location = New System.Drawing.Point(5, 31)
Me.btnFavDir.Location = New System.Drawing.Point(334, 26) Me.lblUSDir.Name = "lblUSDir"
Me.btnFavDir.Name = "btnFavDir" Me.lblUSDir.Size = New System.Drawing.Size(102, 13)
Me.btnFavDir.Size = New System.Drawing.Size(95, 23) Me.lblUSDir.TabIndex = 1
Me.btnFavDir.TabIndex = 2 Me.lblUSDir.Text = "Ultrastar-Songordner"
Me.btnFavDir.Text = "Durchsuchen..."
' '
'lblFavDir 'btnUSDir
' '
Me.lblFavDir.Location = New System.Drawing.Point(5, 31) Me.btnUSDir.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblFavDir.Name = "lblFavDir" Me.btnUSDir.Location = New System.Drawing.Point(334, 26)
Me.lblFavDir.Size = New System.Drawing.Size(99, 13) Me.btnUSDir.Name = "btnUSDir"
Me.lblFavDir.TabIndex = 1 Me.btnUSDir.Size = New System.Drawing.Size(95, 23)
Me.lblFavDir.Text = "Favoritenverzeichnis" Me.btnUSDir.TabIndex = 2
Me.btnUSDir.Text = "Durchsuchen..."
' '
'txtFavDir 'txtUSDir
' '
Me.txtFavDir.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Me.txtUSDir.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.txtFavDir.Location = New System.Drawing.Point(127, 28) Me.txtUSDir.Location = New System.Drawing.Point(127, 28)
Me.txtFavDir.MenuManager = Me.rcMain Me.txtUSDir.MenuManager = Me.rcMain
Me.txtFavDir.Name = "txtFavDir" Me.txtUSDir.Name = "txtUSDir"
Me.txtFavDir.Size = New System.Drawing.Size(201, 20) Me.txtUSDir.Size = New System.Drawing.Size(201, 20)
Me.txtFavDir.TabIndex = 0 Me.txtUSDir.TabIndex = 0
' '
'frmSettings 'frmSettings
' '
@ -169,19 +169,19 @@ Partial Class frmSettings
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(458, 474) Me.ClientSize = New System.Drawing.Size(458, 474)
Me.Controls.Add(Me.grpGeneral) Me.Controls.Add(Me.grpGeneral)
Me.Controls.Add(Me.grpPaths) Me.Controls.Add(Me.grpLibraries)
Me.Controls.Add(Me.rcMain) Me.Controls.Add(Me.rcMain)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "frmSettings" Me.Name = "frmSettings"
Me.Text = "Einstellungen" Me.Text = "Einstellungen"
CType(Me.lstPaths, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.lstPaths, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.rcMain, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.rcMain, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.grpPaths, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.grpLibraries, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpPaths.ResumeLayout(False) Me.grpLibraries.ResumeLayout(False)
CType(Me.grpGeneral, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.grpGeneral, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpGeneral.ResumeLayout(False) Me.grpGeneral.ResumeLayout(False)
Me.grpGeneral.PerformLayout() Me.grpGeneral.PerformLayout()
CType(Me.txtFavDir.Properties, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtUSDir.Properties, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@ -191,14 +191,14 @@ Partial Class frmSettings
Friend WithEvents rcMain As DevExpress.XtraBars.Ribbon.RibbonControl Friend WithEvents rcMain As DevExpress.XtraBars.Ribbon.RibbonControl
Friend WithEvents rpGeneral As DevExpress.XtraBars.Ribbon.RibbonPage Friend WithEvents rpGeneral As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents rpgGeneral As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents rpgGeneral As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents grpPaths As DevExpress.XtraEditors.GroupControl Friend WithEvents grpLibraries As DevExpress.XtraEditors.GroupControl
Friend WithEvents btnSave As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnSave As DevExpress.XtraBars.BarButtonItem
Friend WithEvents btnPathAdd As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnPathAdd As DevExpress.XtraBars.BarButtonItem
Friend WithEvents btnPathDelete As DevExpress.XtraBars.BarButtonItem Friend WithEvents btnPathDelete As DevExpress.XtraBars.BarButtonItem
Friend WithEvents rpgPaths As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents rpgPaths As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents FBD As FolderBrowserDialog Friend WithEvents FBD As FolderBrowserDialog
Friend WithEvents grpGeneral As DevExpress.XtraEditors.GroupControl Friend WithEvents grpGeneral As DevExpress.XtraEditors.GroupControl
Friend WithEvents lblFavDir As DevExpress.XtraEditors.LabelControl Friend WithEvents btnUSDir As DevExpress.XtraEditors.SimpleButton
Friend WithEvents txtFavDir As DevExpress.XtraEditors.TextEdit Friend WithEvents lblUSDir As DevExpress.XtraEditors.LabelControl
Friend WithEvents btnFavDir As DevExpress.XtraEditors.SimpleButton Friend WithEvents txtUSDir As DevExpress.XtraEditors.TextEdit
End Class End Class

View File

@ -120,7 +120,7 @@
<assembly alias="DevExpress.Data.v22.1" name="DevExpress.Data.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> <assembly alias="DevExpress.Data.v22.1" name="DevExpress.Data.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="btnSave.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.1" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnSave.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi40 AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjEsIFZlcnNpb249MjIuMS42
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMICAAAC77u/ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMICAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi

View File

@ -9,26 +9,16 @@ Public Class frmSettings
End Sub End Sub
Private Sub LoadSettings() Private Sub LoadSettings()
txtFavDir.Text = My.Settings.FavDir txtUSDir.Text = My.Settings.UltraStarDirectory
fillPaths() fillPaths()
End Sub End Sub
Private Async Sub fillPaths() Private Async Sub fillPaths()
Dim con = DB.getConnection
Dim cmd As New SqliteCommand(Nothing, con)
Dim reader As SQLiteDataReader
cmd.CommandText = "SELECT p_path FROM t_paths ORDER BY p_path"
Await con.OpenAsync()
reader = cmd.ExecuteReader
lstPaths.Items.Clear() lstPaths.Items.Clear()
Do While Await reader.ReadAsync For Each p As String In Await LibraryRepository.GetLibraries
lstPaths.Items.Add(CStr(reader("p_path"))) lstPaths.Items.Add(p)
Loop Next
reader.Close()
con.Close()
End Sub End Sub
Private Sub btnPathAdd_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnPathAdd.ItemClick Private Sub btnPathAdd_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnPathAdd.ItemClick
@ -47,31 +37,16 @@ Public Class frmSettings
Private Sub SaveSettings() Private Sub SaveSettings()
'Allgemein speichern 'Allgemein speichern
My.Settings.FavDir = txtFavDir.Text My.Settings.UltraStarDirectory = txtUSDir.Text
My.Settings.Save() My.Settings.Save()
'Pfade speichern 'Pfade speichern
Dim con = DB.getConnection LibraryRepository.AddLibraries(ToAdd)
Dim cmd As New SqliteCommand(Nothing, con)
cmd.Parameters.Add("@path", DbType.String)
con.OpenAsync()
cmd.CommandText = "INSERT INTO t_paths (p_path) VALUES (@path)"
For Each pfad As String In ToAdd
cmd.Parameters("@path").Value = pfad
cmd.ExecuteNonQuery()
Next
ToAdd.Clear() ToAdd.Clear()
cmd.CommandText = "DELETE FROM t_paths WHERE p_path = @path" LibraryRepository.DeleteLibraries(ToDelete)
For Each pfad As String In ToDelete
cmd.Parameters("@path").Value = pfad
cmd.ExecuteNonQuery()
Next
ToDelete.Clear() ToDelete.Clear()
con.Close()
End Sub End Sub
Private Sub btnPathDelete_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnPathDelete.ItemClick Private Sub btnPathDelete_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnPathDelete.ItemClick
@ -93,9 +68,9 @@ Public Class frmSettings
End If End If
End Sub End Sub
Private Sub btnUSDX_Click(sender As Object, e As EventArgs) Handles btnFavDir.Click Private Sub btnUSDX_Click(sender As Object, e As EventArgs) Handles btnUSDir.Click
If FBD.ShowDialog = DialogResult.OK Then If FBD.ShowDialog = DialogResult.OK Then
txtFavDir.Text = FBD.SelectedPath txtUSDir.Text = FBD.SelectedPath
End If End If
End Sub End Sub
End Class End Class

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="EntityFramework" version="6.4.4" targetFramework="net472" /> <package id="EntityFramework" version="6.4.4" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.2" targetFramework="net48" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.117.0" targetFramework="net472" /> <package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.118.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" /> <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Data.SQLite" version="1.0.117.0" targetFramework="net472" /> <package id="System.Data.SQLite" version="1.0.118.0" targetFramework="net48" />
<package id="System.Data.SQLite.Core" version="1.0.117.0" targetFramework="net472" /> <package id="System.Data.SQLite.Core" version="1.0.118.0" targetFramework="net48" />
<package id="System.Data.SQLite.EF6" version="1.0.117.0" targetFramework="net472" /> <package id="System.Data.SQLite.EF6" version="1.0.118.0" targetFramework="net48" />
<package id="System.Data.SQLite.Linq" version="1.0.117.0" targetFramework="net472" /> <package id="System.Data.SQLite.Linq" version="1.0.118.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" /> <package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />