@@ -86,28 +86,25 @@ internal int GetWritingSystemHandle(WritingSystemId ws, WritingSystemType? type
8686
8787 public Task < WritingSystems > GetWritingSystems ( )
8888 {
89- var currentVernacularWs = WritingSystemContainer
90- . CurrentVernacularWritingSystems
91- . Select ( ws => ws . Id ) . ToHashSet ( ) ;
92- var currentAnalysisWs = WritingSystemContainer
93- . CurrentAnalysisWritingSystems
94- . Select ( ws => ws . Id ) . ToHashSet ( ) ;
9589 var writingSystems = new WritingSystems
9690 {
9791 Vernacular = WritingSystemContainer . CurrentVernacularWritingSystems . Select ( ( definition , index ) =>
98- FromLcmWritingSystem ( definition , index , WritingSystemType . Vernacular ) ) . ToArray ( ) ,
92+ FromLcmWritingSystem ( definition , WritingSystemType . Vernacular , index ) ) . ToArray ( ) ,
9993 Analysis = WritingSystemContainer . CurrentAnalysisWritingSystems . Select ( ( definition , index ) =>
100- FromLcmWritingSystem ( definition , index , WritingSystemType . Analysis ) ) . ToArray ( )
94+ FromLcmWritingSystem ( definition , WritingSystemType . Analysis , index ) ) . ToArray ( )
10195 } ;
102- CompleteExemplars ( writingSystems ) ;
96+ // Not used and not implemented in CRDT (also not done in GetWritingSystem())
97+ // CompleteExemplars(writingSystems);
10398 return Task . FromResult ( writingSystems ) ;
10499 }
105100
106- private WritingSystem FromLcmWritingSystem ( CoreWritingSystemDefinition ws , int index , WritingSystemType type )
101+ private WritingSystem FromLcmWritingSystem ( CoreWritingSystemDefinition ws , WritingSystemType type , int index = default )
107102 {
108103 return new WritingSystem
109104 {
110105 Id = Guid . Empty ,
106+ // todo: Order probably shouldn't be relied on in fwdata, because it's implicit,
107+ // so it probably shouldn't be used or set at all
111108 Order = index ,
112109 Type = type ,
113110 //todo determine current and create a property for that.
@@ -119,15 +116,12 @@ private WritingSystem FromLcmWritingSystem(CoreWritingSystemDefinition ws, int i
119116 } ;
120117 }
121118
122- public async Task < WritingSystem ? > GetWritingSystem ( WritingSystemId id , WritingSystemType type )
119+ public Task < WritingSystem ? > GetWritingSystem ( WritingSystemId id , WritingSystemType type )
123120 {
124- var writingSystems = await GetWritingSystems ( ) ;
125- return type switch
126- {
127- WritingSystemType . Vernacular => writingSystems . Vernacular . FirstOrDefault ( ws => ws . WsId == id ) ,
128- WritingSystemType . Analysis => writingSystems . Analysis . FirstOrDefault ( ws => ws . WsId == id ) ,
129- _ => throw new ArgumentOutOfRangeException ( nameof ( type ) , type , null )
130- } ;
121+ var lcmWs = Cache . TryGetCoreWritingSystem ( id , type ) ;
122+ if ( lcmWs is null ) return Task . FromResult < WritingSystem ? > ( null ) ;
123+ var ws = FromLcmWritingSystem ( lcmWs , type ) ;
124+ return Task . FromResult < WritingSystem ? > ( ws ) ;
131125 }
132126
133127 internal void CompleteExemplars ( WritingSystems writingSystems )
@@ -188,7 +182,7 @@ await Cache.DoUsingNewOrCurrentUOW("Create Writing System",
188182 WritingSystemType . Vernacular => WritingSystemContainer . CurrentVernacularWritingSystems . Count ,
189183 _ => throw new ArgumentOutOfRangeException ( nameof ( type ) , type , null )
190184 } - 1 ;
191- return FromLcmWritingSystem ( ws , index , type ) ;
185+ return FromLcmWritingSystem ( ws , type , index ) ;
192186 }
193187
194188 public async Task < WritingSystem > UpdateWritingSystem ( WritingSystemId id , WritingSystemType type , UpdateObjectInput < WritingSystem > update )
@@ -225,10 +219,10 @@ await Cache.DoUsingNewOrCurrentUOW("Update WritingSystem",
225219
226220 public async Task MoveWritingSystem ( WritingSystemId id , WritingSystemType type , BetweenPosition < WritingSystemId ? > between )
227221 {
228- var wsToUpdate = GetLexWritingSystem ( id , type ) ;
222+ var wsToUpdate = GetNonDefaultLexWritingSystem ( id , type ) ;
229223 if ( wsToUpdate is null ) throw new NullReferenceException ( $ "unable to find writing system with id { id } ") ;
230- var previousWs = between . Previous is null ? null : GetLexWritingSystem ( between . Previous . Value , type ) ;
231- var nextWs = between . Next is null ? null : GetLexWritingSystem ( between . Next . Value , type ) ;
224+ var previousWs = between . Previous is null ? null : GetNonDefaultLexWritingSystem ( between . Previous . Value , type ) ;
225+ var nextWs = between . Next is null ? null : GetNonDefaultLexWritingSystem ( between . Next . Value , type ) ;
232226 if ( nextWs is null && previousWs is null ) throw new NullReferenceException ( $ "unable to find writing system with id { between . Previous } or { between . Next } ") ;
233227 await Cache . DoUsingNewOrCurrentUOW ( "Move WritingSystem" ,
234228 "Revert Move WritingSystem" ,
@@ -270,12 +264,10 @@ void MoveWs(CoreWritingSystemDefinition ws,
270264 } ) ;
271265 }
272266
273- private CoreWritingSystemDefinition ? GetLexWritingSystem ( WritingSystemId id , WritingSystemType type )
267+ private CoreWritingSystemDefinition ? GetNonDefaultLexWritingSystem ( WritingSystemId id , WritingSystemType type )
274268 {
275- var exitingWs = type == WritingSystemType . Analysis
276- ? WritingSystemContainer . AnalysisWritingSystems
277- : WritingSystemContainer . VernacularWritingSystems ;
278- return exitingWs . FirstOrDefault ( ws => ws . Id == id ) ;
269+ if ( id == default ) throw new ArgumentException ( "Cannot use default writing system ID" , nameof ( id ) ) ;
270+ return Cache . TryGetCoreWritingSystem ( id , type ) ;
279271 }
280272
281273 public IAsyncEnumerable < PartOfSpeech > GetPartsOfSpeech ( )
0 commit comments