@@ -226,12 +226,50 @@ private Reminder MakeReminder(OneNote one, XElement paragraph, string objectID)
226226
227227 private bool SetReminder ( XElement paragraph , Reminder reminder )
228228 {
229- reminder . TagIndex = page . SetTag ( paragraph ,
230- tagSymbol : reminder . Symbol ,
231- tagName : string . Format ( Resx . RemindCommand_nameFormat , reminder . Due . ToFriendlyString ( ) ) ,
232- tagStatus : reminder . Status == ReminderStatus . Completed ,
233- tagType : 0
234- ) ;
229+ var index = page . GetTagDefIndex ( reminder . Symbol ) ;
230+ if ( index == null )
231+ {
232+ index = page . AddTagDef ( reminder . Symbol ,
233+ string . Format ( Resx . RemindCommand_nameFormat , reminder . Due . ToFriendlyString ( ) ) ) ;
234+
235+ reminder . TagIndex = index ;
236+ }
237+
238+ var tag = paragraph . Elements ( ns + "Tag" )
239+ . FirstOrDefault ( e => e . Attribute ( "index" ) . Value == index ) ;
240+
241+ if ( tag == null )
242+ {
243+ // tags must be ordered by index even within their containing paragraph
244+ // so take all, remove from paragraph, append, sort, re-add...
245+
246+ var tags = paragraph . Elements ( ns + "Tag" ) . ToList ( ) ;
247+ tags . ForEach ( t => t . Remove ( ) ) ;
248+
249+ // synchronize tag with reminder
250+ var completed = reminder . Status == ReminderStatus . Completed
251+ ? "true" : "false" ;
252+
253+ tag = new XElement ( ns + "Tag" ,
254+ new XAttribute ( "index" , index ) ,
255+ new XAttribute ( "completed" , completed ) ,
256+ new XAttribute ( "disabled" , "false" )
257+ ) ;
258+
259+ tags . Add ( tag ) ;
260+
261+ paragraph . AddFirst ( tags . OrderBy ( t => t . Attribute ( "index" ) . Value ) ) ;
262+ }
263+ else
264+ {
265+ // synchronize tag with reminder
266+ var tcompleted = tag . Attribute ( "completed" ) . Value == "true" ;
267+ var rcompleted = reminder . Status == ReminderStatus . Completed ;
268+ if ( tcompleted != rcompleted )
269+ {
270+ tag . Attribute ( "completed" ) . Value = rcompleted ? "true" : "false" ;
271+ }
272+ }
235273
236274 new ReminderSerializer ( ) . StoreReminder ( page , reminder ) ;
237275
0 commit comments