private static string CreateActivityStatusText(string activityName, BabyActivityStatus activityStatus, bool longForm) { if (activityStatus.ActivityIsRunning) { return(longForm ? string.Format(CultureInfo.CurrentCulture, "{0} {1} since {2}", activityStatus.BabyGivenName, ConvertActivityNameToCurrentTense(activityName), activityStatus.LastActivityStartTime.ToStringWithSystemClock("shorttime shortdate")) : string.Format(CultureInfo.CurrentCulture, "{0} 🕒 {1:t}", activityStatus.BabyGivenName, activityStatus.LastActivityStartTime.ToStringWithSystemClock("shorttime"))); } else if (activityStatus.NextActivityStartTime.HasValue) { return(longForm ? string.Format(CultureInfo.CurrentCulture, "{0} due to {1} at {2}", activityStatus.BabyGivenName, activityName, activityStatus.NextActivityStartTime.ToStringWithSystemClock("shorttime shortdate")) : string.Format(CultureInfo.CurrentCulture, "{0} ⏩ {1:t}", activityStatus.BabyGivenName, activityStatus.NextActivityStartTime.ToStringWithSystemClock("shorttime"))); } else { return(longForm ? string.Format(CultureInfo.CurrentCulture, "Calculating {0}'s next {1}", activityStatus.BabyGivenName, activityName) : string.Format(CultureInfo.CurrentCulture, "{0} ⏩ ???", activityStatus.BabyGivenName)); } }
/// <summary> /// Updates a scheduled a tile for this activity with info for the provided baby or creates & schedules a new tile for this activity if one doesn't exist /// </summary> public static void UpdateBabysActivityStatusTile(this TileUpdater tileUpdater, string activityName, BabyActivityStatus babysActivityStatus) { var existingTiles = tileUpdater.GetScheduledTileNotifications(); var existingTile = existingTiles.SingleOrDefault(tile => tile.Tag == activityName); if (existingTile == null) { CreateActivityTile(tileUpdater, activityName, new[] { babysActivityStatus }); } else { tileUpdater.RemoveFromSchedule(existingTile); var newTileContent = new XmlDocument(); newTileContent.LoadXml(existingTile.Content.GetXml()); var babysStatuses = newTileContent.GetElementsByTagName("text") .Where(text => text.InnerText.StartsWith(babysActivityStatus.BabyGivenName)); // TODO - handle long & short form for wide & medium tiles respectively foreach (var textElement in babysStatuses) { textElement.InnerText = CreateActivityStatusText(activityName, babysActivityStatus, false); } tileUpdater.Update(new TileNotification(newTileContent) { Tag = activityName }); } }