Implemented Download functionality and retrieving the song metadata from the local database. Next is to indicate which songs are download on the UI and then the ability to delete the downloaded music. #16 and #49

This commit is contained in:
amazing-username
2019-06-01 14:17:10 -04:00
parent 7959458c5e
commit 9c2b8a71b7
9 changed files with 148 additions and 32 deletions
-4
View File
@@ -52,8 +52,4 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Folder Include="Repositories\Local\" />
</ItemGroup>
</Project>
+2
View File
@@ -31,5 +31,7 @@ namespace Mear.Models
public string Filename { get; set; }
[JsonIgnore]
public string SongPath { set; get; }
[JsonIgnore]
public bool Downloaded { get; set; } = false;
}
}
+14 -1
View File
@@ -56,10 +56,10 @@ namespace Mear.Playback
await CrossMediaManager.Current.Play(tmpFile);
song.SongPath = tmpFile;
}
return song;
}
}
catch (Exception ex)
{
var msg = ex.Message;
@@ -67,6 +67,19 @@ namespace Mear.Playback
return null;
}
public static async Task PlaySong(Song song)
{
try
{
var songPath = song.SongPath;
await CrossMediaManager.Current.Play(songPath);
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
#endregion
}
}
@@ -29,6 +29,21 @@ namespace Mear.Repositories.Database
#region Methods
public List<Song> RetrieveSongs()
{
try
{
var songs = _Db.Table<Song>().ToList();
return songs;
}
catch (Exception ex)
{
var msg = ex.Message;
}
return null;
}
public Song RetrieveSong(int id)
{
try
@@ -68,8 +83,15 @@ namespace Mear.Repositories.Database
_Db.CreateTable<Song>();
}
try
{
_Db.Insert(song);
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
public void UpdateSong(Song song)
{
if (!DoesTableExist("Song"))
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Text;
using Mear.Models;
using Mear.Repositories.Database;
namespace Mear.Repositories.Local
{
public class LocalSongRepository
{
#region Fields
#endregion
#region Properties
#endregion
#region Contructors
#endregion
#region Methods
public List<Song> RetrieveSongs()
{
try
{
var dbSongRepo = new DBSongRepository();
var songs = dbSongRepo.RetrieveSongs();
if (songs == null)
{
throw new Exception("Unable to retrieve song metadata from the local database");
}
return songs;
}
catch (Exception ex)
{
var msg = ex.Message;
}
return null;
}
#endregion
}
}
@@ -74,6 +74,11 @@ namespace Mear.Repositories.Remote
var response = client.DownloadData(request);
}
song.Downloaded = true;
song.SongPath = path;
var dbSongRepo = new DBSongRepository();
dbSongRepo.SaveSong(song);
}
catch (Exception ex)
{
+47 -2
View File
@@ -8,6 +8,7 @@ using System.Threading.Tasks;
using Xamarin.Forms;
using Mear.Models;
using Mear.Repositories.Local;
using Mear.Repositories.Remote;
namespace Mear.ViewModels
@@ -50,7 +51,19 @@ namespace Mear.ViewModels
public void PopulateSongs()
{
var songRepo = new RemoteSongRepository();
var songs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList();
var localSongRepo = new LocalSongRepository();
var lclSongs = localSongRepo.RetrieveSongs();
var rmtSongs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList();
var songs = new List<Song>();
if (lclSongs != null)
{
lclSongs = lclSongs.OrderBy(s => s.Title).ToList();
songs = MergeSongs(lclSongs, rmtSongs);
}
else
{
songs = rmtSongs;
}
foreach (var song in songs)
{
@@ -58,12 +71,44 @@ namespace Mear.ViewModels
}
}
private List<Song> MergeSongs(List<Song> local, List<Song> remote)
{
try
{
foreach (Song lclSong in local)
{
Song song = remote.Find(s => (s.Title.Equals(lclSong.Title)));
remote.Remove(song);
remote.Add(lclSong);
}
return remote;
}
catch (Exception ex)
{
var msg = ex.Message;
}
return null;
}
private async Task PopulateSongsAsync()
{
try
{
var songRepo = new RemoteSongRepository();
var songs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList();
var localSongRepo = new LocalSongRepository();
var lclSongs = localSongRepo.RetrieveSongs();
var rmtSongs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList();
var songs = new List<Song>();
if (lclSongs != null)
{
lclSongs = lclSongs.OrderBy(s => s.Title).ToList();
songs = MergeSongs(lclSongs, rmtSongs);
}
else
{
songs = rmtSongs;
}
_songItems.Clear();
-22
View File
@@ -8,10 +8,6 @@
xmlns:vm="clr-namespace:Mear.ViewModels"
Title="{Binding Title}">
<!--
<ContentPage.Content>
-->
<StackLayout>
<StackLayout Padding="10" VerticalOptions="EndAndExpand">
<StackLayout VerticalOptions="End">
@@ -31,21 +27,6 @@
<Label x:Name="AlbumName"
Text="{Binding Album}"/>
</StackLayout>
<!--
<StackLayout>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</StackLayout>
-->
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
@@ -86,9 +67,6 @@
</StackLayout>
</StackLayout>
</StackLayout>
<!--
</ContentPage.Content>
-->
<ContentPage.ToolbarItems>
<ToolbarItem Name="Download" Order="Secondary" Priority="1" Clicked="Download_Clicked" />
</ContentPage.ToolbarItems>
+7
View File
@@ -49,7 +49,14 @@ namespace Mear.Views
try
{
var song = (Song)SongListView.SelectedItem;
if (song.Downloaded)
{
await MearPlayer.PlaySong(song);
}
else
{
song = await MearPlayer.StreamSongDemoAsync(song);
}
await Navigation.PushModalAsync(new NavigationPage(new MearPlayerView(song)));
}
catch (Exception ex)