Added Artist view
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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<Artist> 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<List<Artist>>(response.Content);
|
||||
|
||||
return artists;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var msg = ex.Message;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -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<Artist> _artistItems;
|
||||
private Command _refreshArtists;
|
||||
#endregion
|
||||
|
||||
|
||||
#region Properties
|
||||
public ObservableCollection<Artist> ArtistItems
|
||||
{
|
||||
get => _artistItems;
|
||||
}
|
||||
|
||||
public Command RefreshArtists
|
||||
{
|
||||
get => _refreshArtists;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region Constructors
|
||||
public ArtistViewModel()
|
||||
{
|
||||
_artistItems = new ObservableCollection<Artist>();
|
||||
_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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
<ContentPage.Content>
|
||||
<StackLayout>
|
||||
<Label Text="Artist view!" />
|
||||
</StackLayout>
|
||||
</ContentPage.Content>
|
||||
x:Class="Mear.Views.ArtistView"
|
||||
xmlns:vm="clr-namespace:Mear.ViewModels"
|
||||
Title="{Binding Title}">
|
||||
|
||||
<ContentPage.BindingContext>
|
||||
<vm:ArtistViewModel />
|
||||
</ContentPage.BindingContext>
|
||||
|
||||
<StackLayout>
|
||||
<ListView x:Name="ArtistListView"
|
||||
ItemsSource="{Binding ArtistItems}"
|
||||
VerticalOptions="FillAndExpand"
|
||||
HasUnevenRows="False"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RowHeight="80"
|
||||
RefreshCommand="{Binding RefreshArtists}"
|
||||
ItemSelected="ArtistListView_ItemSelected" >
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell>
|
||||
<Grid Padding="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackLayout Grid.Row="0" Grid.Column="0">
|
||||
<Label Text="{Binding Name}"
|
||||
d:Text="{Binding .}"
|
||||
LineBreakMode="NoWrap"
|
||||
FontSize="16" />
|
||||
<Label Text="{Binding SongCount}"
|
||||
d:Text="{Binding .}"
|
||||
LineBreakMode="NoWrap"
|
||||
FontSize="16" />
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
</ViewCell>
|
||||
</DataTemplate>
|
||||
</ListView.ItemTemplate>
|
||||
</ListView>
|
||||
</StackLayout>
|
||||
</ContentPage>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user