119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading.Tasks;
 | 
						|
using System.Windows.Input;
 | 
						|
using Pixiview.UI;
 | 
						|
using Pixiview.Utils;
 | 
						|
using Xamarin.Forms;
 | 
						|
 | 
						|
namespace Pixiview.Illust
 | 
						|
{
 | 
						|
    public partial class RecommendsPage : IllustDataCollectionPage
 | 
						|
    {
 | 
						|
        public static readonly BindableProperty SegmentIndexProperty = BindableProperty.Create(
 | 
						|
            nameof(SegmentIndex), typeof(int), typeof(RecommendsPage), propertyChanged: OnSegmentIndexPropertyChanged);
 | 
						|
 | 
						|
        private static void OnSegmentIndexPropertyChanged(BindableObject obj, object oldValue, object newValue)
 | 
						|
        {
 | 
						|
            var page = (RecommendsPage)obj;
 | 
						|
            Task.Run(() => page.DoLoadIllusts());
 | 
						|
        }
 | 
						|
 | 
						|
        public int SegmentIndex
 | 
						|
        {
 | 
						|
            get => (int)GetValue(SegmentIndexProperty);
 | 
						|
            set => SetValue(SegmentIndexProperty, value);
 | 
						|
        }
 | 
						|
 | 
						|
        public RecommendsPage()
 | 
						|
        {
 | 
						|
            totalBarOffset = new Thickness(0, AppShell.TotalBarOffset.Top + 40, 0, 0);
 | 
						|
            navigationBarOffset = new Thickness(0, AppShell.NavigationBarOffset.Top + 40, 0, 0);
 | 
						|
 | 
						|
            Resources.Add("cardView", GetCardViewTemplate());
 | 
						|
            InitializeComponent();
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnUnload()
 | 
						|
        {
 | 
						|
            Illusts = IllustCollection.Empty;
 | 
						|
            loaded = false;
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnOrientationChanged(Orientation orientation)
 | 
						|
        {
 | 
						|
            int columns;
 | 
						|
            switch (orientation)
 | 
						|
            {
 | 
						|
                case Orientation.Portrait:
 | 
						|
                    columns = 2;
 | 
						|
                    PageTopMargin = totalBarOffset;
 | 
						|
                    break;
 | 
						|
                case Orientation.PortraitUpsideDown:
 | 
						|
                    columns = isPhone ? 4 : 2;
 | 
						|
                    PageTopMargin = isPhone ? navigationBarOffset : totalBarOffset;
 | 
						|
                    break;
 | 
						|
                case Orientation.Unknown:
 | 
						|
                case Orientation.LandscapeLeft:
 | 
						|
                case Orientation.LandscapeRight:
 | 
						|
                default:
 | 
						|
                    columns = 4;
 | 
						|
                    PageTopMargin = navigationBarOffset;
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
            if (Columns != columns)
 | 
						|
            {
 | 
						|
                App.DebugPrint($"ranking page, change columns to {columns}");
 | 
						|
                Columns = columns;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override IEnumerable<IllustItem> DoGetIllustList(IllustData data, ICommand command)
 | 
						|
        {
 | 
						|
            if (SegmentIndex == 1)
 | 
						|
            {
 | 
						|
                // by user
 | 
						|
                return data.body.page.recommendUser.SelectMany(i => i.illustIds)
 | 
						|
                    .Select(id =>
 | 
						|
                    {
 | 
						|
                        var item = data.body.thumbnails.illust.FirstOrDefault(l => l.illustId == id)?.ConvertToItem();
 | 
						|
                        if (item != null)
 | 
						|
                        {
 | 
						|
                            item.IllustTapped = command;
 | 
						|
                        }
 | 
						|
                        return item;
 | 
						|
                    });
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                // recommends
 | 
						|
                return data.body.page.recommend.Select(id =>
 | 
						|
                {
 | 
						|
                    var item = data.body.thumbnails.illust.FirstOrDefault(l => l.illustId == id)?.ConvertToItem();
 | 
						|
                    if (item != null)
 | 
						|
                    {
 | 
						|
                        item.IllustTapped = command;
 | 
						|
                    }
 | 
						|
                    return item;
 | 
						|
                });
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override IllustData DoLoadIllustData(bool force)
 | 
						|
        {
 | 
						|
            var illustData = Stores.LoadIllustData(force);
 | 
						|
            return illustData;
 | 
						|
        }
 | 
						|
 | 
						|
        private void Refresh_Clicked(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (Loading)
 | 
						|
            {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            StartLoad(true);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |