Add - Added add date to history series
Add - History sorting by add date Add - Sorting by ascending/descending Add - Calendar hide dubs Add - Custom calendar dub filter Chg - Changed the calendar options
This commit is contained in:
parent
acdbc7467b
commit
c4922af741
|
@ -239,30 +239,46 @@ public class CrEpisode(){
|
||||||
return retMeta;
|
return retMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<CrBrowseEpisodeBase?> GetNewEpisodes(string? crLocale){
|
public async Task<CrBrowseEpisodeBase?> GetNewEpisodes(string? crLocale, int requestAmount){
|
||||||
|
CrBrowseEpisodeBase? complete = new CrBrowseEpisodeBase();
|
||||||
NameValueCollection query = HttpUtility.ParseQueryString(new UriBuilder().Query);
|
complete.Data =[];
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(crLocale)){
|
var i = 0;
|
||||||
query["locale"] = crLocale;
|
|
||||||
}
|
|
||||||
|
|
||||||
query["n"] = "200";
|
do{
|
||||||
query["sort_by"] = "newly_added";
|
NameValueCollection query = HttpUtility.ParseQueryString(new UriBuilder().Query);
|
||||||
query["type"] = "episode";
|
|
||||||
|
|
||||||
var request = HttpClientReq.CreateRequestMessage($"{Api.Browse}", HttpMethod.Get, true, false, query);
|
if (!string.IsNullOrEmpty(crLocale)){
|
||||||
|
query["locale"] = crLocale;
|
||||||
|
}
|
||||||
|
|
||||||
var response = await HttpClientReq.Instance.SendHttpRequest(request);
|
query["start"] = i + "";
|
||||||
|
query["n"] = "50";
|
||||||
|
query["sort_by"] = "newly_added";
|
||||||
|
query["type"] = "episode";
|
||||||
|
|
||||||
if (!response.IsOk){
|
var request = HttpClientReq.CreateRequestMessage($"{Api.Browse}", HttpMethod.Get, true, false, query);
|
||||||
Console.Error.WriteLine("Series Request Failed");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
CrBrowseEpisodeBase? series = Helpers.Deserialize<CrBrowseEpisodeBase>(response.ResponseContent, crunInstance.SettingsJsonSerializerSettings);
|
var response = await HttpClientReq.Instance.SendHttpRequest(request);
|
||||||
|
|
||||||
|
|
||||||
return series;
|
if (!response.IsOk){
|
||||||
|
Console.Error.WriteLine("Series Request Failed");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
CrBrowseEpisodeBase? series = Helpers.Deserialize<CrBrowseEpisodeBase>(response.ResponseContent, crunInstance.SettingsJsonSerializerSettings);
|
||||||
|
|
||||||
|
if (series != null){
|
||||||
|
complete.Total = series.Total;
|
||||||
|
if (series.Data != null) complete.Data.AddRange(series.Data);
|
||||||
|
} else{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
i += 50;
|
||||||
|
} while (i < requestAmount);
|
||||||
|
|
||||||
|
|
||||||
|
return complete;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -159,10 +159,12 @@ public class Crunchyroll{
|
||||||
CrunOptions.AccentColor = Colors.SlateBlue.ToString();
|
CrunOptions.AccentColor = Colors.SlateBlue.ToString();
|
||||||
CrunOptions.Theme = "System";
|
CrunOptions.Theme = "System";
|
||||||
CrunOptions.SelectedCalendarLanguage = "default";
|
CrunOptions.SelectedCalendarLanguage = "default";
|
||||||
|
CrunOptions.CalendarDubFilter = "none";
|
||||||
CrunOptions.DlVideoOnce = true;
|
CrunOptions.DlVideoOnce = true;
|
||||||
CrunOptions.StreamEndpoint = "web/firefox";
|
CrunOptions.StreamEndpoint = "web/firefox";
|
||||||
CrunOptions.SubsAddScaledBorder = ScaledBorderAndShadowSelection.ScaledBorderAndShadowYes;
|
CrunOptions.SubsAddScaledBorder = ScaledBorderAndShadowSelection.ScaledBorderAndShadowYes;
|
||||||
CrunOptions.HistoryLang = "";
|
CrunOptions.HistoryLang = "";
|
||||||
|
|
||||||
|
|
||||||
CrunOptions.History = true;
|
CrunOptions.History = true;
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,8 @@ public class History(){
|
||||||
var seriesId = episode.SeriesId;
|
var seriesId = episode.SeriesId;
|
||||||
var historySeries = crunInstance.HistoryList.FirstOrDefault(series => series.SeriesId == seriesId);
|
var historySeries = crunInstance.HistoryList.FirstOrDefault(series => series.SeriesId == seriesId);
|
||||||
if (historySeries != null){
|
if (historySeries != null){
|
||||||
|
historySeries.HistorySeriesAddDate ??= DateTime.Now;
|
||||||
|
|
||||||
var historySeason = historySeries.Seasons.FirstOrDefault(s => s.SeasonId == episode.SeasonId);
|
var historySeason = historySeries.Seasons.FirstOrDefault(s => s.SeasonId == episode.SeasonId);
|
||||||
|
|
||||||
await RefreshSeriesData(seriesId, historySeries);
|
await RefreshSeriesData(seriesId, historySeries);
|
||||||
|
@ -184,6 +186,7 @@ public class History(){
|
||||||
SeriesTitle = episode.SeriesTitle,
|
SeriesTitle = episode.SeriesTitle,
|
||||||
SeriesId = episode.SeriesId,
|
SeriesId = episode.SeriesId,
|
||||||
Seasons =[],
|
Seasons =[],
|
||||||
|
HistorySeriesAddDate = DateTime.Now,
|
||||||
};
|
};
|
||||||
crunInstance.HistoryList.Add(historySeries);
|
crunInstance.HistoryList.Add(historySeries);
|
||||||
var newSeason = NewHistorySeason(episode);
|
var newSeason = NewHistorySeason(episode);
|
||||||
|
@ -208,6 +211,8 @@ public class History(){
|
||||||
var seriesId = firstEpisode.SeriesId;
|
var seriesId = firstEpisode.SeriesId;
|
||||||
var historySeries = crunInstance.HistoryList.FirstOrDefault(series => series.SeriesId == seriesId);
|
var historySeries = crunInstance.HistoryList.FirstOrDefault(series => series.SeriesId == seriesId);
|
||||||
if (historySeries != null){
|
if (historySeries != null){
|
||||||
|
historySeries.HistorySeriesAddDate ??= DateTime.Now;
|
||||||
|
|
||||||
var historySeason = historySeries.Seasons.FirstOrDefault(s => s.SeasonId == firstEpisode.SeasonId);
|
var historySeason = historySeries.Seasons.FirstOrDefault(s => s.SeasonId == firstEpisode.SeasonId);
|
||||||
|
|
||||||
await RefreshSeriesData(seriesId, historySeries);
|
await RefreshSeriesData(seriesId, historySeries);
|
||||||
|
@ -255,6 +260,7 @@ public class History(){
|
||||||
SeriesTitle = firstEpisode.SeriesTitle,
|
SeriesTitle = firstEpisode.SeriesTitle,
|
||||||
SeriesId = firstEpisode.SeriesId,
|
SeriesId = firstEpisode.SeriesId,
|
||||||
Seasons =[],
|
Seasons =[],
|
||||||
|
HistorySeriesAddDate = DateTime.Now,
|
||||||
};
|
};
|
||||||
crunInstance.HistoryList.Add(historySeries);
|
crunInstance.HistoryList.Add(historySeries);
|
||||||
|
|
||||||
|
@ -307,9 +313,13 @@ public class History(){
|
||||||
|
|
||||||
public void SortItems(){
|
public void SortItems(){
|
||||||
var currentSortingType = Crunchyroll.Instance.CrunOptions.HistoryPageProperties?.SelectedSorting ?? SortingType.SeriesTitle;
|
var currentSortingType = Crunchyroll.Instance.CrunOptions.HistoryPageProperties?.SelectedSorting ?? SortingType.SeriesTitle;
|
||||||
|
var sortingDir = Crunchyroll.Instance.CrunOptions.HistoryPageProperties != null && Crunchyroll.Instance.CrunOptions.HistoryPageProperties.Ascending;
|
||||||
|
DateTime today = DateTime.UtcNow.Date;
|
||||||
switch (currentSortingType){
|
switch (currentSortingType){
|
||||||
case SortingType.SeriesTitle:
|
case SortingType.SeriesTitle:
|
||||||
var sortedList = Crunchyroll.Instance.HistoryList.OrderBy(s => s.SeriesTitle).ToList();
|
var sortedList = sortingDir
|
||||||
|
? Crunchyroll.Instance.HistoryList.OrderByDescending(s => s.SeriesTitle).ToList()
|
||||||
|
: Crunchyroll.Instance.HistoryList.OrderBy(s => s.SeriesTitle).ToList();
|
||||||
|
|
||||||
Crunchyroll.Instance.HistoryList.Clear();
|
Crunchyroll.Instance.HistoryList.Clear();
|
||||||
|
|
||||||
|
@ -320,23 +330,47 @@ public class History(){
|
||||||
|
|
||||||
case SortingType.NextAirDate:
|
case SortingType.NextAirDate:
|
||||||
|
|
||||||
DateTime today = DateTime.UtcNow.Date;
|
var sortedSeriesDates = sortingDir
|
||||||
|
? Crunchyroll.Instance.HistoryList
|
||||||
var sortedSeriesDates = Crunchyroll.Instance.HistoryList
|
.OrderByDescending(s => {
|
||||||
.OrderByDescending(s => s.SonarrNextAirDate == "Today")
|
var date = ParseDate(s.SonarrNextAirDate, today);
|
||||||
.ThenBy(s => s.SonarrNextAirDate == "Today" ? s.SeriesTitle : null)
|
return date.HasValue ? date.Value : DateTime.MinValue;
|
||||||
.ThenBy(s => {
|
})
|
||||||
var date = ParseDate(s.SonarrNextAirDate, today);
|
.ThenByDescending(s => s.SonarrNextAirDate == "Today" ? 1 : 0)
|
||||||
return date.HasValue ? date.Value : DateTime.MaxValue;
|
.ThenBy(s => string.IsNullOrEmpty(s.SonarrNextAirDate) ? 1 : 0)
|
||||||
})
|
.ThenBy(s => s.SeriesTitle)
|
||||||
.ThenBy(s => s.SeriesTitle)
|
.ToList()
|
||||||
.ToList();
|
: Crunchyroll.Instance.HistoryList
|
||||||
|
.OrderByDescending(s => s.SonarrNextAirDate == "Today")
|
||||||
|
.ThenBy(s => s.SonarrNextAirDate == "Today" ? s.SeriesTitle : null)
|
||||||
|
.ThenBy(s => {
|
||||||
|
var date = ParseDate(s.SonarrNextAirDate, today);
|
||||||
|
return date.HasValue ? date.Value : DateTime.MaxValue;
|
||||||
|
})
|
||||||
|
.ThenBy(s => s.SeriesTitle)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
Crunchyroll.Instance.HistoryList.Clear();
|
Crunchyroll.Instance.HistoryList.Clear();
|
||||||
|
|
||||||
Crunchyroll.Instance.HistoryList.AddRange(sortedSeriesDates);
|
Crunchyroll.Instance.HistoryList.AddRange(sortedSeriesDates);
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
case SortingType.HistorySeriesAddDate:
|
||||||
|
|
||||||
|
var sortedSeriesAddDates = Crunchyroll.Instance.HistoryList
|
||||||
|
.OrderBy(s => sortingDir
|
||||||
|
? -(s.HistorySeriesAddDate?.Date.Ticks ?? DateTime.MinValue.Ticks)
|
||||||
|
: s.HistorySeriesAddDate?.Date.Ticks ?? DateTime.MaxValue.Ticks)
|
||||||
|
.ThenBy(s => s.SeriesTitle)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
Crunchyroll.Instance.HistoryList.Clear();
|
||||||
|
|
||||||
|
Crunchyroll.Instance.HistoryList.AddRange(sortedSeriesAddDates);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -353,6 +387,8 @@ public class History(){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private string GetSeriesThumbnail(CrSeriesBase series){
|
private string GetSeriesThumbnail(CrSeriesBase series){
|
||||||
// var series = await crunInstance.CrSeries.SeriesById(seriesId);
|
// var series = await crunInstance.CrSeries.SeriesById(seriesId);
|
||||||
|
|
||||||
|
@ -496,6 +532,7 @@ public class History(){
|
||||||
if (ele == null){
|
if (ele == null){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !string.IsNullOrEmpty(historyEpisode.EpisodeDescription) && !string.IsNullOrEmpty(ele.Overview) && Helpers.CalculateCosineSimilarity(ele.Overview, historyEpisode.EpisodeDescription) > 0.8;
|
return !string.IsNullOrEmpty(historyEpisode.EpisodeDescription) && !string.IsNullOrEmpty(ele.Overview) && Helpers.CalculateCosineSimilarity(ele.Overview, historyEpisode.EpisodeDescription) > 0.8;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,8 @@ public enum SortingType{
|
||||||
SeriesTitle,
|
SeriesTitle,
|
||||||
[EnumMember(Value = "Next Air Date")]
|
[EnumMember(Value = "Next Air Date")]
|
||||||
NextAirDate,
|
NextAirDate,
|
||||||
|
[EnumMember(Value = "History Series Add Date")]
|
||||||
|
HistorySeriesAddDate,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SonarrCoverType{
|
public enum SonarrCoverType{
|
||||||
|
|
|
@ -131,6 +131,15 @@ public class CrDownloadOptions{
|
||||||
|
|
||||||
[YamlMember(Alias = "calendar_language", ApplyNamingConventions = false)]
|
[YamlMember(Alias = "calendar_language", ApplyNamingConventions = false)]
|
||||||
public string? SelectedCalendarLanguage{ get; set; }
|
public string? SelectedCalendarLanguage{ get; set; }
|
||||||
|
|
||||||
|
[YamlMember(Alias = "calendar_dub_filter", ApplyNamingConventions = false)]
|
||||||
|
public string? CalendarDubFilter{ get; set; }
|
||||||
|
|
||||||
|
[YamlMember(Alias = "calendar_custom", ApplyNamingConventions = false)]
|
||||||
|
public bool CustomCalendar{ get; set; }
|
||||||
|
|
||||||
|
[YamlMember(Alias = "calendar_hide_dubs", ApplyNamingConventions = false)]
|
||||||
|
public bool CalendarHideDubs{ get; set; }
|
||||||
|
|
||||||
[YamlMember(Alias = "history", ApplyNamingConventions = false)]
|
[YamlMember(Alias = "history", ApplyNamingConventions = false)]
|
||||||
public bool History{ get; set; }
|
public bool History{ get; set; }
|
||||||
|
|
|
@ -49,6 +49,9 @@ public class HistorySeries : INotifyPropertyChanged{
|
||||||
[JsonProperty("series_download_path")]
|
[JsonProperty("series_download_path")]
|
||||||
public string? SeriesDownloadPath{ get; set; }
|
public string? SeriesDownloadPath{ get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("history_series_add_date")]
|
||||||
|
public DateTime? HistorySeriesAddDate{ get; set; }
|
||||||
|
|
||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
|
@ -75,7 +75,7 @@ public partial class AddDownloadPageViewModel : ViewModelBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task UpdateSearch(string value){
|
private async Task UpdateSearch(string value){
|
||||||
var searchResults = await Crunchyroll.Instance.CrSeries.Search(value, "");
|
var searchResults = await Crunchyroll.Instance.CrSeries.Search(value, Crunchyroll.Instance.CrunOptions.HistoryLang);
|
||||||
|
|
||||||
var searchItems = searchResults?.Data?.First().Items;
|
var searchItems = searchResults?.Data?.First().Items;
|
||||||
SearchItems.Clear();
|
SearchItems.Clear();
|
||||||
|
|
|
@ -15,15 +15,24 @@ namespace CRD.ViewModels;
|
||||||
public partial class CalendarPageViewModel : ViewModelBase{
|
public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
public ObservableCollection<CalendarDay> CalendarDays{ get; set; }
|
public ObservableCollection<CalendarDay> CalendarDays{ get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
private ComboBoxItem? _currentCalendarLanguage;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private bool _showLoading = false;
|
private bool _showLoading;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private bool _customCalendar = false;
|
private bool _customCalendar;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool _hideDubs;
|
||||||
|
|
||||||
|
public ObservableCollection<ComboBoxItem> CalendarDubFilter{ get; } = new(){
|
||||||
|
new ComboBoxItem(){ Content = "none" },
|
||||||
|
};
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private ComboBoxItem? _currentCalendarDubFilter;
|
||||||
|
|
||||||
public ObservableCollection<ComboBoxItem> CalendarLanguage{ get; } = new(){
|
public ObservableCollection<ComboBoxItem> CalendarLanguage{ get; } = new(){
|
||||||
new ComboBoxItem(){ Content = "en-us" },
|
new ComboBoxItem(){ Content = "en-us" },
|
||||||
new ComboBoxItem(){ Content = "es" },
|
new ComboBoxItem(){ Content = "es" },
|
||||||
|
@ -37,13 +46,30 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
new ComboBoxItem(){ Content = "ru" },
|
new ComboBoxItem(){ Content = "ru" },
|
||||||
new ComboBoxItem(){ Content = "hi" },
|
new ComboBoxItem(){ Content = "hi" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private ComboBoxItem? _currentCalendarLanguage;
|
||||||
|
|
||||||
private CalendarWeek? currentWeek;
|
private CalendarWeek? currentWeek;
|
||||||
|
|
||||||
|
private bool loading = true;
|
||||||
|
|
||||||
public CalendarPageViewModel(){
|
public CalendarPageViewModel(){
|
||||||
CalendarDays = new ObservableCollection<CalendarDay>();
|
CalendarDays = new ObservableCollection<CalendarDay>();
|
||||||
|
|
||||||
|
foreach (var languageItem in Languages.languages){
|
||||||
|
CalendarDubFilter.Add(new ComboBoxItem{ Content = languageItem.CrLocale });
|
||||||
|
}
|
||||||
|
|
||||||
|
CustomCalendar = Crunchyroll.Instance.CrunOptions.CustomCalendar;
|
||||||
|
HideDubs = Crunchyroll.Instance.CrunOptions.CalendarHideDubs;
|
||||||
|
|
||||||
|
ComboBoxItem? dubfilter = CalendarDubFilter.FirstOrDefault(a => a.Content != null && (string)a.Content == Crunchyroll.Instance.CrunOptions.CalendarDubFilter) ?? null;
|
||||||
|
CurrentCalendarDubFilter = dubfilter ?? CalendarDubFilter[0];
|
||||||
|
|
||||||
CurrentCalendarLanguage = CalendarLanguage.FirstOrDefault(a => a.Content != null && (string)a.Content == Crunchyroll.Instance.CrunOptions.SelectedCalendarLanguage) ?? CalendarLanguage[0];
|
CurrentCalendarLanguage = CalendarLanguage.FirstOrDefault(a => a.Content != null && (string)a.Content == Crunchyroll.Instance.CrunOptions.SelectedCalendarLanguage) ?? CalendarLanguage[0];
|
||||||
// LoadCalendar(GetThisWeeksMondayDate(), false);
|
loading = false;
|
||||||
|
LoadCalendar(GetThisWeeksMondayDate(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetThisWeeksMondayDate(){
|
private string GetThisWeeksMondayDate(){
|
||||||
|
@ -69,6 +95,12 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void LoadCalendar(string mondayDate, bool forceUpdate){
|
public async void LoadCalendar(string mondayDate, bool forceUpdate){
|
||||||
|
|
||||||
|
if (CustomCalendar){
|
||||||
|
BuildCustomCalendar();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ShowLoading = true;
|
ShowLoading = true;
|
||||||
CalendarWeek week = await Crunchyroll.Instance.GetCalendarForDate(mondayDate, forceUpdate);
|
CalendarWeek week = await Crunchyroll.Instance.GetCalendarForDate(mondayDate, forceUpdate);
|
||||||
if (currentWeek != null && currentWeek == week){
|
if (currentWeek != null && currentWeek == week){
|
||||||
|
@ -81,8 +113,14 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
CalendarDays.AddRange(week.CalendarDays);
|
CalendarDays.AddRange(week.CalendarDays);
|
||||||
RaisePropertyChanged(nameof(CalendarDays));
|
RaisePropertyChanged(nameof(CalendarDays));
|
||||||
ShowLoading = false;
|
ShowLoading = false;
|
||||||
|
|
||||||
foreach (var calendarDay in CalendarDays){
|
foreach (var calendarDay in CalendarDays){
|
||||||
foreach (var calendarDayCalendarEpisode in calendarDay.CalendarEpisodes){
|
var episodesCopy = new List<CalendarEpisode>(calendarDay.CalendarEpisodes);
|
||||||
|
foreach (var calendarDayCalendarEpisode in episodesCopy){
|
||||||
|
if (calendarDayCalendarEpisode.SeasonName != null && HideDubs && calendarDayCalendarEpisode.SeasonName.EndsWith("Dub)")){
|
||||||
|
calendarDay.CalendarEpisodes.Remove(calendarDayCalendarEpisode);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (calendarDayCalendarEpisode.ImageBitmap == null){
|
if (calendarDayCalendarEpisode.ImageBitmap == null){
|
||||||
calendarDayCalendarEpisode.LoadImage();
|
calendarDayCalendarEpisode.LoadImage();
|
||||||
}
|
}
|
||||||
|
@ -104,6 +142,10 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Refresh(){
|
public void Refresh(){
|
||||||
|
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (CustomCalendar){
|
if (CustomCalendar){
|
||||||
BuildCustomCalendar();
|
BuildCustomCalendar();
|
||||||
return;
|
return;
|
||||||
|
@ -122,6 +164,10 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void PrevWeek(){
|
public void PrevWeek(){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
string mondayDate;
|
string mondayDate;
|
||||||
|
|
||||||
if (currentWeek is{ FirstDayOfWeek: not null }){
|
if (currentWeek is{ FirstDayOfWeek: not null }){
|
||||||
|
@ -135,6 +181,10 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void NextWeek(){
|
public void NextWeek(){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
string mondayDate;
|
string mondayDate;
|
||||||
|
|
||||||
if (currentWeek is{ FirstDayOfWeek: not null }){
|
if (currentWeek is{ FirstDayOfWeek: not null }){
|
||||||
|
@ -148,6 +198,10 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
|
|
||||||
|
|
||||||
partial void OnCurrentCalendarLanguageChanged(ComboBoxItem? value){
|
partial void OnCurrentCalendarLanguageChanged(ComboBoxItem? value){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (value?.Content != null){
|
if (value?.Content != null){
|
||||||
Crunchyroll.Instance.CrunOptions.SelectedCalendarLanguage = value.Content.ToString();
|
Crunchyroll.Instance.CrunOptions.SelectedCalendarLanguage = value.Content.ToString();
|
||||||
Refresh();
|
Refresh();
|
||||||
|
@ -156,15 +210,45 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void OnCustomCalendarChanged(bool value){
|
partial void OnCustomCalendarChanged(bool value){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (CustomCalendar){
|
if (CustomCalendar){
|
||||||
BuildCustomCalendar();
|
BuildCustomCalendar();
|
||||||
|
} else{
|
||||||
|
LoadCalendar(GetThisWeeksMondayDate(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Crunchyroll.Instance.CrunOptions.CustomCalendar = value;
|
||||||
|
CfgManager.WriteSettingsToFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnHideDubsChanged(bool value){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Crunchyroll.Instance.CrunOptions.CalendarHideDubs = value;
|
||||||
|
CfgManager.WriteSettingsToFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnCurrentCalendarDubFilterChanged(ComboBoxItem? value){
|
||||||
|
if (loading){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(value?.Content + "")){
|
||||||
|
Crunchyroll.Instance.CrunOptions.CalendarDubFilter = value?.Content + "";
|
||||||
|
CfgManager.WriteSettingsToFile();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BuildCustomCalendar(){
|
private async void BuildCustomCalendar(){
|
||||||
ShowLoading = true;
|
ShowLoading = true;
|
||||||
|
|
||||||
var newEpisodesBase = await Crunchyroll.Instance.CrEpisode.GetNewEpisodes(Crunchyroll.Instance.CrunOptions.HistoryLang);
|
var newEpisodesBase = await Crunchyroll.Instance.CrEpisode.GetNewEpisodes(Crunchyroll.Instance.CrunOptions.HistoryLang,200);
|
||||||
|
|
||||||
CalendarWeek week = new CalendarWeek();
|
CalendarWeek week = new CalendarWeek();
|
||||||
week.CalendarDays = new List<CalendarDay>();
|
week.CalendarDays = new List<CalendarDay>();
|
||||||
|
@ -189,10 +273,17 @@ public partial class CalendarPageViewModel : ViewModelBase{
|
||||||
foreach (var crBrowseEpisode in newEpisodes){
|
foreach (var crBrowseEpisode in newEpisodes){
|
||||||
var episodeAirDate = crBrowseEpisode.EpisodeMetadata.EpisodeAirDate;
|
var episodeAirDate = crBrowseEpisode.EpisodeMetadata.EpisodeAirDate;
|
||||||
|
|
||||||
if (crBrowseEpisode.EpisodeMetadata.SeasonTitle != null && crBrowseEpisode.EpisodeMetadata.SeasonTitle.EndsWith("Dub)")){
|
if (HideDubs && crBrowseEpisode.EpisodeMetadata.SeasonTitle != null && crBrowseEpisode.EpisodeMetadata.SeasonTitle.EndsWith("Dub)")){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dubFilter = CurrentCalendarDubFilter?.Content + "";
|
||||||
|
if (!string.IsNullOrEmpty(dubFilter) && dubFilter != "none"){
|
||||||
|
if (crBrowseEpisode.EpisodeMetadata.AudioLocale != null && crBrowseEpisode.EpisodeMetadata.AudioLocale.GetEnumMemberValue() != dubFilter){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var calendarDay = week.CalendarDays.FirstOrDefault(day => day.DateTime != null && day.DateTime.Value.Date == episodeAirDate.Date);
|
var calendarDay = week.CalendarDays.FirstOrDefault(day => day.DateTime != null && day.DateTime.Value.Date == episodeAirDate.Date);
|
||||||
|
|
||||||
if (calendarDay != null){
|
if (calendarDay != null){
|
||||||
|
|
|
@ -8,6 +8,7 @@ using System.Threading.Tasks;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
|
using Avalonia.Threading;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using CRD.Downloader;
|
using CRD.Downloader;
|
||||||
|
@ -41,9 +42,9 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
public ObservableCollection<ComboBoxItem> ViewsList{ get; } =[];
|
public ObservableCollection<ComboBoxItem> ViewsList{ get; } =[];
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public ComboBoxItem _selectedSorting;
|
public SortingListElement _selectedSorting;
|
||||||
|
|
||||||
public ObservableCollection<ComboBoxItem> SortingList{ get; } =[];
|
public ObservableCollection<SortingListElement> SortingList{ get; } =[];
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public double _posterWidth;
|
public double _posterWidth;
|
||||||
|
@ -81,6 +82,9 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
|
|
||||||
private SortingType currentSortingType = SortingType.NextAirDate;
|
private SortingType currentSortingType = SortingType.NextAirDate;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public static bool _sortDir = false;
|
||||||
|
|
||||||
public HistoryPageViewModel(){
|
public HistoryPageViewModel(){
|
||||||
Items = Crunchyroll.Instance.HistoryList;
|
Items = Crunchyroll.Instance.HistoryList;
|
||||||
|
|
||||||
|
@ -89,6 +93,7 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
currentViewType = properties?.SelectedView ?? HistoryViewType.Posters;
|
currentViewType = properties?.SelectedView ?? HistoryViewType.Posters;
|
||||||
currentSortingType = properties?.SelectedSorting ?? SortingType.SeriesTitle;
|
currentSortingType = properties?.SelectedSorting ?? SortingType.SeriesTitle;
|
||||||
ScaleValue = properties?.ScaleValue ?? 0.73;
|
ScaleValue = properties?.ScaleValue ?? 0.73;
|
||||||
|
SortDir = properties?.Ascending ?? false;
|
||||||
|
|
||||||
foreach (HistoryViewType viewType in Enum.GetValues(typeof(HistoryViewType))){
|
foreach (HistoryViewType viewType in Enum.GetValues(typeof(HistoryViewType))){
|
||||||
var combobox = new ComboBoxItem{ Content = viewType };
|
var combobox = new ComboBoxItem{ Content = viewType };
|
||||||
|
@ -99,7 +104,7 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (SortingType sortingType in Enum.GetValues(typeof(SortingType))){
|
foreach (SortingType sortingType in Enum.GetValues(typeof(SortingType))){
|
||||||
var combobox = new ComboBoxItem{ Content = sortingType.GetEnumMemberValue() };
|
var combobox = new SortingListElement(){ SortingTitle = sortingType.GetEnumMemberValue(), SelectedSorting = sortingType };
|
||||||
SortingList.Add(combobox);
|
SortingList.Add(combobox);
|
||||||
if (sortingType == currentSortingType){
|
if (sortingType == currentSortingType){
|
||||||
SelectedSorting = combobox;
|
SelectedSorting = combobox;
|
||||||
|
@ -147,9 +152,23 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
UpdateSettings();
|
UpdateSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void OnSelectedSortingChanged(ComboBoxItem value){
|
|
||||||
if (TryParseEnum<SortingType>(value.Content + "", out var sortingType)){
|
partial void OnSelectedSortingChanged(SortingListElement? oldValue, SortingListElement? newValue){
|
||||||
currentSortingType = sortingType;
|
if (newValue == null){
|
||||||
|
if (Crunchyroll.Instance.CrunOptions.HistoryPageProperties != null){
|
||||||
|
Crunchyroll.Instance.CrunOptions.HistoryPageProperties.Ascending = !Crunchyroll.Instance.CrunOptions.HistoryPageProperties.Ascending;
|
||||||
|
SortDir = Crunchyroll.Instance.CrunOptions.HistoryPageProperties.Ascending;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dispatcher.UIThread.InvokeAsync(() => {
|
||||||
|
SelectedSorting = oldValue ?? SortingList.First();
|
||||||
|
RaisePropertyChanged(nameof(SelectedSorting));
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newValue.SelectedSorting != null){
|
||||||
|
currentSortingType = newValue.SelectedSorting;
|
||||||
if (Crunchyroll.Instance.CrunOptions.HistoryPageProperties != null) Crunchyroll.Instance.CrunOptions.HistoryPageProperties.SelectedSorting = currentSortingType;
|
if (Crunchyroll.Instance.CrunOptions.HistoryPageProperties != null) Crunchyroll.Instance.CrunOptions.HistoryPageProperties.SelectedSorting = currentSortingType;
|
||||||
Crunchyroll.Instance.CrHistory.SortItems();
|
Crunchyroll.Instance.CrHistory.SortItems();
|
||||||
} else{
|
} else{
|
||||||
|
@ -195,13 +214,13 @@ public partial class HistoryPageViewModel : ViewModelBase{
|
||||||
Crunchyroll.Instance.SelectedSeries = value;
|
Crunchyroll.Instance.SelectedSeries = value;
|
||||||
|
|
||||||
NavToSeries();
|
NavToSeries();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(value.SonarrSeriesId) && Crunchyroll.Instance.CrunOptions.SonarrProperties is{ SonarrEnabled: true }){
|
if (!string.IsNullOrEmpty(value.SonarrSeriesId) && Crunchyroll.Instance.CrunOptions.SonarrProperties is{ SonarrEnabled: true }){
|
||||||
Crunchyroll.Instance.CrHistory.MatchHistoryEpisodesWithSonarr(true, SelectedSeries);
|
Crunchyroll.Instance.CrHistory.MatchHistoryEpisodesWithSonarr(true, SelectedSeries);
|
||||||
CfgManager.WriteJsonToFile(CfgManager.PathCrHistory, Crunchyroll.Instance.HistoryList);
|
CfgManager.WriteJsonToFile(CfgManager.PathCrHistory, Crunchyroll.Instance.HistoryList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_selectedSeries = null;
|
_selectedSeries = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,4 +332,11 @@ public class HistoryPageProperties(){
|
||||||
public SortingType? SelectedSorting{ get; set; }
|
public SortingType? SelectedSorting{ get; set; }
|
||||||
public HistoryViewType SelectedView{ get; set; }
|
public HistoryViewType SelectedView{ get; set; }
|
||||||
public double? ScaleValue{ get; set; }
|
public double? ScaleValue{ get; set; }
|
||||||
|
|
||||||
|
public bool Ascending{ get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SortingListElement(){
|
||||||
|
public SortingType SelectedSorting{ get; set; }
|
||||||
|
public string? SortingTitle{ get; set; }
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<ui:UiValueConverterCalendarBackground x:Key="UiValueConverterCalendarBackground" />
|
<ui:UiValueConverterCalendarBackground x:Key="UiValueConverterCalendarBackground" />
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" /> <!-- For the button -->
|
<RowDefinition Height="Auto" /> <!-- For the button -->
|
||||||
|
@ -36,18 +36,86 @@
|
||||||
|
|
||||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center"
|
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center"
|
||||||
Margin="0 10 0 0">
|
Margin="0 10 0 0">
|
||||||
<Button HorizontalAlignment="Center" Command="{Binding Refresh}">
|
<Button Margin="5 0 5 0" HorizontalAlignment="Center" Command="{Binding Refresh}">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<controls:SymbolIcon Symbol="Refresh" FontSize="18" />
|
<controls:SymbolIcon Symbol="Refresh" FontSize="18" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<ComboBox HorizontalAlignment="Center" Margin="10 0 0 0" MinWidth="200"
|
<!-- <ComboBox HorizontalAlignment="Center" Margin="10 0 0 0" MinWidth="200" -->
|
||||||
SelectedItem="{Binding CurrentCalendarLanguage}"
|
<!-- SelectedItem="{Binding CurrentCalendarLanguage}" -->
|
||||||
ItemsSource="{Binding CalendarLanguage}">
|
<!-- ItemsSource="{Binding CalendarLanguage}"> -->
|
||||||
</ComboBox>
|
<!-- </ComboBox> -->
|
||||||
<CheckBox IsChecked="{Binding CustomCalendar}"
|
<!-- <CheckBox IsChecked="{Binding CustomCalendar}" -->
|
||||||
Content="Custom Calendar" Margin="5 0 0 0">
|
<!-- Content="Custom Calendar" Margin="5 0 0 0"> -->
|
||||||
</CheckBox>
|
<!-- </CheckBox> -->
|
||||||
|
|
||||||
|
<StackPanel Margin="5 0 5 0">
|
||||||
|
<ToggleButton x:Name="CalendarSettings" HorizontalContentAlignment="Stretch">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<controls:SymbolIcon Symbol="Settings" FontSize="18" />
|
||||||
|
</StackPanel>
|
||||||
|
</ToggleButton>
|
||||||
|
<Popup IsLightDismissEnabled="True"
|
||||||
|
MaxWidth="400"
|
||||||
|
MaxHeight="600"
|
||||||
|
IsOpen="{Binding IsChecked, ElementName=CalendarSettings, Mode=TwoWay}"
|
||||||
|
Placement="Bottom"
|
||||||
|
PlacementTarget="{Binding ElementName=CalendarSettings}">
|
||||||
|
<Border BorderThickness="1" Background="{DynamicResource ComboBoxDropDownBackground}">
|
||||||
|
|
||||||
|
<StackPanel>
|
||||||
|
<controls:SettingsExpander IsVisible="{Binding !CustomCalendar}" Header="Simulcast Calendar Language">
|
||||||
|
|
||||||
|
|
||||||
|
<controls:SettingsExpander.Footer>
|
||||||
|
|
||||||
|
<ComboBox HorizontalAlignment="Center" Margin="10 0 0 0" MinWidth="200"
|
||||||
|
SelectedItem="{Binding CurrentCalendarLanguage}"
|
||||||
|
ItemsSource="{Binding CalendarLanguage}">
|
||||||
|
</ComboBox>
|
||||||
|
|
||||||
|
</controls:SettingsExpander.Footer>
|
||||||
|
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
<controls:SettingsExpander Header="Custom Calendar">
|
||||||
|
<controls:SettingsExpander.Footer>
|
||||||
|
<CheckBox IsChecked="{Binding CustomCalendar}"
|
||||||
|
Content="Enabled" Margin="5 0 0 0">
|
||||||
|
</CheckBox>
|
||||||
|
</controls:SettingsExpander.Footer>
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
|
||||||
|
<controls:SettingsExpander IsVisible="{Binding CustomCalendar}" Header="Custom Calendar Dub Filter">
|
||||||
|
|
||||||
|
<controls:SettingsExpander.Footer>
|
||||||
|
|
||||||
|
<ComboBox HorizontalAlignment="Center" Margin="10 0 0 0" MinWidth="200"
|
||||||
|
SelectedItem="{Binding CurrentCalendarDubFilter}"
|
||||||
|
ItemsSource="{Binding CalendarDubFilter}">
|
||||||
|
</ComboBox>
|
||||||
|
|
||||||
|
</controls:SettingsExpander.Footer>
|
||||||
|
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
<controls:SettingsExpander Header="Calendar ">
|
||||||
|
<controls:SettingsExpander.Footer>
|
||||||
|
<CheckBox IsChecked="{Binding HideDubs}"
|
||||||
|
Content="Hide Dubs" Margin="5 0 0 0">
|
||||||
|
</CheckBox>
|
||||||
|
</controls:SettingsExpander.Footer>
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
</Border>
|
||||||
|
</Popup>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,7 +133,7 @@
|
||||||
<!-- MaxWidth="100" -->
|
<!-- MaxWidth="100" -->
|
||||||
<!-- IsVisible="{Binding ShowLoading}"> -->
|
<!-- IsVisible="{Binding ShowLoading}"> -->
|
||||||
<!-- </ProgressBar> -->
|
<!-- </ProgressBar> -->
|
||||||
|
|
||||||
<controls:ProgressRing IsVisible="{Binding ShowLoading}" Width="100" Height="100"></controls:ProgressRing>
|
<controls:ProgressRing IsVisible="{Binding ShowLoading}" Width="100" Height="100"></controls:ProgressRing>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
@ -94,7 +162,7 @@
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<ScrollViewer Grid.Row="1" >
|
<ScrollViewer Grid.Row="1">
|
||||||
<ItemsControl ItemsSource="{Binding CalendarEpisodes}">
|
<ItemsControl ItemsSource="{Binding CalendarEpisodes}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
|
@ -147,7 +215,7 @@
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
</ItemsControl>
|
</ItemsControl>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
|
|
|
@ -114,14 +114,23 @@
|
||||||
Placement="BottomEdgeAlignedRight"
|
Placement="BottomEdgeAlignedRight"
|
||||||
PlacementTarget="{Binding ElementName=DropdownButtonSorting}">
|
PlacementTarget="{Binding ElementName=DropdownButtonSorting}">
|
||||||
<Border BorderThickness="1" Background="{DynamicResource ComboBoxDropDownBackground}">
|
<Border BorderThickness="1" Background="{DynamicResource ComboBoxDropDownBackground}">
|
||||||
<ListBox SelectionMode="Single" Width="210"
|
<ListBox SelectionMode="Single,Toggle" Width="210"
|
||||||
MaxHeight="400"
|
MaxHeight="400"
|
||||||
ItemsSource="{Binding SortingList}" SelectedItem="{Binding SelectedSorting}">
|
ItemsSource="{Binding SortingList}" SelectedItem="{Binding SelectedSorting}">
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
|
||||||
|
<controls:SymbolIcon IsVisible="{Binding !$parent[UserControl].((vm:HistoryPageViewModel)DataContext).SortDir}" Symbol="ChevronUp" FontSize="12" Margin="0 0 10 0"/>
|
||||||
|
<controls:SymbolIcon IsVisible="{Binding $parent[UserControl].((vm:HistoryPageViewModel)DataContext).SortDir}" Symbol="ChevronDown" FontSize="12" Margin="0 0 10 0"/>
|
||||||
|
<TextBlock Text="{Binding SortingTitle}"></TextBlock>
|
||||||
|
</StackPanel>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
</Border>
|
</Border>
|
||||||
</Popup>
|
</Popup>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Button Width="70" Height="70" Background="Transparent" BorderThickness="0" Margin="5 0"
|
<Button Width="70" Height="70" Background="Transparent" BorderThickness="0" Margin="5 0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
IsEnabled="False">
|
IsEnabled="False">
|
||||||
|
@ -199,10 +208,8 @@
|
||||||
<Button
|
<Button
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
BorderThickness="0"
|
BorderThickness="0"
|
||||||
Width="{Binding $parent[UserControl].((vm:HistoryPageViewModel)DataContext).PosterWidth}"
|
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||||
Height="{Binding $parent[UserControl].((vm:HistoryPageViewModel)DataContext).PosterHeight}"
|
|
||||||
FontStyle="Italic"
|
FontStyle="Italic"
|
||||||
VerticalAlignment="Center"
|
|
||||||
Command="{Binding $parent[UserControl].((vm:HistoryPageViewModel)DataContext).RemoveSeries}"
|
Command="{Binding $parent[UserControl].((vm:HistoryPageViewModel)DataContext).RemoveSeries}"
|
||||||
CommandParameter="{Binding SeriesId}"
|
CommandParameter="{Binding SeriesId}"
|
||||||
IsEnabled="{Binding !$parent[UserControl].((vm:HistoryPageViewModel)DataContext).FetchingData}">
|
IsEnabled="{Binding !$parent[UserControl].((vm:HistoryPageViewModel)DataContext).FetchingData}">
|
||||||
|
@ -353,7 +360,7 @@
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue