diff --git a/Mear/Mear/Models/Album.cs b/Mear/Mear/Models/Album.cs new file mode 100644 index 0000000..ffdf803 --- /dev/null +++ b/Mear/Mear/Models/Album.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Newtonsoft.Json; + +namespace Mear.Models +{ + public class Album + { + [JsonProperty("id")] + public int Id { get; set; } + [JsonProperty("title")] + public string Title { get; set; } + [JsonProperty("album_artist")] + public string AlbumArtist { get; set; } + [JsonProperty("song_count")] + public int SongCount { get; set; } + } +} diff --git a/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs b/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs new file mode 100644 index 0000000..16c610b --- /dev/null +++ b/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Newtonsoft.Json; +using RestSharp; + +using Mear.Constants.API; +using Mear.Models; +using Mear.Repositories.Database; + +namespace Mear.Repositories.Remote +{ + public class RemoteAlbumRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + #endregion + + + #region Methods + public List RetrieveAlbums() + { + try + { + var client = new RestClient(API.ApiUrl); + var apiEndpoint = $@"api/{API.APIVersion}/album"; + var request = new RestRequest(apiEndpoint, Method.GET); + + var tkRepo = new DBTokenRepository(); + var token = tkRepo.RetrieveToken(); + request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); + + var reponse = client.Execute(request); + + var albums = JsonConvert.DeserializeObject>(reponse.Content); + + return albums; + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return null; + } + #endregion + } +} diff --git a/Mear/Mear/ViewModels/AlbumViewModel.cs b/Mear/Mear/ViewModels/AlbumViewModel.cs new file mode 100644 index 0000000..f1926b9 --- /dev/null +++ b/Mear/Mear/ViewModels/AlbumViewModel.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xamarin.Forms; + +using Mear.Models; +using Mear.Repositories.Remote; + +namespace Mear.ViewModels +{ + public class AlbumViewModel : BaseViewModel + { + #region Fields + private ObservableCollection _albumItems; + private Command _refreshAlbums; + #endregion + + + #region Properties + public ObservableCollection AlbumItems + { + get => _albumItems; + } + + public Command RefreshAlbums + { + get => _refreshAlbums; + } + #endregion + + + #region Constructors + public AlbumViewModel() + { + _albumItems = new ObservableCollection(); + _refreshAlbums = new Command(async () => await PopulateAlbumsAsync()); + + PopulateAlbumsAsync(); + } + #endregion + + + #region Methods + private async Task PopulateAlbumsAsync() + { + try + { + var albumRepo = new RemoteAlbumRepository(); + var albums = albumRepo.RetrieveAlbums().OrderBy(a => a.Title).ToList(); + + _albumItems.Clear(); + + foreach (var album in albums) + { + _albumItems.Add(album); + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + #endregion + } +} diff --git a/Mear/Mear/ViewModels/ArtistViewModel.cs b/Mear/Mear/ViewModels/ArtistViewModel.cs new file mode 100644 index 0000000..38165a1 --- /dev/null +++ b/Mear/Mear/ViewModels/ArtistViewModel.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Mear.ViewModels +{ + public class ArtistViewModel : BaseViewModel + { + } +} diff --git a/Mear/Mear/Views/AlbumView.xaml b/Mear/Mear/Views/AlbumView.xaml index 51e35a2..a0187b3 100644 --- a/Mear/Mear/Views/AlbumView.xaml +++ b/Mear/Mear/Views/AlbumView.xaml @@ -4,10 +4,48 @@ xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" - x:Class="Mear.Views.AlbumView"> - - - - + x:Class="Mear.Views.AlbumView" + xmlns:vm="clr-namespace:Mear.ViewModels" + Title="{Binding Title}"> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Mear/Mear/Views/AlbumView.xaml.cs b/Mear/Mear/Views/AlbumView.xaml.cs index 43f2ebe..5b55712 100644 --- a/Mear/Mear/Views/AlbumView.xaml.cs +++ b/Mear/Mear/Views/AlbumView.xaml.cs @@ -7,14 +7,38 @@ using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; +using Mear.ViewModels; + namespace Mear.Views { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class AlbumView : ContentPage { + #region Fields + private AlbumViewModel _viewModel; + #endregion + + + #region Properties + #endregion + + + #region Constructors public AlbumView() { InitializeComponent(); + + BindingContext = _viewModel = new AlbumViewModel(); } + #endregion + + #region Methods + #region Events + private void AlbumListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) + { + + } + #endregion + #endregion } } \ No newline at end of file diff --git a/Mear/Mear/Views/MusicLibrary.xaml b/Mear/Mear/Views/MusicLibrary.xaml index 7bb37c2..f56187c 100644 --- a/Mear/Mear/Views/MusicLibrary.xaml +++ b/Mear/Mear/Views/MusicLibrary.xaml @@ -6,6 +6,11 @@ mc:Ignorable="d" xmlns:views="clr-namespace:Mear.Views" x:Class="Mear.Views.MusicLibrary"> + + + + + diff --git a/Mear/Mear/Views/MusicLibrary.xaml.cs b/Mear/Mear/Views/MusicLibrary.xaml.cs index 459d745..4e409ca 100644 --- a/Mear/Mear/Views/MusicLibrary.xaml.cs +++ b/Mear/Mear/Views/MusicLibrary.xaml.cs @@ -32,6 +32,16 @@ namespace Mear.Views #region Methods + #region Events + private void Options_Clicked(object sender, EventArgs e) + { + var i = 0; + } + private void Settings_Clicked(object sender, EventArgs e) + { + } + #endregion + #region Test public void TokenTest() { diff --git a/Mear/Mear/Views/SongView.xaml b/Mear/Mear/Views/SongView.xaml index 9c139d0..ba6c38e 100644 --- a/Mear/Mear/Views/SongView.xaml +++ b/Mear/Mear/Views/SongView.xaml @@ -18,11 +18,12 @@ VerticalOptions="FillAndExpand" HasUnevenRows="False" IsPullToRefreshEnabled="True" + RowHeight="75" RefreshCommand="{Binding RefreshSongs}" ItemSelected="SongListView_ItemSelected" > - + @@ -36,20 +37,21 @@