diff --git a/Mear/Mear/Models/Artist.cs b/Mear/Mear/Models/Artist.cs new file mode 100644 index 0000000..d033d89 --- /dev/null +++ b/Mear/Mear/Models/Artist.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Newtonsoft.Json; + +namespace Mear.Models +{ + public class Artist + { + [JsonProperty("id")] + public int Id { get; set; } + [JsonProperty("name")] + public string Name { get; set; } + [JsonProperty("song_count")] + public int SongCount { get; set; } + } +} diff --git a/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs b/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs new file mode 100644 index 0000000..d1c702b --- /dev/null +++ b/Mear/Mear/Repositories/Remote/RemoteArtistRepository.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 RemoteArtistRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + #endregion + + + #region Methods + public List RetrieveArtists() + { + try + { + var client = new RestClient(API.ApiUrl); + var apiEndpoint = $@"api/{API.APIVersion}/artist"; + var request = new RestRequest(apiEndpoint, Method.GET); + + var tkRepo = new DBTokenRepository(); + var token = tkRepo.RetrieveToken(); + request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); + + var response = client.Execute(request); + + var artists = JsonConvert.DeserializeObject>(response.Content); + + return artists; + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return null; + } + #endregion + } +} diff --git a/Mear/Mear/ViewModels/ArtistViewModel.cs b/Mear/Mear/ViewModels/ArtistViewModel.cs index 38165a1..8d0c656 100644 --- a/Mear/Mear/ViewModels/ArtistViewModel.cs +++ b/Mear/Mear/ViewModels/ArtistViewModel.cs @@ -1,10 +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 ArtistViewModel : BaseViewModel { + #region Fields + private ObservableCollection _artistItems; + private Command _refreshArtists; + #endregion + + + #region Properties + public ObservableCollection ArtistItems + { + get => _artistItems; + } + + public Command RefreshArtists + { + get => _refreshArtists; + } + #endregion + + + #region Constructors + public ArtistViewModel() + { + _artistItems = new ObservableCollection(); + _refreshArtists = new Command(async () => await PopulateArtistsAsync()); + + PopulateArtistsAsync(); + } + #endregion + + + #region Methods + private async Task PopulateArtistsAsync() + { + try + { + var artistRepo = new RemoteArtistRepository(); + var artists = artistRepo.RetrieveArtists().OrderBy(a => a.Name).ToList(); + + _artistItems.Clear(); + + foreach (var artist in artists) + { + _artistItems.Add(artist); + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + #endregion } } diff --git a/Mear/Mear/Views/ArtistView.xaml b/Mear/Mear/Views/ArtistView.xaml index ffa114b..39f8cac 100644 --- a/Mear/Mear/Views/ArtistView.xaml +++ b/Mear/Mear/Views/ArtistView.xaml @@ -4,10 +4,49 @@ 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.ArtistView"> - - - - + x:Class="Mear.Views.ArtistView" + xmlns:vm="clr-namespace:Mear.ViewModels" + Title="{Binding Title}"> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Mear/Mear/Views/ArtistView.xaml.cs b/Mear/Mear/Views/ArtistView.xaml.cs index bd56d62..7d70d3a 100644 --- a/Mear/Mear/Views/ArtistView.xaml.cs +++ b/Mear/Mear/Views/ArtistView.xaml.cs @@ -7,14 +7,39 @@ using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; +using Mear.ViewModels; + namespace Mear.Views { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class ArtistView : ContentPage { + #region Fields + private ArtistViewModel _viewModel; + #endregion + + + #region Properties + #endregion + + + #region Constructors public ArtistView() { InitializeComponent(); + + BindingContext = _viewModel = new ArtistViewModel(); } + #endregion + + + #region Methods + #region Events + private void ArtistListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) + { + + } + #endregion + #endregion } } \ No newline at end of file