Skip to content

Commit cb71f6e

Browse files
committed
take over from original
Signed-off-by: Matthias Weiss <[email protected]>
1 parent 49dc532 commit cb71f6e

File tree

1 file changed

+44
-6
lines changed

1 file changed

+44
-6
lines changed

OneMore/Commands/Reminders/RemindCommand.cs

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)