diff options
Diffstat (limited to 'MediaBrowser.UI/Converters')
8 files changed, 524 insertions, 237 deletions
diff --git a/MediaBrowser.UI/Converters/BaseItemImageVisibilityConverter.cs b/MediaBrowser.UI/Converters/BaseItemImageVisibilityConverter.cs new file mode 100644 index 0000000000..55a90a0b80 --- /dev/null +++ b/MediaBrowser.UI/Converters/BaseItemImageVisibilityConverter.cs @@ -0,0 +1,75 @@ +using MediaBrowser.Model.DTO; +using MediaBrowser.Model.Entities; +using System; +using System.Windows; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + /// <summary> + /// Class BaseItemImageVisibilityConverter + /// </summary> + class BaseItemImageVisibilityConverter : IValueConverter + { + /// <summary> + /// Converts a value. + /// </summary> + /// <param name="value">The value produced by the binding source.</param> + /// <param name="targetType">The type of the binding target property.</param> + /// <param name="parameter">The converter parameter to use.</param> + /// <param name="culture">The culture to use in the converter.</param> + /// <returns>A converted value. If the method returns null, the valid null value is used.</returns> + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + var item = value as DtoBaseItem; + + if (item != null) + { + var paramString = parameter as string; + + var vals = paramString.Split(','); + + var imageType = (ImageType)Enum.Parse(typeof(ImageType), vals[0], true); + bool reverse = vals.Length > 1 && vals[1].Equals("reverse", StringComparison.OrdinalIgnoreCase); + + return GetVisibility(item, imageType, reverse); + } + + return Visibility.Collapsed; + } + + /// <summary> + /// Gets the visibility. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="type">The type.</param> + /// <param name="reverse">if set to <c>true</c> [reverse].</param> + /// <returns>Visibility.</returns> + private Visibility GetVisibility(DtoBaseItem item, ImageType type, bool reverse) + { + var hasImageVisibility = reverse ? Visibility.Collapsed : Visibility.Visible; + var hasNoImageVisibility = reverse ? Visibility.Visible : Visibility.Collapsed; + + if (type == ImageType.Logo) + { + return item.HasLogo || !string.IsNullOrEmpty(item.ParentLogoItemId) ? hasImageVisibility : hasNoImageVisibility; + } + + return item.HasPrimaryImage ? hasImageVisibility : hasNoImageVisibility; + } + + /// <summary> + /// Converts a value. + /// </summary> + /// <param name="value">The value that is produced by the binding target.</param> + /// <param name="targetType">The type to convert to.</param> + /// <param name="parameter">The converter parameter to use.</param> + /// <param name="culture">The culture to use in the converter.</param> + /// <returns>A converted value. If the method returns null, the valid null value is used.</returns> + /// <exception cref="System.NotImplementedException"></exception> + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/CurrentUserVisibilityConverter.cs b/MediaBrowser.UI/Converters/CurrentUserVisibilityConverter.cs index a5dd5013b4..c7853ea9c6 100644 --- a/MediaBrowser.UI/Converters/CurrentUserVisibilityConverter.cs +++ b/MediaBrowser.UI/Converters/CurrentUserVisibilityConverter.cs @@ -1,26 +1,26 @@ -using System;
-using System.Globalization;
-using System.Windows;
-using System.Windows.Data;
-
-namespace MediaBrowser.UI.Converters
-{
- public class CurrentUserVisibilityConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (App.Instance.ServerConfiguration == null || !App.Instance.ServerConfiguration.EnableUserProfiles)
- {
- return Visibility.Collapsed;
- }
-
- return value == null ? Visibility.Collapsed : Visibility.Visible;
- }
-
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
+using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + public class CurrentUserVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (App.Instance.ServerConfiguration == null) + { + return Visibility.Collapsed; + } + + return value == null ? Visibility.Collapsed : Visibility.Visible; + } + + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/DateTimeToStringConverter.cs b/MediaBrowser.UI/Converters/DateTimeToStringConverter.cs index 6c568c0612..f0c93e7d5b 100644 --- a/MediaBrowser.UI/Converters/DateTimeToStringConverter.cs +++ b/MediaBrowser.UI/Converters/DateTimeToStringConverter.cs @@ -1,34 +1,41 @@ -using System;
-using System.Globalization;
-using System.Windows.Data;
-
-namespace MediaBrowser.UI.Converters
-{
- public class DateTimeToStringConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- var date = (DateTime)value;
-
- string format = parameter as string;
-
- if (string.IsNullOrEmpty(format))
- {
- return date.ToString();
- }
-
- if (format.Equals("shorttime", StringComparison.OrdinalIgnoreCase))
- {
- return date.ToShortTimeString();
- }
-
- return date.ToString(format);
- }
-
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
+using System; +using System.Globalization; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + public class DateTimeToStringConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var date = (DateTime)value; + + string format = parameter as string; + + if (string.IsNullOrEmpty(format)) + { + return date.ToString(); + } + + // If a theme asks for this, they know it's only going to work if the current culture is en-us + if (format.Equals("timesuffixlower", StringComparison.OrdinalIgnoreCase)) + { + if (CultureInfo.CurrentCulture.Name.Equals("en-US", StringComparison.OrdinalIgnoreCase)) + { + var time = date.ToString("t"); + var values = time.Split(' '); + return values[values.Length - 1].ToLower(); + } + return string.Empty; + } + + return date.ToString(format); + } + + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/LastSeenTextConverter.cs b/MediaBrowser.UI/Converters/LastSeenTextConverter.cs index 7462602100..d8056a1e20 100644 --- a/MediaBrowser.UI/Converters/LastSeenTextConverter.cs +++ b/MediaBrowser.UI/Converters/LastSeenTextConverter.cs @@ -1,86 +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();
- }
- }
-}
+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 == 1 ? "an hour ago" : 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(); + } + } +} diff --git a/MediaBrowser.UI/Converters/MetroTileBackgroundConverter.cs b/MediaBrowser.UI/Converters/MetroTileBackgroundConverter.cs new file mode 100644 index 0000000000..6279711e2a --- /dev/null +++ b/MediaBrowser.UI/Converters/MetroTileBackgroundConverter.cs @@ -0,0 +1,51 @@ +using System; +using System.Globalization; +using System.Windows.Data; +using System.Windows.Media; + +namespace MediaBrowser.UI.Converters +{ + /// <summary> + /// Generates a random metro-friendly background color + /// </summary> + public class MetroTileBackgroundConverter : IValueConverter + { + private static readonly Brush[] TileColors = new Brush[] { + new SolidColorBrush(Color.FromRgb((byte)111,(byte)189,(byte)69)), + new SolidColorBrush(Color.FromRgb((byte)75,(byte)179,(byte)221)), + new SolidColorBrush(Color.FromRgb((byte)65,(byte)100,(byte)165)), + new SolidColorBrush(Color.FromRgb((byte)225,(byte)32,(byte)38)), + new SolidColorBrush(Color.FromRgb((byte)128,(byte)0,(byte)128)), + new SolidColorBrush(Color.FromRgb((byte)0,(byte)128,(byte)64)), + new SolidColorBrush(Color.FromRgb((byte)0,(byte)148,(byte)255)), + new SolidColorBrush(Color.FromRgb((byte)255,(byte)0,(byte)199)), + new SolidColorBrush(Color.FromRgb((byte)255,(byte)135,(byte)15)), + new SolidColorBrush(Color.FromRgb((byte)127,(byte)0,(byte)55)) + + }; + + private static int _currentIndex = new Random(DateTime.Now.Millisecond).Next(0, TileColors.Length); + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return GetRandomBackground(); + } + + public static Brush GetRandomBackground() + { + int index; + + lock (TileColors) + { + index = (_currentIndex++) % TileColors.Length; + } + + return TileColors[index++]; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new System.NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/UserImageConverter.cs b/MediaBrowser.UI/Converters/UserImageConverter.cs index a9ef4b8620..9101c5c46b 100644 --- a/MediaBrowser.UI/Converters/UserImageConverter.cs +++ b/MediaBrowser.UI/Converters/UserImageConverter.cs @@ -1,60 +1,97 @@ -using MediaBrowser.Model.DTO;
-using MediaBrowser.UI.Controller;
-using System;
-using System.Globalization;
-using System.Net.Cache;
-using System.Windows.Data;
-using System.Windows.Media.Imaging;
-
-namespace MediaBrowser.UI.Converters
-{
- public class UserImageConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- var user = value as DtoUser;
-
- if (user != null && user.HasImage)
- {
- var config = parameter as string;
-
- int? maxWidth = null;
- int? maxHeight = null;
- int? width = null;
- int? height = null;
-
- if (!string.IsNullOrEmpty(config))
- {
- var vals = config.Split(',');
-
- width = GetSize(vals[0]);
- height = GetSize(vals[1]);
- maxWidth = GetSize(vals[2]);
- maxHeight = GetSize(vals[3]);
- }
-
- var uri = UIKernel.Instance.ApiClient.GetUserImageUrl(user.Id, width, height, maxWidth, maxHeight, 100);
-
- return new BitmapImage(new Uri(uri), new RequestCachePolicy(RequestCacheLevel.Revalidate));
- }
-
- return null;
- }
-
- private int? GetSize(string val)
- {
- if (string.IsNullOrEmpty(val) || val == "0")
- {
- return null;
- }
-
- return int.Parse(val);
- }
-
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
+using MediaBrowser.Model.DTO; +using MediaBrowser.Model.Net; +using System; +using System.Globalization; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + /// <summary> + /// Class UserImageConverter + /// </summary> + public class UserImageConverter : IValueConverter + { + /// <summary> + /// Converts a value. + /// </summary> + /// <param name="value">The value produced by the binding source.</param> + /// <param name="targetType">The type of the binding target property.</param> + /// <param name="parameter">The converter parameter to use.</param> + /// <param name="culture">The culture to use in the converter.</param> + /// <returns>A converted value. If the method returns null, the valid null value is used.</returns> + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var user = value as DtoUser; + + if (user != null && user.HasPrimaryImage) + { + var config = parameter as string; + + int? maxWidth = null; + int? maxHeight = null; + int? width = null; + int? height = null; + + if (!string.IsNullOrEmpty(config)) + { + var vals = config.Split(','); + + width = GetSize(vals[0]); + height = GetSize(vals[1]); + maxWidth = GetSize(vals[2]); + maxHeight = GetSize(vals[3]); + } + + var uri = App.Instance.ApiClient.GetUserImageUrl(user, new ImageOptions + { + Width = width, + Height = height, + MaxWidth = maxWidth, + MaxHeight = maxHeight, + Quality = 100 + }); + + try + { + return App.Instance.GetRemoteBitmapAsync(uri).Result; + } + catch (HttpException) + { + + } + } + + return null; + } + + /// <summary> + /// Gets the size. + /// </summary> + /// <param name="val">The val.</param> + /// <returns>System.Nullable{System.Int32}.</returns> + private int? GetSize(string val) + { + if (string.IsNullOrEmpty(val) || val == "0") + { + return null; + } + + return int.Parse(val); + } + + + /// <summary> + /// Converts a value. + /// </summary> + /// <param name="value">The value that is produced by the binding target.</param> + /// <param name="targetType">The type to convert to.</param> + /// <param name="parameter">The converter parameter to use.</param> + /// <param name="culture">The culture to use in the converter.</param> + /// <returns>A converted value. If the method returns null, the valid null value is used.</returns> + /// <exception cref="System.NotImplementedException"></exception> + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/WatchedVisibilityConverter.cs b/MediaBrowser.UI/Converters/WatchedVisibilityConverter.cs new file mode 100644 index 0000000000..485386ae91 --- /dev/null +++ b/MediaBrowser.UI/Converters/WatchedVisibilityConverter.cs @@ -0,0 +1,117 @@ +using MediaBrowser.Model.DTO; +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + public class WatchedVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var item = value as DtoBaseItem; + + if (item == null) + { + return null; + } + + if (item.IsFolder) + { + return item.PlayedPercentage.HasValue && item.PlayedPercentage.Value == 100 ? Visibility.Visible : Visibility.Collapsed; + } + + if (item.UserData == null) + { + return Visibility.Collapsed; + } + + return item.UserData.PlayCount == 0 ? Visibility.Collapsed : Visibility.Visible; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class FavoriteVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var item = value as DtoBaseItem; + + if (item == null) + { + return null; + } + + if (item.UserData == null) + { + return Visibility.Collapsed; + } + + return item.UserData.IsFavorite ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class LikeVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var item = value as DtoBaseItem; + + if (item == null) + { + return null; + } + + if (item.UserData == null) + { + return Visibility.Collapsed; + } + + var userdata = item.UserData; + + return userdata.Likes.HasValue && userdata.Likes.Value && !userdata.IsFavorite ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class DislikeVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var item = value as DtoBaseItem; + + if (item == null) + { + return null; + } + + if (item.UserData == null) + { + return Visibility.Collapsed; + } + + var userdata = item.UserData; + + return userdata.Likes.HasValue && !userdata.Likes.Value && !userdata.IsFavorite ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.UI/Converters/WeatherTemperatureConverter.cs b/MediaBrowser.UI/Converters/WeatherTemperatureConverter.cs index cab4c595ca..c297df4f0a 100644 --- a/MediaBrowser.UI/Converters/WeatherTemperatureConverter.cs +++ b/MediaBrowser.UI/Converters/WeatherTemperatureConverter.cs @@ -1,31 +1,31 @@ -using MediaBrowser.Model.Weather;
-using System;
-using System.Globalization;
-using System.Windows.Data;
-
-namespace MediaBrowser.UI.Converters
-{
- public class WeatherTemperatureConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- var weather = value as WeatherInfo;
-
- if (weather != null)
- {
- if (App.Instance.ServerConfiguration.WeatherUnit == WeatherUnits.Celsius)
- {
- return weather.CurrentWeather.TemperatureCelsius + "°C";
- }
-
- return weather.CurrentWeather.TemperatureFahrenheit + "°F";
- }
- return null;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
+using MediaBrowser.Model.Weather; +using System; +using System.Globalization; +using System.Windows.Data; + +namespace MediaBrowser.UI.Converters +{ + public class WeatherTemperatureConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var weather = value as WeatherInfo; + + if (weather != null && weather.CurrentWeather != null) + { + if (App.Instance.ServerConfiguration.WeatherUnit == WeatherUnits.Celsius) + { + return weather.CurrentWeather.TemperatureCelsius + "°C"; + } + + return weather.CurrentWeather.TemperatureFahrenheit + "°F"; + } + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} |
