1+ using System . Collections . Generic ;
2+ using System . Linq ;
3+ using AutoMapper ;
4+ using AvaloniaControls . ControlServices ;
5+ using AvaloniaControls . Services ;
6+ using MSURandomizer . ViewModels ;
7+ using MSURandomizerLibrary . Services ;
8+
9+ namespace MSURandomizer . Services ;
10+
11+ public class UnknownMsuWindowService (
12+ IMsuUserOptionsService userOptionsService ,
13+ IMapper mapper ,
14+ IMsuTypeService msuTypeService ,
15+ IMsuCacheService msuCacheService ,
16+ IMsuLookupService msuLookupService ) : ControlService
17+ {
18+ private UnknownMsuWindowViewModel _model = new ( ) ;
19+ private const int MaxPathLength = 50 ;
20+
21+ public UnknownMsuWindowViewModel InitilizeModel ( )
22+ {
23+ List < string > msuTypes = [ "" ] ;
24+ msuTypes . AddRange ( msuTypeService . MsuTypes . Select ( x => x . DisplayName ) . OrderBy ( x => x ) ) ;
25+
26+ List < MsuDetailsWindowViewModel > msuModels = [ ] ;
27+
28+ foreach ( var msu in msuLookupService . Msus . Where ( x => x is { IgnoreUnknown : false , MsuType : null , NumUniqueTracks : >= 15 } && string . IsNullOrEmpty ( x . Settings . MsuTypeName ) ) )
29+ {
30+ var msuModel = mapper . Map < MsuDetailsWindowViewModel > ( msu . Settings ) ;
31+ msuModel . Msu = msu ;
32+ msuModel . TrackCount = msu . NumUniqueTracks ;
33+ msuModel . MsuTypeNames = msuTypes ;
34+ msuModel . HasBeenModified = false ;
35+
36+ if ( msuModel . MsuPath . Length > MaxPathLength )
37+ {
38+ msuModel . MsuPath = $ "...{ msuModel . MsuPath . Substring ( msuModel . MsuPath . Length - MaxPathLength ) } ";
39+ }
40+
41+ msuModel . PropertyChanged += ( sender , args ) =>
42+ {
43+ _model . HasBeenModified = true ;
44+ } ;
45+ msuModels . Add ( msuModel ) ;
46+ }
47+
48+ msuModels . Last ( ) . IsNotLast = false ;
49+
50+ _model . UnknownMsus = msuModels ;
51+ _model . HasBeenModified = false ;
52+
53+ return _model ;
54+ }
55+
56+ public void Save ( )
57+ {
58+ foreach ( var msuModel in _model . UnknownMsus . Where ( x => x . Msu != null ) )
59+ {
60+ mapper . Map ( msuModel , msuModel . Msu ! . Settings ) ;
61+ msuModel . Msu . Settings . MsuPath = msuModel . Msu . Path ;
62+ msuModel . Msu . Settings . IsUserUnknownMsu = string . IsNullOrEmpty ( msuModel . MsuTypeName ) ;
63+ userOptionsService . UpdateMsuSettings ( msuModel . Msu ) ;
64+ msuCacheService . Remove ( msuModel . Msu . Path , false ) ;
65+ }
66+
67+ userOptionsService . Save ( ) ;
68+
69+ ITaskService . Run ( ( ) =>
70+ {
71+ msuLookupService . LookupMsus ( ) ;
72+ } ) ;
73+
74+ }
75+
76+ public void SaveIgnore ( )
77+ {
78+ foreach ( var msuModel in _model . UnknownMsus . Where ( x => x . Msu != null ) )
79+ {
80+ msuModel . Msu ! . Settings . IsUserUnknownMsu = true ;
81+ userOptionsService . UpdateMsuSettings ( msuModel . Msu ) ;
82+ }
83+
84+ userOptionsService . Save ( ) ;
85+ }
86+ }
0 commit comments