1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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();
- }
- }
- }
|