diff options
Diffstat (limited to 'MediaBrowser.UI/Converters/LastSeenTextConverter.cs')
| -rw-r--r-- | MediaBrowser.UI/Converters/LastSeenTextConverter.cs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/MediaBrowser.UI/Converters/LastSeenTextConverter.cs b/MediaBrowser.UI/Converters/LastSeenTextConverter.cs new file mode 100644 index 000000000..746260210 --- /dev/null +++ b/MediaBrowser.UI/Converters/LastSeenTextConverter.cs @@ -0,0 +1,86 @@ +using MediaBrowser.Model.DTO;
+using System;
+using System.Globalization;
+using System.Windows.Data;
+
+namespace MediaBrowser.UI.Converters
+{
+ public class LastSeenTextConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ var user = value as DtoUser;
+
+ if (user != null)
+ {
+ if (user.LastActivityDate.HasValue)
+ {
+ DateTime date = user.LastActivityDate.Value.ToLocalTime();
+
+ return "Last seen " + GetRelativeTimeText(date);
+ }
+ }
+
+ return null;
+ }
+
+ private static string GetRelativeTimeText(DateTime date)
+ {
+ TimeSpan ts = DateTime.Now - date;
+
+ const int second = 1;
+ const int minute = 60 * second;
+ const int hour = 60 * minute;
+ const int day = 24 * hour;
+ const int month = 30 * day;
+
+ int delta = System.Convert.ToInt32(ts.TotalSeconds);
+
+ if (delta < 0)
+ {
+ return "not yet";
+ }
+ if (delta < 1 * minute)
+ {
+ return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
+ }
+ if (delta < 2 * minute)
+ {
+ return "a minute ago";
+ }
+ if (delta < 45 * minute)
+ {
+ return ts.Minutes + " minutes ago";
+ }
+ if (delta < 90 * minute)
+ {
+ return "an hour ago";
+ }
+ if (delta < 24 * hour)
+ {
+ return ts.Hours + " hours ago";
+ }
+ if (delta < 48 * hour)
+ {
+ return "yesterday";
+ }
+ if (delta < 30 * day)
+ {
+ return ts.Days + " days ago";
+ }
+ if (delta < 12 * month)
+ {
+ int months = System.Convert.ToInt32(Math.Floor((double)ts.Days / 30));
+ return months <= 1 ? "one month ago" : months + " months ago";
+ }
+
+ int years = System.Convert.ToInt32(Math.Floor((double)ts.Days / 365));
+ return years <= 1 ? "one year ago" : years + " years ago";
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
|
