Some minor code cleanups

pull/702/head
LukePulverenti Luke Pulverenti luke pulverenti 12 years ago
parent 016590529f
commit 670a53258e

@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
@ -33,9 +32,9 @@ namespace MediaBrowser.Api
/// <param name="logActivity">Whether or not to update the user's LastActivityDate</param>
public static User GetUserById(string id, bool logActivity)
{
Guid guid = new Guid(id);
var guid = new Guid(id);
User user = Kernel.Instance.Users.FirstOrDefault(u => u.Id == guid);
var user = Kernel.Instance.Users.FirstOrDefault(u => u.Id == guid);
if (logActivity)
{
@ -73,11 +72,11 @@ namespace MediaBrowser.Api
/// <summary>
/// Converts a BaseItem to a DTOBaseItem
/// </summary>
public async static Task<DTOBaseItem> GetDTOBaseItem(BaseItem item, User user,
public async static Task<DtoBaseItem> GetDtoBaseItem(BaseItem item, User user,
bool includeChildren = true,
bool includePeople = true)
{
DTOBaseItem dto = new DTOBaseItem();
DtoBaseItem dto = new DtoBaseItem();
List<Task> tasks = new List<Task>();
@ -108,7 +107,7 @@ namespace MediaBrowser.Api
/// <summary>
/// Sets simple property values on a DTOBaseItem
/// </summary>
private static void AttachBasicFields(DTOBaseItem dto, BaseItem item, User user)
private static void AttachBasicFields(DtoBaseItem dto, BaseItem item, User user)
{
dto.AspectRatio = item.AspectRatio;
dto.BackdropCount = item.BackdropImagePaths == null ? 0 : item.BackdropImagePaths.Count();
@ -173,7 +172,7 @@ namespace MediaBrowser.Api
dto.Type = item.GetType().Name;
dto.UserRating = item.UserRating;
dto.UserData = GetDTOUserItemData(item.GetUserData(user, false));
dto.UserData = GetDtoUserItemData(item.GetUserData(user, false));
Folder folder = item as Folder;
@ -190,7 +189,7 @@ namespace MediaBrowser.Api
if (audio != null)
{
dto.AudioInfo = new AudioInfo()
dto.AudioInfo = new AudioInfo
{
Album = audio.Album,
AlbumArtist = audio.AlbumArtist,
@ -205,7 +204,7 @@ namespace MediaBrowser.Api
if (video != null)
{
dto.VideoInfo = new VideoInfo()
dto.VideoInfo = new VideoInfo
{
Height = video.Height,
Width = video.Width,
@ -232,7 +231,7 @@ namespace MediaBrowser.Api
{
DayOfWeek[] airDays = series.AirDays == null ? new DayOfWeek[] { } : series.AirDays.ToArray(); ;
dto.SeriesInfo = new SeriesInfo()
dto.SeriesInfo = new SeriesInfo
{
AirDays = airDays,
AirTime = series.AirTime,
@ -247,7 +246,7 @@ namespace MediaBrowser.Api
{
int specialFeatureCount = movie.SpecialFeatures == null ? 0 : movie.SpecialFeatures.Count();
dto.MovieInfo = new MovieInfo()
dto.MovieInfo = new MovieInfo
{
SpecialFeatureCount = specialFeatureCount
};
@ -257,12 +256,12 @@ namespace MediaBrowser.Api
/// <summary>
/// Attaches Studio DTO's to a DTOBaseItem
/// </summary>
private static async Task AttachStudios(DTOBaseItem dto, BaseItem item)
private static async Task AttachStudios(DtoBaseItem dto, BaseItem item)
{
// Attach Studios by transforming them into BaseItemStudio (DTO)
if (item.Studios != null)
{
Studio[] entities = await Task.WhenAll<Studio>(item.Studios.Select(c => Kernel.Instance.ItemController.GetStudio(c))).ConfigureAwait(false);
Studio[] entities = await Task.WhenAll(item.Studios.Select(c => Kernel.Instance.ItemController.GetStudio(c))).ConfigureAwait(false);
dto.Studios = new BaseItemStudio[entities.Length];
@ -283,7 +282,7 @@ namespace MediaBrowser.Api
/// <summary>
/// Attaches child DTO's to a DTOBaseItem
/// </summary>
private static async Task AttachChildren(DTOBaseItem dto, BaseItem item, User user)
private static async Task AttachChildren(DtoBaseItem dto, BaseItem item, User user)
{
var folder = item as Folder;
@ -291,30 +290,30 @@ namespace MediaBrowser.Api
{
IEnumerable<BaseItem> children = folder.GetParentalAllowedChildren(user);
dto.Children = await Task.WhenAll<DTOBaseItem>(children.Select(c => GetDTOBaseItem(c, user, false, false))).ConfigureAwait(false);
dto.Children = await Task.WhenAll(children.Select(c => GetDtoBaseItem(c, user, false, false))).ConfigureAwait(false);
}
}
/// <summary>
/// Attaches trailer DTO's to a DTOBaseItem
/// </summary>
private static async Task AttachLocalTrailers(DTOBaseItem dto, BaseItem item, User user)
private static async Task AttachLocalTrailers(DtoBaseItem dto, BaseItem item, User user)
{
if (item.LocalTrailers != null && item.LocalTrailers.Any())
{
dto.LocalTrailers = await Task.WhenAll<DTOBaseItem>(item.LocalTrailers.Select(c => GetDTOBaseItem(c, user, false, false))).ConfigureAwait(false);
dto.LocalTrailers = await Task.WhenAll(item.LocalTrailers.Select(c => GetDtoBaseItem(c, user, false, false))).ConfigureAwait(false);
}
}
/// <summary>
/// Attaches People DTO's to a DTOBaseItem
/// </summary>
private static async Task AttachPeople(DTOBaseItem dto, BaseItem item)
private static async Task AttachPeople(DtoBaseItem dto, BaseItem item)
{
// Attach People by transforming them into BaseItemPerson (DTO)
if (item.People != null)
{
IEnumerable<Person> entities = await Task.WhenAll<Person>(item.People.Select(c => Kernel.Instance.ItemController.GetPerson(c.Key))).ConfigureAwait(false);
IEnumerable<Person> entities = await Task.WhenAll(item.People.Select(c => Kernel.Instance.ItemController.GetPerson(c.Key))).ConfigureAwait(false);
dto.People = item.People.Select(p =>
{
@ -384,7 +383,7 @@ namespace MediaBrowser.Api
/// </summary>
public static IBNItem GetIBNItem(BaseEntity entity, int itemCount)
{
return new IBNItem()
return new IBNItem
{
Id = entity.Id,
BaseItemCount = itemCount,
@ -396,9 +395,9 @@ namespace MediaBrowser.Api
/// <summary>
/// Converts a User to a DTOUser
/// </summary>
public static DTOUser GetDTOUser(User user)
public static DtoUser GetDtoUser(User user)
{
return new DTOUser()
return new DtoUser
{
Id = user.Id,
Name = user.Name,
@ -412,14 +411,14 @@ namespace MediaBrowser.Api
/// <summary>
/// Converts a UserItemData to a DTOUserItemData
/// </summary>
public static DTOUserItemData GetDTOUserItemData(UserItemData data)
public static DtoUserItemData GetDtoUserItemData(UserItemData data)
{
if (data == null)
{
return null;
}
return new DTOUserItemData()
return new DtoUserItemData
{
IsFavorite = data.IsFavorite,
Likes = data.Likes,

@ -86,7 +86,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
protected override string GetCommandLineArguments()
{
List<string> audioTranscodeParams = new List<string>();
var audioTranscodeParams = new List<string>();
AudioOutputFormats outputFormat = GetConversionOutputFormat();

@ -38,7 +38,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
private TBaseItemType _LibraryItem;
private TBaseItemType _libraryItem;
/// <summary>
/// Gets the library item that will be played, if any
/// </summary>
@ -46,17 +46,17 @@ namespace MediaBrowser.Api.HttpHandlers
{
get
{
if (_LibraryItem == null)
if (_libraryItem == null)
{
string id = QueryString["id"];
if (!string.IsNullOrEmpty(id))
{
_LibraryItem = Kernel.Instance.GetItemById(Guid.Parse(id)) as TBaseItemType;
_libraryItem = Kernel.Instance.GetItemById(Guid.Parse(id)) as TBaseItemType;
}
}
return _LibraryItem;
return _libraryItem;
}
}
@ -92,7 +92,7 @@ namespace MediaBrowser.Api.HttpHandlers
public override Task<string> GetContentType()
{
return Task.FromResult<string>(MimeTypes.GetMimeType("." + GetConversionOutputFormat()));
return Task.FromResult(MimeTypes.GetMimeType("." + GetConversionOutputFormat()));
}
public override bool ShouldCompressResponse(string contentType)
@ -106,12 +106,10 @@ namespace MediaBrowser.Api.HttpHandlers
if (!RequiresConversion())
{
return new StaticFileHandler() { Path = LibraryItem.Path }.ProcessRequest(ctx);
}
else
{
return base.ProcessRequest(ctx);
return new StaticFileHandler { Path = LibraryItem.Path }.ProcessRequest(ctx);
}
return base.ProcessRequest(ctx);
}
protected abstract string GetCommandLineArguments();
@ -173,7 +171,7 @@ namespace MediaBrowser.Api.HttpHandlers
process.EnableRaisingEvents = true;
process.Exited += process_Exited;
process.Exited += ProcessExited;
try
{
@ -203,7 +201,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
void process_Exited(object sender, EventArgs e)
void ProcessExited(object sender, EventArgs e)
{
if (LogFileStream != null)
{

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
using System.ComponentModel.Composition;
using System.Net;
using System.Threading.Tasks;
@ -12,14 +11,14 @@ namespace MediaBrowser.Api.HttpHandlers
/// Provides a handler to set user favorite status for an item
/// </summary>
[Export(typeof(BaseHandler))]
public class FavoriteStatusHandler : BaseSerializationHandler<DTOUserItemData>
public class FavoriteStatusHandler : BaseSerializationHandler<DtoUserItemData>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("FavoriteStatus", request);
}
protected override Task<DTOUserItemData> GetObjectToSerialize()
protected override Task<DtoUserItemData> GetObjectToSerialize()
{
// Get the item
BaseItem item = ApiService.GetItemById(QueryString["id"]);
@ -33,7 +32,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Set favorite status
data.IsFavorite = QueryString["isfavorite"] == "1";
return Task.FromResult<DTOUserItemData>(ApiService.GetDTOUserItemData(data));
return Task.FromResult(ApiService.GetDtoUserItemData(data));
}
}
}

@ -60,7 +60,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
// Get the Genre objects
Genre[] entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); })).ConfigureAwait(false);
Genre[] entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); })).ConfigureAwait(false);
// Convert to an array of IBNItem
IBNItem[] items = new IBNItem[entities.Length];

@ -21,15 +21,15 @@ namespace MediaBrowser.Api.HttpHandlers
return ApiService.IsApiUrlMatch("image", request);
}
private string _ImagePath = null;
private string _imagePath;
private async Task<string> GetImagePath()
{
if (_ImagePath == null)
if (_imagePath == null)
{
_ImagePath = await DiscoverImagePath();
_imagePath = await DiscoverImagePath();
}
return _ImagePath;
return _imagePath;
}
private async Task<string> DiscoverImagePath()
@ -77,21 +77,21 @@ namespace MediaBrowser.Api.HttpHandlers
return GetImagePathFromTypes(item, ImageType, index);
}
private Stream _SourceStream = null;
private Stream _sourceStream;
private async Task<Stream> GetSourceStream()
{
await EnsureSourceStream().ConfigureAwait(false);
return _SourceStream;
return _sourceStream;
}
private bool _SourceStreamEnsured = false;
private bool _sourceStreamEnsured;
private async Task EnsureSourceStream()
{
if (!_SourceStreamEnsured)
if (!_sourceStreamEnsured)
{
try
{
_SourceStream = File.OpenRead(await GetImagePath().ConfigureAwait(false));
_sourceStream = File.OpenRead(await GetImagePath().ConfigureAwait(false));
}
catch (FileNotFoundException ex)
{
@ -110,7 +110,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
finally
{
_SourceStreamEnsured = true;
_sourceStreamEnsured = true;
}
}
}
@ -248,26 +248,24 @@ namespace MediaBrowser.Api.HttpHandlers
{
return item.LogoImagePath;
}
else if (imageType == ImageType.Backdrop)
if (imageType == ImageType.Backdrop)
{
return item.BackdropImagePaths.ElementAt(imageIndex);
}
else if (imageType == ImageType.Banner)
if (imageType == ImageType.Banner)
{
return item.BannerImagePath;
}
else if (imageType == ImageType.Art)
if (imageType == ImageType.Art)
{
return item.ArtImagePath;
}
else if (imageType == ImageType.Thumbnail)
if (imageType == ImageType.Thumbnail)
{
return item.ThumbnailImagePath;
}
else
{
return item.PrimaryImagePath;
}
return item.PrimaryImagePath;
}
}
}

@ -11,14 +11,14 @@ namespace MediaBrowser.Api.HttpHandlers
/// Provides a handler to retrieve a single item
/// </summary>
[Export(typeof(BaseHandler))]
public class ItemHandler : BaseSerializationHandler<DTOBaseItem>
public class ItemHandler : BaseSerializationHandler<DtoBaseItem>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("item", request);
}
protected override Task<DTOBaseItem> GetObjectToSerialize()
protected override Task<DtoBaseItem> GetObjectToSerialize()
{
User user = ApiService.GetUserById(QueryString["userid"], true);
@ -29,7 +29,7 @@ namespace MediaBrowser.Api.HttpHandlers
return null;
}
return ApiService.GetDTOBaseItem(item, user);
return ApiService.GetDtoBaseItem(item, user);
}
}
}

@ -11,20 +11,20 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.HttpHandlers
{
[Export(typeof(BaseHandler))]
public class ItemListHandler : BaseSerializationHandler<DTOBaseItem[]>
public class ItemListHandler : BaseSerializationHandler<DtoBaseItem[]>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("itemlist", request);
}
protected override Task<DTOBaseItem[]> GetObjectToSerialize()
protected override Task<DtoBaseItem[]> GetObjectToSerialize()
{
User user = ApiService.GetUserById(QueryString["userid"], true);
return Task.WhenAll<DTOBaseItem>(GetItemsToSerialize(user).Select(i =>
return Task.WhenAll(GetItemsToSerialize(user).Select(i =>
{
return ApiService.GetDTOBaseItem(i, user, includeChildren: false, includePeople: false);
return ApiService.GetDtoBaseItem(i, user, includeChildren: false, includePeople: false);
}));
}
@ -36,31 +36,31 @@ namespace MediaBrowser.Api.HttpHandlers
{
return parent.GetInProgressItems(user);
}
else if (ListType.Equals("recentlyaddeditems", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("recentlyaddeditems", StringComparison.OrdinalIgnoreCase))
{
return parent.GetRecentlyAddedItems(user);
}
else if (ListType.Equals("recentlyaddedunplayeditems", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("recentlyaddedunplayeditems", StringComparison.OrdinalIgnoreCase))
{
return parent.GetRecentlyAddedUnplayedItems(user);
}
else if (ListType.Equals("itemswithgenre", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("itemswithgenre", StringComparison.OrdinalIgnoreCase))
{
return parent.GetItemsWithGenre(QueryString["name"], user);
}
else if (ListType.Equals("itemswithyear", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("itemswithyear", StringComparison.OrdinalIgnoreCase))
{
return parent.GetItemsWithYear(int.Parse(QueryString["year"]), user);
}
else if (ListType.Equals("itemswithstudio", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("itemswithstudio", StringComparison.OrdinalIgnoreCase))
{
return parent.GetItemsWithStudio(QueryString["name"], user);
}
else if (ListType.Equals("itemswithperson", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("itemswithperson", StringComparison.OrdinalIgnoreCase))
{
return parent.GetItemsWithPerson(QueryString["name"], null, user);
}
else if (ListType.Equals("favorites", StringComparison.OrdinalIgnoreCase))
if (ListType.Equals("favorites", StringComparison.OrdinalIgnoreCase))
{
return parent.GetFavoriteItems(user);
}

@ -13,14 +13,14 @@ namespace MediaBrowser.Api.HttpHandlers
/// This handler retrieves special features for movies
/// </summary>
[Export(typeof(BaseHandler))]
public class MovieSpecialFeaturesHandler : BaseSerializationHandler<DTOBaseItem[]>
public class MovieSpecialFeaturesHandler : BaseSerializationHandler<DtoBaseItem[]>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("MovieSpecialFeatures", request);
}
protected override Task<DTOBaseItem[]> GetObjectToSerialize()
protected override Task<DtoBaseItem[]> GetObjectToSerialize()
{
User user = ApiService.GetUserById(QueryString["userid"], true);
@ -29,12 +29,12 @@ namespace MediaBrowser.Api.HttpHandlers
// If none
if (movie.SpecialFeatures == null)
{
return Task.FromResult<DTOBaseItem[]>(new DTOBaseItem[] { });
return Task.FromResult(new DtoBaseItem[] { });
}
return Task.WhenAll<DTOBaseItem>(movie.SpecialFeatures.Select(i =>
return Task.WhenAll(movie.SpecialFeatures.Select(i =>
{
return ApiService.GetDTOBaseItem(i, user, includeChildren: false, includePeople: true);
return ApiService.GetDtoBaseItem(i, user, includeChildren: false);
}));
}

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
using System.ComponentModel.Composition;
using System.Net;
using System.Threading.Tasks;
@ -12,14 +11,14 @@ namespace MediaBrowser.Api.HttpHandlers
/// Provides a handler to set played status for an item
/// </summary>
[Export(typeof(BaseHandler))]
public class PlayedStatusHandler : BaseSerializationHandler<DTOUserItemData>
public class PlayedStatusHandler : BaseSerializationHandler<DtoUserItemData>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("PlayedStatus", request);
}
protected override Task<DTOUserItemData> GetObjectToSerialize()
protected override Task<DtoUserItemData> GetObjectToSerialize()
{
// Get the item
BaseItem item = ApiService.GetItemById(QueryString["id"]);
@ -33,7 +32,7 @@ namespace MediaBrowser.Api.HttpHandlers
UserItemData data = item.GetUserData(user, true);
return Task.FromResult<DTOUserItemData>(ApiService.GetDTOUserItemData(data));
return Task.FromResult(ApiService.GetDtoUserItemData(data));
}
}
}

@ -32,7 +32,7 @@ namespace MediaBrowser.Api.HttpHandlers
string path = Path.Combine(Kernel.Instance.ApplicationPaths.PluginsPath, filename);
return new StaticFileHandler() { Path = path }.ProcessRequest(ctx);
return new StaticFileHandler { Path = path }.ProcessRequest(ctx);
}
}
}

@ -18,25 +18,25 @@ namespace MediaBrowser.Api.HttpHandlers
return ApiService.IsApiUrlMatch("pluginconfiguration", request);
}
private BasePlugin _Plugin = null;
private BasePlugin _plugin;
private BasePlugin Plugin
{
get
{
if (_Plugin == null)
if (_plugin == null)
{
string name = QueryString["assemblyfilename"];
_Plugin = Kernel.Instance.Plugins.First(p => p.AssemblyFileName.Equals(name, StringComparison.OrdinalIgnoreCase));
_plugin = Kernel.Instance.Plugins.First(p => p.AssemblyFileName.Equals(name, StringComparison.OrdinalIgnoreCase));
}
return _Plugin;
return _plugin;
}
}
protected override Task<BasePluginConfiguration> GetObjectToSerialize()
{
return Task.FromResult<BasePluginConfiguration>(Plugin.Configuration);
return Task.FromResult(Plugin.Configuration);
}
public override TimeSpan CacheDuration

@ -24,7 +24,7 @@ namespace MediaBrowser.Api.HttpHandlers
{
var plugins = Kernel.Instance.Plugins.Select(p =>
{
return new PluginInfo()
return new PluginInfo
{
Name = p.Name,
Enabled = p.Enabled,
@ -35,7 +35,7 @@ namespace MediaBrowser.Api.HttpHandlers
};
});
return Task.FromResult<IEnumerable<PluginInfo>>(plugins);
return Task.FromResult(plugins);
}
}
}

@ -19,7 +19,7 @@ namespace MediaBrowser.Api.HttpHandlers
protected override Task<ServerConfiguration> GetObjectToSerialize()
{
return Task.FromResult<ServerConfiguration>(Kernel.Instance.Configuration);
return Task.FromResult(Kernel.Instance.Configuration);
}
public override TimeSpan CacheDuration

@ -60,7 +60,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
// Get the Studio objects
Studio[] entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); })).ConfigureAwait(false);
Studio[] entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); })).ConfigureAwait(false);
// Convert to an array of IBNItem
IBNItem[] items = new IBNItem[entities.Length];

@ -8,22 +8,22 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.HttpHandlers
{
[Export(typeof(BaseHandler))]
class UserHandler : BaseSerializationHandler<DTOUser>
class UserHandler : BaseSerializationHandler<DtoUser>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("user", request);
}
protected override Task<DTOUser> GetObjectToSerialize()
protected override Task<DtoUser> GetObjectToSerialize()
{
string id = QueryString["id"];
User user = string.IsNullOrEmpty(id) ? ApiService.GetDefaultUser(false) : ApiService.GetUserById(id, false); ;
DTOUser dto = ApiService.GetDTOUser(user);
DtoUser dto = ApiService.GetDtoUser(user);
return Task.FromResult<DTOUser>(dto);
return Task.FromResult(dto);
}
}
}

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Entities;
using System.ComponentModel.Composition;
using System.Net;
using System.Threading.Tasks;
@ -12,14 +11,14 @@ namespace MediaBrowser.Api.HttpHandlers
/// Provides a handler to set a user's rating for an item
/// </summary>
[Export(typeof(BaseHandler))]
public class UserItemRatingHandler : BaseSerializationHandler<DTOUserItemData>
public class UserItemRatingHandler : BaseSerializationHandler<DtoUserItemData>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("UserItemRating", request);
}
protected override Task<DTOUserItemData> GetObjectToSerialize()
protected override Task<DtoUserItemData> GetObjectToSerialize()
{
// Get the item
BaseItem item = ApiService.GetItemById(QueryString["id"]);
@ -41,7 +40,7 @@ namespace MediaBrowser.Api.HttpHandlers
data.Likes = QueryString["likes"] == "1";
}
return Task.FromResult<DTOUserItemData>(ApiService.GetDTOUserItemData(data));
return Task.FromResult(ApiService.GetDtoUserItemData(data));
}
}
}

@ -10,16 +10,16 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.HttpHandlers
{
[Export(typeof(BaseHandler))]
class UsersHandler : BaseSerializationHandler<IEnumerable<DTOUser>>
class UsersHandler : BaseSerializationHandler<IEnumerable<DtoUser>>
{
public override bool HandlesRequest(HttpListenerRequest request)
{
return ApiService.IsApiUrlMatch("users", request);
}
protected override Task<IEnumerable<DTOUser>> GetObjectToSerialize()
protected override Task<IEnumerable<DtoUser>> GetObjectToSerialize()
{
return Task.FromResult<IEnumerable<DTOUser>>(Kernel.Instance.Users.Select(u => ApiService.GetDTOUser(u)));
return Task.FromResult(Kernel.Instance.Users.Select(u => ApiService.GetDtoUser(u)));
}
}
}

@ -34,7 +34,7 @@ namespace MediaBrowser.Api.HttpHandlers
// mp4, 3gp, mov - muxer does not support non-seekable output
// avi, mov, mkv, m4v - can't stream these when encoding. the player will try to download them completely before starting playback.
// wmv - can't seem to figure out the output format name
return new VideoOutputFormats[] { VideoOutputFormats.Mp4, VideoOutputFormats.ThreeGP, VideoOutputFormats.M4v, VideoOutputFormats.Mkv, VideoOutputFormats.Avi, VideoOutputFormats.Mov, VideoOutputFormats.Wmv };
return new VideoOutputFormats[] { VideoOutputFormats.Mp4, VideoOutputFormats.ThreeGp, VideoOutputFormats.M4V, VideoOutputFormats.Mkv, VideoOutputFormats.Avi, VideoOutputFormats.Mov, VideoOutputFormats.Wmv };
}
}
@ -87,11 +87,11 @@ namespace MediaBrowser.Api.HttpHandlers
{
return "matroska";
}
else if (outputFormat == VideoOutputFormats.Ts)
if (outputFormat == VideoOutputFormats.Ts)
{
return "mpegts";
}
else if (outputFormat == VideoOutputFormats.Ogv)
if (outputFormat == VideoOutputFormats.Ogv)
{
return "ogg";
}
@ -104,8 +104,6 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
protected override string GetCommandLineArguments()
{
List<string> audioTranscodeParams = new List<string>();
VideoOutputFormats outputFormat = GetConversionOutputFormat();
return string.Format("-i \"{0}\" -threads 0 {1} {2} -f {3} -",
@ -195,15 +193,15 @@ namespace MediaBrowser.Api.HttpHandlers
// Per webm specification, it must be vpx
return "libvpx";
}
else if (outputFormat == VideoOutputFormats.Asf)
if (outputFormat == VideoOutputFormats.Asf)
{
return "wmv2";
}
else if (outputFormat == VideoOutputFormats.Wmv)
if (outputFormat == VideoOutputFormats.Wmv)
{
return "wmv2";
}
else if (outputFormat == VideoOutputFormats.Ogv)
if (outputFormat == VideoOutputFormats.Ogv)
{
return "libtheora";
}
@ -223,21 +221,21 @@ namespace MediaBrowser.Api.HttpHandlers
private string GetAudioCodec(AudioStream audioStream, VideoOutputFormats outputFormat)
{
// Some output containers require specific codecs
if (outputFormat == VideoOutputFormats.Webm)
{
// Per webm specification, it must be vorbis
return "libvorbis";
}
else if (outputFormat == VideoOutputFormats.Asf)
if (outputFormat == VideoOutputFormats.Asf)
{
return "wmav2";
}
else if (outputFormat == VideoOutputFormats.Wmv)
if (outputFormat == VideoOutputFormats.Wmv)
{
return "wmav2";
}
else if (outputFormat == VideoOutputFormats.Ogv)
if (outputFormat == VideoOutputFormats.Ogv)
{
return "libvorbis";
}
@ -263,7 +261,7 @@ namespace MediaBrowser.Api.HttpHandlers
// libvo_aacenc currently only supports two channel output
return 2;
}
else if (audioCodec.Equals("wmav2"))
if (audioCodec.Equals("wmav2"))
{
// wmav2 currently only supports two channel output
return 2;

@ -57,7 +57,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
// Get the Year objects
Year[] entities = await Task.WhenAll<Year>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })).ConfigureAwait(false);
Year[] entities = await Task.WhenAll(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })).ConfigureAwait(false);
// Convert to an array of IBNItem
IBNItem[] items = new IBNItem[entities.Length];

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

@ -12,7 +12,7 @@ namespace MediaBrowser.ApiInteraction
/// This means that this class can currently only handle types within the Model project.
/// If we need to, we can always add a param indicating whether or not the model serializer should be used.
/// </summary>
private static ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
private static readonly ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
public static T DeserializeFromStream<T>(Stream stream, SerializationFormats format)
where T : class

@ -1,585 +0,0 @@
using MediaBrowser.Model.Authentication;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.DTO;
using MediaBrowser.Model.Weather;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
namespace MediaBrowser.ApiInteraction.Portable
{
public class ApiClient : BaseApiClient
{
private HttpWebRequest GetNewRequest(string url)
{
return HttpWebRequest.CreateHttp(url);
}
/// <summary>
/// Gets an image stream based on a url
/// </summary>
public void GetImageStreamAsync(string url, Action<Stream> callback)
{
GetStreamAsync(url, callback);
}
/// <summary>
/// Gets an image stream based on a url
/// </summary>
private void GetStreamAsync(string url, Action<Stream> callback)
{
HttpWebRequest request = GetNewRequest(url);
request.BeginGetResponse(new AsyncCallback(result =>
{
using (WebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result))
{
Stream stream = response.GetResponseStream();
callback(stream);
}
}), request);
}
/// <summary>
/// Gets a BaseItem
/// </summary>
public void GetItemAsync(Guid id, Guid userId, Action<DTOBaseItem> callback)
{
string url = ApiUrl + "/item?userId=" + userId.ToString();
if (id != Guid.Empty)
{
url += "&id=" + id.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all users
/// </summary>
public void GetAllUsersAsync(Action<DTOUser[]> callback)
{
string url = ApiUrl + "/users";
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all Genres
/// </summary>
public void GetAllGenresAsync(Guid userId, Action<IBNItem[]> callback)
{
string url = ApiUrl + "/genres?userId=" + userId.ToString();
GetDataAsync(url, callback);
}
/// <summary>
/// Gets in-progress items
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public void GetInProgressItemsItemsAsync(Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=inprogressitems&userId=" + userId.ToString();
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets recently added items
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public void GetRecentlyAddedItemsAsync(Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=recentlyaddeditems&userId=" + userId.ToString();
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets favorite items
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public void GetFavoriteItemsAsync(Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=favorites&userId=" + userId.ToString();
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets recently added items that are unplayed.
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public void GetRecentlyAddedUnplayedItemsAsync(Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=recentlyaddedunplayeditems&userId=" + userId.ToString();
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all Years
/// </summary>
public void GetAllYearsAsync(Guid userId, Action<IBNItem[]> callback)
{
string url = ApiUrl + "/years?userId=" + userId.ToString();
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all items that contain a given Year
/// </summary>
public void GetItemsWithYearAsync(string name, Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithyear&userId=" + userId.ToString() + "&name=" + name;
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all items that contain a given Genre
/// </summary>
public void GetItemsWithGenreAsync(string name, Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithgenre&userId=" + userId.ToString() + "&name=" + name;
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all items that contain a given Person
/// </summary>
public void GetItemsWithPersonAsync(string name, Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithperson&userId=" + userId.ToString() + "&name=" + name;
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all items that contain a given Person
/// </summary>
public void GetItemsWithPersonAsync(string name, string personType, Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithperson&userId=" + userId.ToString() + "&name=" + name;
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
url += "&persontype=" + personType;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all studious
/// </summary>
public void GetAllStudiosAsync(Guid userId, Action<IBNItem[]> callback)
{
string url = ApiUrl + "/studios?userId=" + userId.ToString();
GetDataAsync(url, callback);
}
/// <summary>
/// Gets all items that contain a given Studio
/// </summary>
public void GetItemsWithStudioAsync(string name, Guid userId, Action<DTOBaseItem[]> callback, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithstudio&userId=" + userId.ToString() + "&name=" + name;
if (folderId.HasValue)
{
url += "&id=" + folderId.ToString();
}
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a studio
/// </summary>
public void GetStudioAsync(Guid userId, string name, Action<IBNItem> callback)
{
string url = ApiUrl + "/studio?userId=" + userId.ToString() + "&name=" + name;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a genre
/// </summary>
public void GetGenreAsync(Guid userId, string name, Action<IBNItem> callback)
{
string url = ApiUrl + "/genre?userId=" + userId.ToString() + "&name=" + name;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a person
/// </summary>
public void GetPersonAsync(Guid userId, string name, Action<IBNItem> callback)
{
string url = ApiUrl + "/person?userId=" + userId.ToString() + "&name=" + name;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a year
/// </summary>
public void GetYearAsync(Guid userId, int year, Action<IBNItem> callback)
{
string url = ApiUrl + "/year?userId=" + userId.ToString() + "&year=" + year;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a list of plugins installed on the server
/// </summary>
public void GetInstalledPluginsAsync(Action<PluginInfo[]> callback)
{
string url = ApiUrl + "/plugins";
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a list of plugins installed on the server
/// </summary>
public void GetPluginAssemblyAsync(PluginInfo plugin, Action<Stream> callback)
{
string url = ApiUrl + "/pluginassembly?assemblyfilename=" + plugin.AssemblyFileName;
GetStreamAsync(url, callback);
}
/// <summary>
/// Gets the current server configuration
/// </summary>
public void GetServerConfigurationAsync(Action<ServerConfiguration> callback)
{
string url = ApiUrl + "/ServerConfiguration";
GetDataAsync(url, callback);
}
/// <summary>
/// Gets weather information for the default location as set in configuration
/// </summary>
public void GetPluginConfigurationAsync(PluginInfo plugin, Type configurationType, Action<object> callback)
{
string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName;
// At the moment this can't be retrieved in protobuf format
SerializationFormats format = DataSerializer.CanDeSerializeJsv ? SerializationFormats.Jsv : SerializationFormats.Json;
GetDataAsync(url, callback, configurationType, format);
}
/// <summary>
/// Gets the default user
/// </summary>
public void GetDefaultUserAsync(Action<DTOUser> callback)
{
string url = ApiUrl + "/user";
GetDataAsync(url, callback);
}
/// <summary>
/// Gets a user by id
/// </summary>
public void GetUserAsync(Guid id, Action<DTOUser> callback)
{
string url = ApiUrl + "/user?id=" + id.ToString();
GetDataAsync(url, callback);
}
/// <summary>
/// Gets weather information for the default location as set in configuration
/// </summary>
public void GetWeatherInfoAsync(Action<WeatherInfo> callback)
{
string url = ApiUrl + "/weather";
GetDataAsync(url, callback);
}
/// <summary>
/// Gets weather information for a specific zip code
/// </summary>
public void GetWeatherInfoAsync(string zipCode, Action<WeatherInfo> callback)
{
string url = ApiUrl + "/weather?zipcode=" + zipCode;
GetDataAsync(url, callback);
}
/// <summary>
/// Gets special features for a Movie
/// </summary>
public void GetMovieSpecialFeaturesAsync(Guid itemId, Guid userId, Action<DTOBaseItem[]> callback)
{
string url = ApiUrl + "/MovieSpecialFeatures?id=" + itemId;
url += "&userid=" + userId;
GetDataAsync(url, callback);
}
/// <summary>
/// Authenticates a user and returns the result
/// </summary>
public void AuthenticateUserAsync(Guid userId, string password, Action<AuthenticationResult> callback)
{
string url = ApiUrl + "/UserAuthentication?dataformat=" + SerializationFormat.ToString();
Dictionary<string, string> formValues = new Dictionary<string, string>();
formValues["userid"] = userId.ToString();
if (!string.IsNullOrEmpty(password))
{
formValues["password"] = password;
}
PostDataAsync(url, formValues, callback, SerializationFormat);
}
/// <summary>
/// Updates a user's favorite status for an item and returns the updated UserItemData object.
/// </summary>
public void UpdateFavoriteStatusAsync(Guid itemId, Guid userId, bool isFavorite, Action<DTOUserItemData> callback)
{
string url = ApiUrl + "/favoritestatus?id=" + itemId;
url += "&userid=" + userId;
url += "&isfavorite=" + (isFavorite ? "1" : "0");
GetDataAsync(url, callback);
}
/// <summary>
/// Updates played status for an item
/// </summary>
public void UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed, Action<DTOUserItemData> callback)
{
string url = ApiUrl + "/PlayedStatus?id=" + itemId;
url += "&userid=" + userId;
url += "&played=" + (wasPlayed ? "1" : "0");
GetDataAsync(url, callback);
}
/// <summary>
/// Clears a user's rating for an item
/// </summary>
public void ClearUserItemRatingAsync(Guid itemId, Guid userId, Action<DTOUserItemData> callback)
{
string url = ApiUrl + "/UserItemRating?id=" + itemId;
url += "&userid=" + userId;
url += "&clear=1";
GetDataAsync(url, callback);
}
/// <summary>
/// Updates a user's rating for an item, based on likes or dislikes
/// </summary>
public void UpdateUserItemRatingAsync(Guid itemId, Guid userId, bool likes, Action<DTOUserItemData> callback)
{
string url = ApiUrl + "/UserItemRating?id=" + itemId;
url += "&userid=" + userId;
url += "&likes=" + (likes ? "1" : "0");
GetDataAsync(url, callback);
}
/// <summary>
/// Performs a GET request, and deserializes the response stream to an object of Type T
/// </summary>
private void GetDataAsync<T>(string url, Action<T> callback)
where T : class
{
GetDataAsync<T>(url, callback, SerializationFormat);
}
/// <summary>
/// Performs a GET request, and deserializes the response stream to an object of Type T
/// </summary>
private void GetDataAsync<T>(string url, Action<T> callback, SerializationFormats serializationFormat)
where T : class
{
if (url.IndexOf('?') == -1)
{
url += "?dataformat=" + serializationFormat.ToString();
}
else
{
url += "&dataformat=" + serializationFormat.ToString();
}
HttpWebRequest request = GetNewRequest(url);
request.BeginGetResponse(new AsyncCallback(result =>
{
T value;
using (WebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result))
{
using (Stream stream = response.GetResponseStream())
{
value = DeserializeFromStream<T>(stream);
}
}
callback(value);
}), request);
}
/// <summary>
/// Performs a GET request, and deserializes the response stream to an object of Type T
/// </summary>
private void GetDataAsync(string url, Action<object> callback, Type type, SerializationFormats serializationFormat)
{
if (url.IndexOf('?') == -1)
{
url += "?dataformat=" + serializationFormat.ToString();
}
else
{
url += "&dataformat=" + serializationFormat.ToString();
}
HttpWebRequest request = GetNewRequest(url);
request.BeginGetResponse(new AsyncCallback(result =>
{
object value;
using (WebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result))
{
using (Stream stream = response.GetResponseStream())
{
value = DataSerializer.DeserializeFromStream(stream, serializationFormat, type);
}
}
callback(value);
}), request);
}
/// <summary>
/// Performs a POST request, and deserializes the response stream to an object of Type T
/// </summary>
private void PostDataAsync<T>(string url, Dictionary<string, string> formValues, Action<T> callback, SerializationFormats serializationFormat)
where T : class
{
if (url.IndexOf('?') == -1)
{
url += "?dataformat=" + serializationFormat.ToString();
}
else
{
url += "&dataformat=" + serializationFormat.ToString();
}
HttpWebRequest request = GetNewRequest(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
// Begin getting request stream
request.BeginGetRequestStream(new AsyncCallback(beginGetRequestStreamResult =>
{
// Once we have the request stream, write the post data
using (Stream requestStream = request.EndGetRequestStream(beginGetRequestStreamResult))
{
// Construct the body
string postBody = string.Join("&", formValues.Keys.Select(s => string.Format("{0}={1}", s, formValues[s])).ToArray());
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postBody);
// Write to the request stream.
requestStream.Write(byteArray, 0, byteArray.Length);
}
// Begin getting response stream
request.BeginGetResponse(new AsyncCallback(result =>
{
// Once we have it, deserialize the data and execute the callback
T value;
using (WebResponse response = request.EndGetResponse(result))
{
using (Stream responseStream = response.GetResponseStream())
{
value = DeserializeFromStream<T>(responseStream);
}
}
callback(value);
}), null);
}), null);
}
}
}

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MediaBrowser.ApiInteraction.Portable</RootNamespace>
<AssemblyName>MediaBrowser.ApiInteraction.Portable</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile4</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\MediaBrowser.ApiInteraction\BaseApiClient.cs">
<Link>BaseApiClient.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.ApiInteraction.Metro\DataSerializer.cs">
<Link>DataSerializer.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.ApiInteraction\SerializationFormats.cs">
<Link>SerializationFormats.cs</Link>
</Compile>
<Compile Include="ApiClient.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\Json.Net\Portable\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="protobuf-net">
<HintPath>..\protobuf-net\Full\portable\protobuf-net.dll</HintPath>
</Reference>
<Reference Include="ProtobufModelSerializer">
<HintPath>..\MediaBrowser.Model\bin\ProtobufModelSerializer.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
<Name>MediaBrowser.Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

@ -1,30 +0,0 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MediaBrowser.ApiInteraction.Portable")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MediaBrowser.ApiInteraction.Portable")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

@ -12,18 +12,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F0E0E6
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ApiInteraction.Metro", "MediaBrowser.ApiInteraction.Metro\MediaBrowser.ApiInteraction.Metro.csproj", "{94CEA07A-307C-4663-AA43-7BD852808574}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ApiInteraction.Portable", "MediaBrowser.ApiInteraction.Portable\MediaBrowser.ApiInteraction.Portable.csproj", "{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{756B93D2-5FFA-4B8D-BDCA-127476F1E6FB}.Release|Any CPU.Build.0 = Release|Any CPU
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Any CPU.ActiveCfg = Release|Any CPU

@ -299,7 +299,7 @@ namespace MediaBrowser.ApiInteraction
/// <param name="maxWidth">Use if a max width is required. Aspect ratio will be preserved.</param>
/// <param name="maxHeight">Use if a max height is required. Aspect ratio will be preserved.</param>
/// <param name="quality">Quality level, from 0-100. Currently only applies to JPG. The default value should suffice.</param>
public string[] GetBackdropImageUrls(DTOBaseItem item, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
public string[] GetBackdropImageUrls(DtoBaseItem item, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
{
Guid? backdropItemId = null;
int backdropCount = 0;
@ -339,7 +339,7 @@ namespace MediaBrowser.ApiInteraction
/// <param name="maxWidth">Use if a max width is required. Aspect ratio will be preserved.</param>
/// <param name="maxHeight">Use if a max height is required. Aspect ratio will be preserved.</param>
/// <param name="quality">Quality level, from 0-100. Currently only applies to JPG. The default value should suffice.</param>
public string GetLogoImageUrl(DTOBaseItem item, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
public string GetLogoImageUrl(DtoBaseItem item, int? width = null, int? height = null, int? maxWidth = null, int? maxHeight = null, int? quality = null)
{
Guid? logoItemId = item.HasLogo ? item.Id : item.ParentLogoItemId;

@ -50,7 +50,7 @@ namespace MediaBrowser.ApiInteraction
/// <summary>
/// Gets a BaseItem
/// </summary>
public async Task<DTOBaseItem> GetItemAsync(Guid id, Guid userId)
public async Task<DtoBaseItem> GetItemAsync(Guid id, Guid userId)
{
string url = ApiUrl + "/item?userId=" + userId.ToString();
@ -61,20 +61,20 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem>(stream);
return DeserializeFromStream<DtoBaseItem>(stream);
}
}
/// <summary>
/// Gets all Users
/// </summary>
public async Task<DTOUser[]> GetAllUsersAsync()
public async Task<DtoUser[]> GetAllUsersAsync()
{
string url = ApiUrl + "/users";
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUser[]>(stream);
return DeserializeFromStream<DtoUser[]>(stream);
}
}
@ -96,7 +96,7 @@ namespace MediaBrowser.ApiInteraction
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetInProgressItemsItemsAsync(Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetInProgressItemsItemsAsync(Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=inprogressitems&userId=" + userId.ToString();
@ -107,7 +107,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -116,7 +116,7 @@ namespace MediaBrowser.ApiInteraction
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetRecentlyAddedItemsAsync(Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetRecentlyAddedItemsAsync(Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=recentlyaddeditems&userId=" + userId.ToString();
@ -127,7 +127,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -136,7 +136,7 @@ namespace MediaBrowser.ApiInteraction
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetFavoriteItemsAsync(Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetFavoriteItemsAsync(Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=favorites&userId=" + userId.ToString();
@ -147,7 +147,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -156,7 +156,7 @@ namespace MediaBrowser.ApiInteraction
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetRecentlyAddedUnplayedItemsAsync(Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetRecentlyAddedUnplayedItemsAsync(Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=recentlyaddedunplayeditems&userId=" + userId.ToString();
@ -167,7 +167,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -188,7 +188,7 @@ namespace MediaBrowser.ApiInteraction
/// Gets all items that contain a given Year
/// </summary>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetItemsWithYearAsync(string name, Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetItemsWithYearAsync(string name, Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithyear&userId=" + userId.ToString() + "&name=" + name;
@ -199,7 +199,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -207,7 +207,7 @@ namespace MediaBrowser.ApiInteraction
/// Gets all items that contain a given Genre
/// </summary>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetItemsWithGenreAsync(string name, Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetItemsWithGenreAsync(string name, Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithgenre&userId=" + userId.ToString() + "&name=" + name;
@ -218,7 +218,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -226,7 +226,7 @@ namespace MediaBrowser.ApiInteraction
/// Gets all items that contain a given Person
/// </summary>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetItemsWithPersonAsync(string name, Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetItemsWithPersonAsync(string name, Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithperson&userId=" + userId.ToString() + "&name=" + name;
@ -237,7 +237,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -245,7 +245,7 @@ namespace MediaBrowser.ApiInteraction
/// Gets all items that contain a given Person
/// </summary>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetItemsWithPersonAsync(string name, string personType, Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetItemsWithPersonAsync(string name, string personType, Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithperson&userId=" + userId.ToString() + "&name=" + name;
@ -258,7 +258,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -279,7 +279,7 @@ namespace MediaBrowser.ApiInteraction
/// Gets all items that contain a given Studio
/// </summary>
/// <param name="folderId">(Optional) Specify a folder Id to localize the search to a specific folder.</param>
public async Task<DTOBaseItem[]> GetItemsWithStudioAsync(string name, Guid userId, Guid? folderId = null)
public async Task<DtoBaseItem[]> GetItemsWithStudioAsync(string name, Guid userId, Guid? folderId = null)
{
string url = ApiUrl + "/itemlist?listtype=itemswithstudio&userId=" + userId.ToString() + "&name=" + name;
@ -290,7 +290,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
@ -401,26 +401,26 @@ namespace MediaBrowser.ApiInteraction
/// <summary>
/// Gets the default user
/// </summary>
public async Task<DTOUser> GetDefaultUserAsync()
public async Task<DtoUser> GetDefaultUserAsync()
{
string url = ApiUrl + "/user";
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUser>(stream);
return DeserializeFromStream<DtoUser>(stream);
}
}
/// <summary>
/// Gets a user by id
/// </summary>
public async Task<DTOUser> GetUserAsync(Guid id)
public async Task<DtoUser> GetUserAsync(Guid id)
{
string url = ApiUrl + "/user?id=" + id.ToString();
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUser>(stream);
return DeserializeFromStream<DtoUser>(stream);
}
}
@ -453,21 +453,21 @@ namespace MediaBrowser.ApiInteraction
/// <summary>
/// Gets special features for a Movie
/// </summary>
public async Task<DTOBaseItem[]> GetMovieSpecialFeaturesAsync(Guid itemId, Guid userId)
public async Task<DtoBaseItem[]> GetMovieSpecialFeaturesAsync(Guid itemId, Guid userId)
{
string url = ApiUrl + "/MovieSpecialFeatures?id=" + itemId;
url += "&userid=" + userId;
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOBaseItem[]>(stream);
return DeserializeFromStream<DtoBaseItem[]>(stream);
}
}
/// <summary>
/// Updates played status for an item
/// </summary>
public async Task<DTOUserItemData> UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed)
public async Task<DtoUserItemData> UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed)
{
string url = ApiUrl + "/PlayedStatus?id=" + itemId;
@ -476,14 +476,14 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUserItemData>(stream);
return DeserializeFromStream<DtoUserItemData>(stream);
}
}
/// <summary>
/// Updates a user's favorite status for an item and returns the updated UserItemData object.
/// </summary>
public async Task<DTOUserItemData> UpdateFavoriteStatusAsync(Guid itemId, Guid userId, bool isFavorite)
public async Task<DtoUserItemData> UpdateFavoriteStatusAsync(Guid itemId, Guid userId, bool isFavorite)
{
string url = ApiUrl + "/favoritestatus?id=" + itemId;
@ -492,14 +492,14 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUserItemData>(stream);
return DeserializeFromStream<DtoUserItemData>(stream);
}
}
/// <summary>
/// Clears a user's rating for an item
/// </summary>
public async Task<DTOUserItemData> ClearUserItemRatingAsync(Guid itemId, Guid userId)
public async Task<DtoUserItemData> ClearUserItemRatingAsync(Guid itemId, Guid userId)
{
string url = ApiUrl + "/UserItemRating?id=" + itemId;
@ -508,14 +508,14 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUserItemData>(stream);
return DeserializeFromStream<DtoUserItemData>(stream);
}
}
/// <summary>
/// Updates a user's rating for an item, based on likes or dislikes
/// </summary>
public async Task<DTOUserItemData> UpdateUserItemRatingAsync(Guid itemId, Guid userId, bool likes)
public async Task<DtoUserItemData> UpdateUserItemRatingAsync(Guid itemId, Guid userId, bool likes)
{
string url = ApiUrl + "/UserItemRating?id=" + itemId;
@ -524,7 +524,7 @@ namespace MediaBrowser.ApiInteraction
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
{
return DeserializeFromStream<DTOUserItemData>(stream);
return DeserializeFromStream<DtoUserItemData>(stream);
}
}

@ -12,7 +12,7 @@ namespace MediaBrowser.ApiInteraction
/// This means that this class can currently only handle types within the Model project.
/// If we need to, we can always add a param indicating whether or not the model serializer should be used.
/// </summary>
private static ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
private static readonly ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
/// <summary>
/// Deserializes an object using generics
@ -20,16 +20,16 @@ namespace MediaBrowser.ApiInteraction
public static T DeserializeFromStream<T>(Stream stream, SerializationFormats format)
where T : class
{
if (format == ApiInteraction.SerializationFormats.Protobuf)
if (format == SerializationFormats.Protobuf)
{
//return Serializer.Deserialize<T>(stream);
return ProtobufModelSerializer.Deserialize(stream, null, typeof(T)) as T;
}
else if (format == ApiInteraction.SerializationFormats.Jsv)
else if (format == SerializationFormats.Jsv)
{
return TypeSerializer.DeserializeFromStream<T>(stream);
}
else if (format == ApiInteraction.SerializationFormats.Json)
else if (format == SerializationFormats.Json)
{
return JsonSerializer.DeserializeFromStream<T>(stream);
}

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

@ -67,7 +67,7 @@ namespace MediaBrowser.Common.Kernel
/// </summary>
public abstract KernelContext KernelContext { get; }
public BaseKernel()
protected BaseKernel()
{
ApplicationPaths = new TApplicationPathsType();
}
@ -76,13 +76,13 @@ namespace MediaBrowser.Common.Kernel
{
ReloadLogger();
progress.Report(new TaskProgress() { Description = "Loading configuration", PercentComplete = 0 });
progress.Report(new TaskProgress { Description = "Loading configuration", PercentComplete = 0 });
ReloadConfiguration();
progress.Report(new TaskProgress() { Description = "Starting Http server", PercentComplete = 5 });
progress.Report(new TaskProgress { Description = "Starting Http server", PercentComplete = 5 });
ReloadHttpServer();
progress.Report(new TaskProgress() { Description = "Loading Plugins", PercentComplete = 10 });
progress.Report(new TaskProgress { Description = "Loading Plugins", PercentComplete = 10 });
await ReloadComposableParts().ConfigureAwait(false);
}
@ -192,7 +192,7 @@ namespace MediaBrowser.Common.Kernel
HttpServer = new HttpServer(HttpServerUrlPrefix);
HttpListener = HttpServer.Subscribe((ctx) =>
HttpListener = HttpServer.Subscribe(ctx =>
{
BaseHandler handler = HttpHandlers.FirstOrDefault(h => h.HandlesRequest(ctx.Request));

@ -67,7 +67,7 @@ namespace MediaBrowser.Common.Logging
Thread currentThread = Thread.CurrentThread;
LogRow row = new LogRow()
LogRow row = new LogRow
{
Severity = severity,
Message = message,

@ -1,7 +1,5 @@
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Common.Logging
{
@ -17,7 +15,7 @@ namespace MediaBrowser.Common.Logging
public override string ToString()
{
List<string> data = new List<string>();
var data = new List<string>();
data.Add(Time.ToString(TimePattern));

@ -7,7 +7,7 @@ namespace MediaBrowser.Common.Logging
/// <summary>
/// Provides a Logger that can write to any Stream
/// </summary>
public class StreamLogger : ThreadedLogger
public class StreamLogger : BaseLogger
{
private Stream Stream { get; set; }
@ -17,11 +17,15 @@ namespace MediaBrowser.Common.Logging
Stream = stream;
}
protected override void AsyncLogMessage(LogRow row)
protected override void LogEntry(LogRow row)
{
byte[] bytes = new UTF8Encoding().GetBytes(row.ToString() + Environment.NewLine);
Stream.Write(bytes, 0, bytes.Length);
Stream.Flush();
lock (Stream)
{
Stream.Write(bytes, 0, bytes.Length);
Stream.Flush();
}
}
public override void Dispose()

@ -1,73 +0,0 @@
using System;
using System.Collections.Generic;
using System.Threading;
namespace MediaBrowser.Common.Logging
{
public abstract class ThreadedLogger : BaseLogger
{
Thread loggingThread;
Queue<Action> queue = new Queue<Action>();
AutoResetEvent hasNewItems = new AutoResetEvent(false);
volatile bool terminate = false;
bool waiting = false;
public ThreadedLogger()
: base()
{
loggingThread = new Thread(new ThreadStart(ProcessQueue));
loggingThread.IsBackground = true;
loggingThread.Start();
}
void ProcessQueue()
{
while (!terminate)
{
waiting = true;
hasNewItems.WaitOne(10000, true);
waiting = false;
Queue<Action> queueCopy;
lock (queue)
{
queueCopy = new Queue<Action>(queue);
queue.Clear();
}
foreach (var log in queueCopy)
{
log();
}
}
}
protected override void LogEntry(LogRow row)
{
lock (queue)
{
queue.Enqueue(() => AsyncLogMessage(row));
}
hasNewItems.Set();
}
protected abstract void AsyncLogMessage(LogRow row);
protected override void Flush()
{
while (!waiting)
{
Thread.Sleep(1);
}
}
public override void Dispose()
{
Flush();
terminate = true;
hasNewItems.Set();
base.Dispose();
}
}
}

@ -83,7 +83,6 @@
<ItemGroup>
<Compile Include="Kernel\BaseApplicationPaths.cs" />
<Compile Include="Drawing\DrawingUtils.cs" />
<Compile Include="Logging\ThreadedLogger.cs" />
<Compile Include="Logging\TraceLogger.cs" />
<Compile Include="Net\Handlers\StaticFileHandler.cs" />
<Compile Include="Net\MimeTypes.cs" />

@ -5,7 +5,7 @@ namespace MediaBrowser.Common.Net.Handlers
{
public abstract class BaseEmbeddedResourceHandler : BaseHandler
{
public BaseEmbeddedResourceHandler(string resourcePath)
protected BaseEmbeddedResourceHandler(string resourcePath)
: base()
{
ResourcePath = resourcePath;
@ -15,7 +15,7 @@ namespace MediaBrowser.Common.Net.Handlers
public override Task<string> GetContentType()
{
return Task.FromResult<string>(MimeTypes.GetMimeType(ResourcePath));
return Task.FromResult(MimeTypes.GetMimeType(ResourcePath));
}
protected override Task WriteResponseToOutputStream(Stream stream)

@ -25,8 +25,8 @@ namespace MediaBrowser.Common.Net.Handlers
}
}
private bool _TotalContentLengthDiscovered = false;
private long? _TotalContentLength = null;
private bool _TotalContentLengthDiscovered;
private long? _TotalContentLength;
public long? TotalContentLength
{
get
@ -34,6 +34,7 @@ namespace MediaBrowser.Common.Net.Handlers
if (!_TotalContentLengthDiscovered)
{
_TotalContentLength = GetTotalContentLength();
_TotalContentLengthDiscovered = true;
}
return _TotalContentLength;
@ -64,7 +65,7 @@ namespace MediaBrowser.Common.Net.Handlers
}
}
protected List<KeyValuePair<long, long?>> _RequestedRanges = null;
private List<KeyValuePair<long, long?>> _RequestedRanges;
protected IEnumerable<KeyValuePair<long, long?>> RequestedRanges
{
get
@ -367,7 +368,7 @@ namespace MediaBrowser.Common.Net.Handlers
{
DateTime? value = null;
return Task.FromResult<DateTime?>(value);
return Task.FromResult(value);
}
private bool IsResponseValid
@ -378,7 +379,7 @@ namespace MediaBrowser.Common.Net.Handlers
}
}
private Hashtable _FormValues = null;
private Hashtable _FormValues;
/// <summary>
/// Gets a value from form POST data

@ -15,7 +15,7 @@ namespace MediaBrowser.Common.Net.Handlers
if (string.IsNullOrEmpty(format))
{
return Handlers.SerializationFormat.Json;
return SerializationFormat.Json;
}
return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true);
@ -26,16 +26,16 @@ namespace MediaBrowser.Common.Net.Handlers
{
switch (SerializationFormat)
{
case Handlers.SerializationFormat.Jsv:
return Task.FromResult<string>("text/plain");
case Handlers.SerializationFormat.Protobuf:
return Task.FromResult<string>("application/x-protobuf");
case SerializationFormat.Jsv:
return Task.FromResult("text/plain");
case SerializationFormat.Protobuf:
return Task.FromResult("application/x-protobuf");
default:
return Task.FromResult<string>(MimeTypes.JsonMimeType);
return Task.FromResult(MimeTypes.JsonMimeType);
}
}
private bool _ObjectToSerializeEnsured = false;
private bool _ObjectToSerializeEnsured;
private T _ObjectToSerialize;
private async Task EnsureObjectToSerialize()
@ -66,14 +66,14 @@ namespace MediaBrowser.Common.Net.Handlers
switch (SerializationFormat)
{
case Handlers.SerializationFormat.Jsv:
JsvSerializer.SerializeToStream<T>(_ObjectToSerialize, stream);
case SerializationFormat.Jsv:
JsvSerializer.SerializeToStream(_ObjectToSerialize, stream);
break;
case Handlers.SerializationFormat.Protobuf:
ProtobufSerializer.SerializeToStream<T>(_ObjectToSerialize, stream);
case SerializationFormat.Protobuf:
ProtobufSerializer.SerializeToStream(_ObjectToSerialize, stream);
break;
default:
JsonSerializer.SerializeToStream<T>(_ObjectToSerialize, stream);
JsonSerializer.SerializeToStream(_ObjectToSerialize, stream);
break;
}
}

@ -33,8 +33,8 @@ namespace MediaBrowser.Common.Net.Handlers
}
}
private bool _SourceStreamEnsured = false;
private Stream _SourceStream = null;
private bool _SourceStreamEnsured;
private Stream _SourceStream;
private Stream SourceStream
{
get
@ -116,12 +116,12 @@ namespace MediaBrowser.Common.Net.Handlers
value = File.GetLastWriteTimeUtc(Path);
}
return Task.FromResult<DateTime?>(value);
return Task.FromResult(value);
}
public override Task<string> GetContentType()
{
return Task.FromResult<string>(MimeTypes.GetMimeType(Path));
return Task.FromResult(MimeTypes.GetMimeType(Path));
}
protected override Task PrepareResponse()
@ -141,21 +141,17 @@ namespace MediaBrowser.Common.Net.Handlers
{
return ServeCompleteRangeRequest(requestedRange, stream);
}
else if (TotalContentLength.HasValue)
if (TotalContentLength.HasValue)
{
// This will have to buffer a portion of the content into memory
return ServePartialRangeRequestWithKnownTotalContentLength(requestedRange, stream);
}
else
{
// This will have to buffer the entire content into memory
return ServePartialRangeRequestWithUnknownTotalContentLength(requestedRange, stream);
}
}
else
{
return SourceStream.CopyToAsync(stream);
// This will have to buffer the entire content into memory
return ServePartialRangeRequestWithUnknownTotalContentLength(requestedRange, stream);
}
return SourceStream.CopyToAsync(stream);
}
protected override void DisposeResponseStream()

@ -20,7 +20,7 @@ namespace MediaBrowser.Common.Net
private IObservable<HttpListenerContext> ObservableHttpContext()
{
return Observable.Create<HttpListenerContext>(obs =>
Observable.FromAsync<HttpListenerContext>(() => listener.GetContextAsync())
Observable.FromAsync(() => listener.GetContextAsync())
.Subscribe(obs))
.Repeat()
.Retry()

@ -9,7 +9,7 @@ namespace MediaBrowser.Common.Net
public static string GetMimeType(string path)
{
string ext = Path.GetExtension(path);
var ext = Path.GetExtension(path);
// http://en.wikipedia.org/wiki/Internet_media_type
// Add more as needed
@ -19,137 +19,137 @@ namespace MediaBrowser.Common.Net
{
return "video/mpeg";
}
else if (ext.EndsWith("mp4", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("mp4", StringComparison.OrdinalIgnoreCase))
{
return "video/mp4";
}
else if (ext.EndsWith("ogv", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("ogv", StringComparison.OrdinalIgnoreCase))
{
return "video/ogg";
}
else if (ext.EndsWith("mov", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("mov", StringComparison.OrdinalIgnoreCase))
{
return "video/quicktime";
}
else if (ext.EndsWith("webm", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("webm", StringComparison.OrdinalIgnoreCase))
{
return "video/webm";
}
else if (ext.EndsWith("mkv", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("mkv", StringComparison.OrdinalIgnoreCase))
{
return "video/x-matroska";
}
else if (ext.EndsWith("wmv", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("wmv", StringComparison.OrdinalIgnoreCase))
{
return "video/x-ms-wmv";
}
else if (ext.EndsWith("flv", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("flv", StringComparison.OrdinalIgnoreCase))
{
return "video/x-flv";
}
else if (ext.EndsWith("avi", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("avi", StringComparison.OrdinalIgnoreCase))
{
return "video/avi";
}
else if (ext.EndsWith("m4v", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("m4v", StringComparison.OrdinalIgnoreCase))
{
return "video/x-m4v";
}
else if (ext.EndsWith("asf", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("asf", StringComparison.OrdinalIgnoreCase))
{
return "video/x-ms-asf";
}
else if (ext.EndsWith("3gp", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("3gp", StringComparison.OrdinalIgnoreCase))
{
return "video/3gpp";
}
else if (ext.EndsWith("3g2", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("3g2", StringComparison.OrdinalIgnoreCase))
{
return "video/3gpp2";
}
else if (ext.EndsWith("ts", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("ts", StringComparison.OrdinalIgnoreCase))
{
return "video/mp2t";
}
// Type text
else if (ext.EndsWith("css", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("css", StringComparison.OrdinalIgnoreCase))
{
return "text/css";
}
else if (ext.EndsWith("csv", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("csv", StringComparison.OrdinalIgnoreCase))
{
return "text/csv";
}
else if (ext.EndsWith("html", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("html", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("html", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("html", StringComparison.OrdinalIgnoreCase))
{
return "text/html";
}
else if (ext.EndsWith("txt", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("txt", StringComparison.OrdinalIgnoreCase))
{
return "text/plain";
}
// Type image
else if (ext.EndsWith("gif", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("gif", StringComparison.OrdinalIgnoreCase))
{
return "image/gif";
}
else if (ext.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase))
{
return "image/jpeg";
}
else if (ext.EndsWith("png", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
return "image/png";
}
else if (ext.EndsWith("ico", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("ico", StringComparison.OrdinalIgnoreCase))
{
return "image/vnd.microsoft.icon";
}
// Type audio
else if (ext.EndsWith("mp3", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("mp3", StringComparison.OrdinalIgnoreCase))
{
return "audio/mpeg";
}
else if (ext.EndsWith("m4a", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("aac", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("m4a", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("aac", StringComparison.OrdinalIgnoreCase))
{
return "audio/mp4";
}
else if (ext.EndsWith("webma", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("webma", StringComparison.OrdinalIgnoreCase))
{
return "audio/webm";
}
else if (ext.EndsWith("wav", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("wav", StringComparison.OrdinalIgnoreCase))
{
return "audio/wav";
}
else if (ext.EndsWith("wma", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("wma", StringComparison.OrdinalIgnoreCase))
{
return "audio/x-ms-wma";
}
else if (ext.EndsWith("flac", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("flac", StringComparison.OrdinalIgnoreCase))
{
return "audio/flac";
}
else if (ext.EndsWith("aac", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("aac", StringComparison.OrdinalIgnoreCase))
{
return "audio/x-aac";
}
else if (ext.EndsWith("ogg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("oga", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("ogg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("oga", StringComparison.OrdinalIgnoreCase))
{
return "audio/ogg";
}
// Playlists
else if (ext.EndsWith("m3u8", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("m3u8", StringComparison.OrdinalIgnoreCase))
{
return "application/x-mpegURL";
}
// Misc
else if (ext.EndsWith("dll", StringComparison.OrdinalIgnoreCase))
if (ext.EndsWith("dll", StringComparison.OrdinalIgnoreCase))
{
return "application/x-msdownload";
}

@ -74,7 +74,7 @@ namespace MediaBrowser.Common.Plugins
}
}
private DateTime? _ConfigurationDateLastModified = null;
private DateTime? _ConfigurationDateLastModified;
public DateTime ConfigurationDateLastModified
{
get
@ -123,7 +123,7 @@ namespace MediaBrowser.Common.Plugins
}
}
private string _DataFolderPath = null;
private string _DataFolderPath;
/// <summary>
/// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed
/// </summary>

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

@ -12,7 +12,7 @@ namespace MediaBrowser.Common.Serialization
{
Configure();
ServiceStack.Text.JsonSerializer.SerializeToStream<T>(obj, stream);
ServiceStack.Text.JsonSerializer.SerializeToStream(obj, stream);
}
public static void SerializeToFile<T>(T obj, string file)
@ -21,7 +21,7 @@ namespace MediaBrowser.Common.Serialization
using (Stream stream = File.Open(file, FileMode.Create))
{
ServiceStack.Text.JsonSerializer.SerializeToStream<T>(obj, stream);
ServiceStack.Text.JsonSerializer.SerializeToStream(obj, stream);
}
}
@ -59,7 +59,7 @@ namespace MediaBrowser.Common.Serialization
return ServiceStack.Text.JsonSerializer.DeserializeFromStream(type, stream);
}
private static bool IsConfigured = false;
private static bool IsConfigured;
private static void Configure()
{
if (!IsConfigured)

@ -12,7 +12,7 @@ namespace MediaBrowser.Common.Serialization
{
public static void SerializeToStream<T>(T obj, Stream stream)
{
ServiceStack.Text.TypeSerializer.SerializeToStream<T>(obj, stream);
ServiceStack.Text.TypeSerializer.SerializeToStream(obj, stream);
}
public static T DeserializeFromStream<T>(Stream stream)
@ -29,7 +29,7 @@ namespace MediaBrowser.Common.Serialization
{
using (Stream stream = File.Open(file, FileMode.Create))
{
SerializeToStream<T>(obj, stream);
SerializeToStream(obj, stream);
}
}

@ -15,7 +15,7 @@ namespace MediaBrowser.Common.Serialization
/// This means that this class can currently only handle types within the Model project.
/// If we need to, we can always add a param indicating whether or not the model serializer should be used.
/// </summary>
private static ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
private static readonly ProtobufModelSerializer ProtobufModelSerializer = new ProtobufModelSerializer();
public static void SerializeToStream<T>(T obj, Stream stream)
{
@ -37,7 +37,7 @@ namespace MediaBrowser.Common.Serialization
{
using (Stream stream = File.Open(file, FileMode.Create))
{
SerializeToStream<T>(obj, stream);
SerializeToStream(obj, stream);
}
}

@ -27,7 +27,7 @@ namespace MediaBrowser.Common.Serialization
{
using (FileStream stream = new FileStream(file, FileMode.Create))
{
SerializeToStream<T>(obj, stream);
SerializeToStream(obj, stream);
}
}

@ -19,7 +19,7 @@ namespace MediaBrowser.Common.UI
protected override void OnStartup(StartupEventArgs e)
{
// Without this the app will shutdown after the splash screen closes
this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
ShutdownMode = ShutdownMode.OnExplicitShutdown;
LoadKernel();
}
@ -42,7 +42,7 @@ namespace MediaBrowser.Common.UI
Logger.LogInfo("Kernel.Init completed in {0} seconds.", (DateTime.UtcNow - now).TotalSeconds);
splash.Close();
this.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose;
ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose;
InstantiateMainWindow().ShowDialog();
}
catch (Exception ex)

@ -13,18 +13,17 @@ namespace Microsoft.Shell
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;
using System.Runtime.Serialization.Formatters;
using System.Security;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
using System.Xml.Serialization;
using System.Security;
using System.Runtime.InteropServices;
using System.ComponentModel;
internal enum WM
{
@ -184,7 +183,7 @@ namespace Microsoft.Shell
finally
{
IntPtr p = _LocalFree(argv);
_LocalFree(argv);
// Otherwise LocalFree failed.
// Assert.AreEqual(IntPtr.Zero, p);
}

@ -27,8 +27,8 @@ namespace MediaBrowser.Common.UI
Logger.LogInfo(e.Description);
}
this.lblProgress.Content = e.Description;
this.pbProgress.Value = (double)e.PercentComplete;
lblProgress.Content = e.Description;
pbProgress.Value = (double)e.PercentComplete;
}
private void Splash_Loaded(object sender, RoutedEventArgs e)

@ -61,7 +61,7 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public ItemSpecialCounts GetSpecialCounts(User user)
{
ItemSpecialCounts counts = new ItemSpecialCounts();
var counts = new ItemSpecialCounts();
IEnumerable<BaseItem> recursiveChildren = GetParentalAllowedRecursiveChildren(user);

@ -5,7 +5,7 @@ namespace MediaBrowser.Controller.Entities
{
public class UserItemData
{
private float? _Rating = null;
private float? _Rating;
/// <summary>
/// Gets or sets the users 0-10 rating
/// </summary>

@ -61,7 +61,7 @@ namespace MediaBrowser.Controller.FFMpeg
{
try
{
ProtobufSerializer.SerializeToFile<FFProbeResult>(result, outputCachePath);
ProtobufSerializer.SerializeToFile(result, outputCachePath);
}
catch (Exception ex)
{

@ -10,8 +10,8 @@ namespace MediaBrowser.Controller.IO
{
public class DirectoryWatchers
{
private List<FileSystemWatcher> FileSystemWatchers = new List<FileSystemWatcher>();
private Timer updateTimer = null;
private readonly List<FileSystemWatcher> FileSystemWatchers = new List<FileSystemWatcher>();
private Timer updateTimer;
private List<string> affectedPaths = new List<string>();
private const int TimerDelayInSeconds = 5;
@ -107,10 +107,8 @@ namespace MediaBrowser.Controller.IO
{
return Kernel.Instance.ReloadRoot();
}
else
{
return Task.WhenAll(itemsToRefresh.Select(i => Kernel.Instance.ReloadItem(i)));
}
return Task.WhenAll(itemsToRefresh.Select(i => Kernel.Instance.ReloadItem(i)));
}
private BaseItem GetAffectedBaseItem(string path)

@ -149,7 +149,7 @@ namespace MediaBrowser.Controller.IO
private static extern bool FindClose(IntPtr hFindFile);
private const char SpaceChar = ' ';
private static char[] InvalidFileNameChars = Path.GetInvalidFileNameChars();
private static readonly char[] InvalidFileNameChars = Path.GetInvalidFileNameChars();
/// <summary>
/// Takes a filename and removes invalid characters

@ -93,13 +93,13 @@ namespace MediaBrowser.Controller
await base.Init(progress).ConfigureAwait(false);
progress.Report(new TaskProgress() { Description = "Loading Users", PercentComplete = 15 });
progress.Report(new TaskProgress { Description = "Loading Users", PercentComplete = 15 });
ReloadUsers();
progress.Report(new TaskProgress() { Description = "Loading Media Library", PercentComplete = 25 });
progress.Report(new TaskProgress { Description = "Loading Media Library", PercentComplete = 25 });
await ReloadRoot(allowInternetProviders: false).ConfigureAwait(false);
progress.Report(new TaskProgress() { Description = "Loading Complete", PercentComplete = 100 });
progress.Report(new TaskProgress { Description = "Loading Complete", PercentComplete = 100 });
}
protected override void OnComposablePartsLoaded()

@ -68,7 +68,7 @@ namespace MediaBrowser.Controller.Library
/// </summary>
public async Task<BaseItem> GetItem(string path, Folder parent = null, WIN32_FIND_DATA? fileInfo = null, bool allowInternetProviders = true)
{
ItemResolveEventArgs args = new ItemResolveEventArgs()
var args = new ItemResolveEventArgs
{
FileInfo = fileInfo ?? FileData.GetFileData(path),
Parent = parent,
@ -113,7 +113,7 @@ namespace MediaBrowser.Controller.Library
if (item.IsFolder)
{
// If it's a folder look for child entities
(item as Folder).Children = (await Task.WhenAll<BaseItem>(GetChildren(item as Folder, fileSystemChildren, allowInternetProviders)).ConfigureAwait(false))
(item as Folder).Children = (await Task.WhenAll(GetChildren(item as Folder, fileSystemChildren, allowInternetProviders)).ConfigureAwait(false))
.Where(i => i != null).OrderBy(f =>
{
return string.IsNullOrEmpty(f.SortName) ? f.Name : f.SortName;
@ -193,10 +193,8 @@ namespace MediaBrowser.Controller.Library
resolvedShortcuts.InsertRange(0, returnArray);
return resolvedShortcuts.ToArray();
}
else
{
return returnArray;
}
return returnArray;
}
/// <summary>
@ -231,7 +229,7 @@ namespace MediaBrowser.Controller.Library
return GetImagesByNameItem<Year>(Kernel.Instance.ApplicationPaths.YearPath, value.ToString());
}
private ConcurrentDictionary<string, object> ImagesByNameItemCache = new ConcurrentDictionary<string, object>(StringComparer.OrdinalIgnoreCase);
private readonly ConcurrentDictionary<string, object> ImagesByNameItemCache = new ConcurrentDictionary<string, object>(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Generically retrieves an IBN item

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

@ -26,9 +26,6 @@ namespace MediaBrowser.Controller.Providers
{
MediaStream stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase));
string bitrate = null;
string duration = null;
audio.Channels = stream.channels;
if (!string.IsNullOrEmpty(stream.sample_rate))
@ -36,8 +33,8 @@ namespace MediaBrowser.Controller.Providers
audio.SampleRate = int.Parse(stream.sample_rate);
}
bitrate = stream.bit_rate;
duration = stream.duration;
string bitrate = stream.bit_rate;
string duration = stream.duration;
if (string.IsNullOrEmpty(bitrate))
{
@ -78,7 +75,7 @@ namespace MediaBrowser.Controller.Providers
if (!string.IsNullOrEmpty(composer))
{
audio.AddPerson(new PersonInfo() { Name = composer, Type = "Composer" });
audio.AddPerson(new PersonInfo { Name = composer, Type = "Composer" });
}
audio.Album = GetDictionaryValue(tags, "album");

@ -62,7 +62,7 @@ namespace MediaBrowser.Controller.Providers
item.DisplayMediaType = VideoType.BluRay.ToString();
break;
case "dvd":
item.DisplayMediaType = VideoType.DVD.ToString();
item.DisplayMediaType = VideoType.Dvd.ToString();
break;
case "":
item.DisplayMediaType = null;
@ -163,7 +163,7 @@ namespace MediaBrowser.Controller.Providers
case "Director":
{
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Director" }))
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo { Name = v, Type = "Director" }))
{
item.AddPerson(p);
}
@ -171,7 +171,7 @@ namespace MediaBrowser.Controller.Providers
}
case "Writer":
{
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Writer" }))
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo { Name = v, Type = "Writer" }))
{
item.AddPerson(p);
}
@ -181,7 +181,7 @@ namespace MediaBrowser.Controller.Providers
case "Actors":
case "GuestStars":
{
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Actor" }))
foreach (PersonInfo p in GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo { Name = v, Type = "Actor" }))
{
item.AddPerson(p);
}

@ -34,10 +34,8 @@ namespace MediaBrowser.Controller.Providers
{
return Task.Run(() => { PopulateBaseItemImages(baseItem, args); });
}
else
{
return Task.Run(() => { PopulateImages(item, args); });
}
return Task.Run(() => { PopulateImages(item, args); });
}
return Task.FromResult<object>(null);

@ -46,7 +46,7 @@ namespace MediaBrowser.Controller.Resolvers.Movies
private void SetProviderIdFromPath(Movie item)
{
string srch = "[tmdbid=";
const string srch = "[tmdbid=";
int index = item.Path.IndexOf(srch, System.StringComparison.OrdinalIgnoreCase);
if (index != -1)

@ -48,8 +48,8 @@ namespace MediaBrowser.Controller.Resolvers.TV
private void SetProviderIdFromPath(Series item)
{
string srch = "[tvdbid=";
int index = item.Path.IndexOf(srch, System.StringComparison.OrdinalIgnoreCase);
const string srch = "[tvdbid=";
int index = item.Path.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
if (index != -1)
{

@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Resolvers.TV
/// <summary>
/// A season folder must contain one of these somewhere in the name
/// </summary>
private static string[] SeasonFolderNames = new string[] {
private static readonly string[] SeasonFolderNames = new string[] {
"season",
"sæson",
"temporada",
@ -118,14 +118,12 @@ namespace MediaBrowser.Controller.Resolvers.TV
{
return true;
}
else
{
nonSeriesFolders++;
if (nonSeriesFolders >= 3)
{
return false;
}
nonSeriesFolders++;
if (nonSeriesFolders >= 3)
{
return false;
}
}
else

@ -33,7 +33,7 @@ namespace MediaBrowser.Controller.Resolvers
{
VideoType type = Path.GetExtension(args.Path).EndsWith("iso", System.StringComparison.OrdinalIgnoreCase) ? VideoType.Iso : VideoType.VideoFile;
return new T()
return new T
{
VideoType = type,
Path = args.Path
@ -77,15 +77,15 @@ namespace MediaBrowser.Controller.Resolvers
{
if (folder.IndexOf("video_ts", System.StringComparison.OrdinalIgnoreCase) != -1)
{
return new T()
return new T
{
VideoType = VideoType.DVD,
VideoType = VideoType.Dvd,
Path = Path.GetDirectoryName(folder)
};
}
if (folder.IndexOf("bdmv", System.StringComparison.OrdinalIgnoreCase) != -1)
{
return new T()
return new T
{
VideoType = VideoType.BluRay,
Path = Path.GetDirectoryName(folder)

@ -153,7 +153,7 @@ namespace MediaBrowser.Controller
}
}
private string _CacheDirectory = null;
private string _CacheDirectory;
/// <summary>
/// Gets the folder path to the cache directory
/// </summary>
@ -175,7 +175,7 @@ namespace MediaBrowser.Controller
}
}
private string _FFProbeAudioCacheDirectory = null;
private string _FFProbeAudioCacheDirectory;
/// <summary>
/// Gets the folder path to the ffprobe audio cache directory
/// </summary>
@ -197,7 +197,7 @@ namespace MediaBrowser.Controller
}
}
private string _FFProbeVideoCacheDirectory = null;
private string _FFProbeVideoCacheDirectory;
/// <summary>
/// Gets the folder path to the ffprobe video cache directory
/// </summary>
@ -219,7 +219,7 @@ namespace MediaBrowser.Controller
}
}
private string _FFMpegDirectory = null;
private string _FFMpegDirectory;
/// <summary>
/// Gets the folder path to ffmpeg
/// </summary>
@ -241,7 +241,7 @@ namespace MediaBrowser.Controller
}
}
private string _FFMpegPath = null;
private string _FFMpegPath;
/// <summary>
/// Gets the path to ffmpeg.exe
/// </summary>
@ -258,7 +258,7 @@ namespace MediaBrowser.Controller
}
}
private string _FFProbePath = null;
private string _FFProbePath;
/// <summary>
/// Gets the path to ffprobe.exe
/// </summary>

@ -1,13 +1,13 @@
using System;
using MediaBrowser.Common.Logging;
using MediaBrowser.Common.Serialization;
using MediaBrowser.Model.Weather;
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Cache;
using System.Net.Http;
using System.Threading.Tasks;
using MediaBrowser.Common.Logging;
using MediaBrowser.Common.Serialization;
using MediaBrowser.Model.Weather;
namespace MediaBrowser.Controller.Weather
{
@ -36,8 +36,8 @@ namespace MediaBrowser.Controller.Weather
return null;
}
int numDays = 5;
string apiKey = "24902f60f1231941120109";
const int numDays = 5;
const string apiKey = "24902f60f1231941120109";
string url = "http://free.worldweatheronline.com/feed/weather.ashx?q=" + zipCode + "&format=json&num_of_days=" + numDays + "&key=" + apiKey;
@ -95,7 +95,7 @@ namespace MediaBrowser.Controller.Weather
public WeatherStatus ToWeatherStatus()
{
return new WeatherStatus()
return new WeatherStatus
{
TemperatureCelsius = int.Parse(temp_C),
TemperatureFahrenheit = int.Parse(temp_F),
@ -122,7 +122,7 @@ namespace MediaBrowser.Controller.Weather
public WeatherForecast ToWeatherForecast()
{
return new WeatherForecast()
return new WeatherForecast
{
Date = DateTime.Parse(date),
HighTemperatureCelsius = int.Parse(tempMaxC),

@ -5,7 +5,7 @@ namespace MediaBrowser.Controller.Xml
{
public static class XmlExtensions
{
private static CultureInfo _usCulture = new CultureInfo("en-US");
private static readonly CultureInfo _usCulture = new CultureInfo("en-US");
/// <summary>
/// Reads a float from the current element of an XmlReader

@ -10,7 +10,7 @@ namespace MediaBrowser.Model.DTO
/// This holds information about a BaseItem in a format that is convenient for the client.
/// </summary>
[ProtoContract]
public class DTOBaseItem : IHasProviderIds
public class DtoBaseItem : IHasProviderIds
{
[ProtoMember(1)]
public string Name { get; set; }
@ -91,7 +91,7 @@ namespace MediaBrowser.Model.DTO
public int BackdropCount { get; set; }
[ProtoMember(27)]
public DTOBaseItem[] Children { get; set; }
public DtoBaseItem[] Children { get; set; }
[ProtoMember(28)]
public bool IsFolder { get; set; }
@ -136,7 +136,7 @@ namespace MediaBrowser.Model.DTO
public int? ParentBackdropCount { get; set; }
[ProtoMember(38)]
public DTOBaseItem[] LocalTrailers { get; set; }
public DtoBaseItem[] LocalTrailers { get; set; }
[ProtoMember(39)]
public int LocalTrailerCount { get; set; }
@ -145,7 +145,7 @@ namespace MediaBrowser.Model.DTO
/// User data for this item based on the user it's being requested for
/// </summary>
[ProtoMember(40)]
public DTOUserItemData UserData { get; set; }
public DtoUserItemData UserData { get; set; }
[ProtoMember(41)]
public ItemSpecialCounts SpecialCounts { get; set; }

@ -1,11 +1,10 @@
using MediaBrowser.Model.Entities;
using ProtoBuf;
using ProtoBuf;
using System;
namespace MediaBrowser.Model.DTO
{
[ProtoContract]
public class DTOUser
public class DtoUser
{
[ProtoMember(1)]
public string Name { get; set; }

@ -3,7 +3,7 @@
namespace MediaBrowser.Model.DTO
{
[ProtoContract]
public class DTOUserItemData
public class DtoUserItemData
{
[ProtoMember(1)]
public float? Rating { get; set; }

@ -9,12 +9,12 @@ namespace MediaBrowser.Model.DTO
{
Avi,
Asf,
M4v,
M4V,
Mkv,
Mov,
Mp4,
Ogv,
ThreeGP,
ThreeGp,
Ts,
Webm,
Wmv

@ -10,7 +10,7 @@ namespace MediaBrowser.Model.Entities
Dictionary<string, string> ProviderIds { get; set; }
}
public static class IProviderIdsExtensions
public static class ProviderIdsExtensions
{
/// <summary>
/// Gets a provider id

@ -5,7 +5,7 @@ namespace MediaBrowser.Model.Entities
{
VideoFile,
Iso,
DVD,
Dvd,
BluRay
}
}

@ -36,12 +36,12 @@
<Compile Include="Configuration\ServerConfiguration.cs" />
<Compile Include="DTO\AudioInfo.cs" />
<Compile Include="DTO\AudioOutputFormats.cs" />
<Compile Include="DTO\DTOUserItemData.cs" />
<Compile Include="DTO\DtoUserItemData.cs" />
<Compile Include="DTO\MovieInfo.cs" />
<Compile Include="DTO\SeriesInfo.cs" />
<Compile Include="Authentication\AuthenticationResult.cs" />
<Compile Include="DTO\DTOBaseItem.cs" />
<Compile Include="DTO\DTOUser.cs" />
<Compile Include="DTO\DtoBaseItem.cs" />
<Compile Include="DTO\DtoUser.cs" />
<Compile Include="DTO\VideoInfo.cs" />
<Compile Include="DTO\VideoOutputFormats.cs" />
<Compile Include="DTO\IBNItem.cs" />

@ -1,6 +1,4 @@
using System;
using System.Runtime.Serialization;

namespace MediaBrowser.Model.Plugins
{
public class BasePluginConfiguration

@ -1,7 +1,5 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Resources;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information

@ -1,6 +1,4 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

Loading…
Cancel
Save