Skip to content

Commit

Permalink
Fix rough edges on movie series form titles
Browse files Browse the repository at this point in the history
  • Loading branch information
TolikPylypchuk committed Feb 16, 2020
1 parent 724f6b3 commit 1b00a92
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 26 deletions.
6 changes: 3 additions & 3 deletions MovieList.ViewModels/Comparers/ListItemTitleComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ private int Compare(MovieSeriesListItem left, MovieSeriesListItem right)
} else if (left.MovieSeries.Entry == null && right.MovieSeries.Entry == null)
{
result = TitleComparer.Instance.Compare(
left.MovieSeries.GetTitle()?.Name ?? String.Empty,
right.MovieSeries.GetTitle()?.Name ?? String.Empty);
left.MovieSeries.GetListTitle()?.Name ?? String.Empty,
right.MovieSeries.GetListTitle()?.Name ?? String.Empty);

if (result == 0)
{
Expand Down Expand Up @@ -183,7 +183,7 @@ private int CompareTitleOrYear(ListItem left, ListItem right)
private int CompareTitleOrYear(MovieSeriesListItem left, ListItem right)
{
int result = TitleComparer.Instance.Compare(
left.MovieSeries.GetTitle()?.Name ?? String.Empty, right.Title);
left.MovieSeries.GetListTitle()?.Name ?? String.Empty, right.Title);

return result != 0 ? result : left.Year.CompareTo(right.Year);
}
Expand Down
3 changes: 3 additions & 0 deletions MovieList.ViewModels/Data/Models/ModelExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ public static string GetActiveColor(this MovieSeries movieSeries)
}

public static Title? GetTitle(this MovieSeries movieSeries)
=> movieSeries.Titles.Count > 0 ? movieSeries.Title! : movieSeries.GetFirstEntry()?.GetTitle();

public static Title? GetListTitle(this MovieSeries movieSeries)
=> movieSeries.ShowTitles ? movieSeries.Title! : movieSeries.GetFirstEntry()?.GetTitle();

public static Title? GetTitle(this MovieSeriesEntry entry)
Expand Down
9 changes: 6 additions & 3 deletions MovieList.ViewModels/ViewModels/Forms/Base/TitledFormBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ protected TitledFormBase(ResourceManager? resourceManager, IScheduler? scheduler
.AutoRefresh(vm => vm.Priority)
.ToCollection()
.Select(vms => vms.OrderBy(vm => vm.Priority).Select(vm => vm.Name).FirstOrDefault())
.Select(title => this.IsNew && String.IsNullOrWhiteSpace(title)
? this.ResourceManager.GetString(this.NewItemKey) ?? String.Empty
: title)
.Select(this.GetFormTitle)
.ObserveOn(RxApp.MainThreadScheduler);

var canAddTitle = this.Titles.ToObservableChangeSet()
Expand Down Expand Up @@ -122,6 +120,11 @@ protected async Task SaveTitlesAsync()
protected void ClearTitles()
=> this.titlesSource.Clear();

protected string GetFormTitle(string title)
=> this.IsNew && String.IsNullOrWhiteSpace(title)
? this.ResourceManager.GetString(this.NewItemKey) ?? String.Empty
: title;

private void InitializeTitles(
Func<Title, bool> predicate,
out ReadOnlyObservableCollection<TitleFormViewModel> titles)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,11 @@ protected override void CopyProperties()
this.Years = this.Entry.GetYears();
this.SequenceNumber = this.Entry.SequenceNumber;
this.DisplayNumber = this.Entry.DisplayNumber;

if (this.Years == "0")
{
this.Years = String.Empty;
}
}
}
}
35 changes: 20 additions & 15 deletions MovieList.ViewModels/ViewModels/Forms/MovieSeriesFormViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,15 @@ public MovieSeriesFormViewModel(

this.FormTitle =
this.FormTitle
.Select(title => this.MovieSeriesEntry != null
? $"{this.GetFormTitle(this.MovieSeriesEntry.ParentSeries)}: {title}"
: title);
.Select(this.GetFullFormTitle)
.StartWith(this.GetFullFormTitle(this.GetFormTitle(String.Empty)));

this.PosterUrlRule = this.ValidationRule(vm => vm.PosterUrl, url => url.IsUrl(), "PosterUrlInvalid");

this.entriesSource.Connect()
.Count()
.Select(count => count > 0)
.ToPropertyEx(this, vm => vm.CanHaveTitles);
.ToPropertyEx(this, vm => vm.CanShowTitles);

var canSelectEntry = this.FormChanged.Invert();

Expand Down Expand Up @@ -114,7 +113,7 @@ public ReadOnlyObservableCollection<MovieSeriesEntryViewModel> Entries

public ValidationHelper PosterUrlRule { get; }

public bool CanHaveTitles { [ObservableAsProperty] get; }
public bool CanShowTitles { [ObservableAsProperty] get; }

public ReactiveCommand<MovieSeriesEntryViewModel, MovieSeriesEntry> SelectEntry { get; }
public ReactiveCommand<MovieSeriesEntry, MovieSeriesEntry> DetachEntry { get; }
Expand Down Expand Up @@ -212,24 +211,21 @@ protected override void AttachTitle(Title title)
private void InitializeValueDependencies()
{
this.WhenAnyValue(vm => vm.HasTitles)
.Where(_ => this.CanHaveTitles)
.BindTo(this, vm => vm.ShowTitles);

this.WhenAnyValue(vm => vm.HasTitles)
.Where(_ => this.CanHaveTitles)
.Where(hasTitles => hasTitles && this.Titles.Count == 0)
.Discard()
.SubscribeAsync(this.AddTitles);

this.WhenAnyValue(vm => vm.HasTitles)
.Where(_ => this.CanHaveTitles)
.Where(hasTitles => !hasTitles && this.Titles.Count > 0)
.Discard()
.Subscribe(this.ClearTitles);

this.WhenAnyValue(vm => vm.HasTitles)
.Where(hasTitles => hasTitles && !this.CanHaveTitles)
.Subscribe(_ => this.HasTitles = false);
this.WhenAnyValue(vm => vm.ShowTitles)
.Where(showTitles => showTitles && !this.CanShowTitles)
.Subscribe(_ => this.ShowTitles = false);

this.WhenAnyValue(vm => vm.MergeDisplayNumbers)
.SubscribeBool(this.OnMergeDisplayNumbers, this.OnUnmergeDisplayNumbers);
Expand All @@ -239,15 +235,24 @@ private void InitializeValueDependencies()
[SuppressMessage("ReSharper", "ConstantConditionalAccessQualifier")]
private string GetFormTitle(MovieSeries movieSeries)
{
string title = movieSeries.ActualTitles.FirstOrDefault(t => !t.IsOriginal)?.Name
?? this.ResourceManager.GetString(this.NewItemKey) ?? String.Empty;
string title = movieSeries.ActualTitles.FirstOrDefault(t => !t.IsOriginal)?.Name ?? String.Empty;
return movieSeries.Entry == null ? title : $"{this.GetFormTitle(movieSeries.Entry.ParentSeries)}: {title}";
}

private string GetFullFormTitle(string title)
=> this.MovieSeriesEntry != null
? $"{this.GetFormTitle(this.MovieSeriesEntry.ParentSeries)}: {title}"
: title;

[SuppressMessage("ReSharper", "ConstantNullCoalescingCondition")]
[SuppressMessage("ReSharper", "ConstantConditionalAccessQualifier")]
private async Task AddTitles()
{
string titleName = this.MovieSeries.ActualTitles.First(t => !t.IsOriginal).Name;
string originalTitleName = this.MovieSeries.ActualTitles.First(t => t.IsOriginal).Name;
string titleName = this.MovieSeries.ActualTitles.FirstOrDefault(t => !t.IsOriginal)?.Name
?? String.Empty;

string originalTitleName = this.MovieSeries.ActualTitles.FirstOrDefault(t => t.IsOriginal)?.Name
?? String.Empty;

await this.AddTitle.Execute();
await this.AddOriginalTitle.Execute();
Expand Down
9 changes: 4 additions & 5 deletions MovieList/Views/Forms/MovieSeriesFormControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,11 +155,10 @@ private void BindCheckboxes(CompositeDisposable disposables)
this.Bind(this.ViewModel, vm => vm.MergeDisplayNumbers, v => v.MergeDisplayNumbersCheckBox.IsChecked)
.DisposeWith(disposables);

this.WhenAnyValue(v => v.ViewModel.CanHaveTitles)
.BindTo(this, v => v.HasTitlesCheckBox.IsEnabled)
.DisposeWith(disposables);

this.WhenAnyValue(v => v.ViewModel.HasTitles)
this.WhenAnyValue(
v => v.ViewModel.HasTitles,
v => v.ViewModel.CanShowTitles,
(hasTitles, canShowTitles) => hasTitles && canShowTitles)
.BindTo(this, v => v.ShowInListCheckBox.IsEnabled)
.DisposeWith(disposables);

Expand Down

0 comments on commit 1b00a92

Please sign in to comment.