Ver código fonte

update to jquery mobile 1.4.3

Luke Pulverenti 11 anos atrás
pai
commit
59dc591f66
63 arquivos alterados com 623 adições e 436 exclusões
  1. 52 8
      MediaBrowser.Api/ApiEntryPoint.cs
  2. 2 0
      MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs
  3. 2 0
      MediaBrowser.Api/Dlna/DlnaService.cs
  4. 2 0
      MediaBrowser.Api/ItemLookupService.cs
  5. 2 0
      MediaBrowser.Api/ItemRefreshService.cs
  6. 4 2
      MediaBrowser.Api/ItemUpdateService.cs
  7. 2 0
      MediaBrowser.Api/Library/ChapterService.cs
  8. 2 0
      MediaBrowser.Api/Library/FileOrganizationService.cs
  9. 2 26
      MediaBrowser.Api/Library/LibraryStructureService.cs
  10. 2 0
      MediaBrowser.Api/Library/SubtitleService.cs
  11. 2 0
      MediaBrowser.Api/LiveTv/LiveTvService.cs
  12. 2 0
      MediaBrowser.Api/LocalizationService.cs
  13. 2 0
      MediaBrowser.Api/Movies/CollectionService.cs
  14. 2 0
      MediaBrowser.Api/Movies/MoviesService.cs
  15. 2 0
      MediaBrowser.Api/Movies/TrailersService.cs
  16. 2 1
      MediaBrowser.Api/Music/AlbumsService.cs
  17. 2 0
      MediaBrowser.Api/Music/InstantMixService.cs
  18. 2 0
      MediaBrowser.Api/PackageReviewService.cs
  19. 2 0
      MediaBrowser.Api/PackageService.cs
  20. 0 7
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  21. 9 3
      MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
  22. 5 5
      MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
  23. 3 1
      MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs
  24. 2 0
      MediaBrowser.Api/PluginService.cs
  25. 2 0
      MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs
  26. 2 0
      MediaBrowser.Api/SearchService.cs
  27. 2 0
      MediaBrowser.Api/TvShowsService.cs
  28. 2 0
      MediaBrowser.Api/UserLibrary/ArtistsService.cs
  29. 2 0
      MediaBrowser.Api/UserLibrary/GameGenresService.cs
  30. 2 0
      MediaBrowser.Api/UserLibrary/GenresService.cs
  31. 2 0
      MediaBrowser.Api/UserLibrary/ItemsService.cs
  32. 2 0
      MediaBrowser.Api/UserLibrary/MusicGenresService.cs
  33. 2 0
      MediaBrowser.Api/UserLibrary/PersonsService.cs
  34. 2 0
      MediaBrowser.Api/UserLibrary/StudiosService.cs
  35. 2 0
      MediaBrowser.Api/UserLibrary/UserLibraryService.cs
  36. 2 0
      MediaBrowser.Api/UserLibrary/YearsService.cs
  37. 12 51
      MediaBrowser.Api/UserService.cs
  38. 2 0
      MediaBrowser.Api/VideosService.cs
  39. 2 2
      MediaBrowser.Controller/Library/IUserManager.cs
  40. 5 0
      MediaBrowser.Controller/Net/AuthorizationInfo.cs
  41. 10 3
      MediaBrowser.Controller/Session/ISessionManager.cs
  42. 12 12
      MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
  43. 12 12
      MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
  44. 2 6
      MediaBrowser.Model/Configuration/ServerConfiguration.cs
  45. 4 4
      MediaBrowser.Model/MediaBrowser.Model.csproj
  46. 3 1
      MediaBrowser.Model/Notifications/NotificationOption.cs
  47. 3 2
      MediaBrowser.Model/Notifications/NotificationOptions.cs
  48. 1 1
      MediaBrowser.Model/Notifications/NotificationType.cs
  49. 1 1
      MediaBrowser.Model/Notifications/SendToUserType.cs
  50. 30 2
      MediaBrowser.Model/Updates/PackageVersionInfo.cs
  51. 6 0
      MediaBrowser.Model/Users/AuthenticationResult.cs
  52. 10 15
      MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs
  53. 2 1
      MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs
  54. 7 4
      MediaBrowser.Server.Implementations/Library/UserManager.cs
  55. 73 52
      MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
  56. 17 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
  57. 1 0
      MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
  58. 21 0
      MediaBrowser.Server.Implementations/Notifications/NotificationConfigurationFactory.cs
  59. 12 4
      MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs
  60. 27 4
      MediaBrowser.Server.Implementations/Session/SessionManager.cs
  61. 7 0
      MediaBrowser.ServerApplication/ApplicationHost.cs
  62. 2 2
      MediaBrowser.WebDashboard/Api/DashboardService.cs
  63. 206 203
      MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

+ 52 - 8
MediaBrowser.Api/ApiEntryPoint.cs

@@ -37,6 +37,8 @@ namespace MediaBrowser.Api
 
         private readonly ISessionManager _sessionManager;
 
+        public readonly SemaphoreSlim TranscodingStartLock = new SemaphoreSlim(1,1);
+
         /// <summary>
         /// Initializes a new instance of the <see cref="ApiEntryPoint" /> class.
         /// </summary>
@@ -301,8 +303,9 @@ namespace MediaBrowser.Api
         /// </summary>
         /// <param name="deviceId">The device id.</param>
         /// <param name="deleteMode">The delete mode.</param>
+        /// <param name="acquireLock">if set to <c>true</c> [acquire lock].</param>
         /// <exception cref="System.ArgumentNullException">sourcePath</exception>
-        internal void KillTranscodingJobs(string deviceId, FileDeleteMode deleteMode)
+        internal async Task KillTranscodingJobs(string deviceId, FileDeleteMode deleteMode, bool acquireLock)
         {
             if (string.IsNullOrEmpty(deviceId))
             {
@@ -318,9 +321,29 @@ namespace MediaBrowser.Api
                 jobs.AddRange(_activeTranscodingJobs.Where(i => string.Equals(deviceId, i.DeviceId, StringComparison.OrdinalIgnoreCase)));
             }
 
-            foreach (var job in jobs)
+            if (jobs.Count == 0)
+            {
+                return;
+            }
+
+            if (acquireLock)
             {
-                KillTranscodingJob(job, deleteMode);
+                await TranscodingStartLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
+            }
+            
+            try
+            {
+                foreach (var job in jobs)
+                {
+                    KillTranscodingJob(job, deleteMode);
+                }
+            }
+            finally
+            {
+                if (acquireLock)
+                {
+                    TranscodingStartLock.Release();
+                }
             }
         }
 
@@ -328,10 +351,11 @@ namespace MediaBrowser.Api
         /// Kills the transcoding jobs.
         /// </summary>
         /// <param name="deviceId">The device identifier.</param>
-        /// <param name="outputPath">The output path.</param>
+        /// <param name="type">The type.</param>
         /// <param name="deleteMode">The delete mode.</param>
+        /// <param name="acquireLock">if set to <c>true</c> [acquire lock].</param>
         /// <exception cref="System.ArgumentNullException">deviceId</exception>
-        internal void KillTranscodingJobs(string deviceId, string outputPath, FileDeleteMode deleteMode)
+        internal async Task KillTranscodingJobs(string deviceId, TranscodingJobType type, FileDeleteMode deleteMode, bool acquireLock)
         {
             if (string.IsNullOrEmpty(deviceId))
             {
@@ -344,12 +368,32 @@ namespace MediaBrowser.Api
             {
                 // This is really only needed for HLS. 
                 // Progressive streams can stop on their own reliably
-                jobs.AddRange(_activeTranscodingJobs.Where(i => string.Equals(deviceId, i.DeviceId, StringComparison.OrdinalIgnoreCase) && string.Equals(outputPath, i.Path, StringComparison.OrdinalIgnoreCase)));
+                jobs.AddRange(_activeTranscodingJobs.Where(i => string.Equals(deviceId, i.DeviceId, StringComparison.OrdinalIgnoreCase) && i.Type == type));
             }
 
-            foreach (var job in jobs)
+            if (jobs.Count == 0)
             {
-                KillTranscodingJob(job, deleteMode);
+                return;
+            }
+
+            if (acquireLock)
+            {
+                await TranscodingStartLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
+            }
+
+            try
+            {
+                foreach (var job in jobs)
+                {
+                    KillTranscodingJob(job, deleteMode);
+                }
+            }
+            finally
+            {
+                if (acquireLock)
+                {
+                    TranscodingStartLock.Release();
+                }
             }
         }
 

+ 2 - 0
MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs

@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
@@ -86,6 +87,7 @@ namespace MediaBrowser.Api.DefaultTheme
         public Guid UserId { get; set; }
     }
 
+    [Authenticated]
     public class DefaultThemeService : BaseApiService
     {
         private readonly IUserManager _userManager;

+ 2 - 0
MediaBrowser.Api/Dlna/DlnaService.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Controller.Dlna;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Dlna;
 using ServiceStack;
 using System.Collections.Generic;
@@ -42,6 +43,7 @@ namespace MediaBrowser.Api.Dlna
     {
     }
 
+    [Authenticated]
     public class DlnaService : BaseApiService
     {
         private readonly IDlnaManager _dlnaManager;

+ 2 - 0
MediaBrowser.Api/ItemLookupService.cs

@@ -6,6 +6,7 @@ using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Providers;
@@ -104,6 +105,7 @@ namespace MediaBrowser.Api
         public string Id { get; set; }
     }
 
+    [Authenticated]
     public class ItemLookupService : BaseApiService
     {
         private readonly IProviderManager _providerManager;

+ 2 - 0
MediaBrowser.Api/ItemRefreshService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Providers;
 using ServiceStack;
 using System;
@@ -30,6 +31,7 @@ namespace MediaBrowser.Api
         public string Id { get; set; }
     }
 
+    [Authenticated]
     public class ItemRefreshService : BaseApiService
     {
         private readonly ILibraryManager _libraryManager;

+ 4 - 2
MediaBrowser.Api/ItemUpdateService.cs

@@ -1,11 +1,12 @@
-using System.Collections.Generic;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Dto;
 using ServiceStack;
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
@@ -19,6 +20,7 @@ namespace MediaBrowser.Api
         public string ItemId { get; set; }
     }
 
+    [Authenticated]
     public class ItemUpdateService : BaseApiService
     {
         private readonly ILibraryManager _libraryManager;

+ 2 - 0
MediaBrowser.Api/Library/ChapterService.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Controller.Chapters;
+using MediaBrowser.Controller.Net;
 using ServiceStack;
 using System.Linq;
 
@@ -9,6 +10,7 @@ namespace MediaBrowser.Api.Library
     {
     }
 
+    [Authenticated]
     public class ChapterService : BaseApiService
     {
         private readonly IChapterManager _chapterManager;

+ 2 - 0
MediaBrowser.Api/Library/FileOrganizationService.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Controller.FileOrganization;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.FileOrganization;
 using MediaBrowser.Model.Querying;
 using ServiceStack;
@@ -78,6 +79,7 @@ namespace MediaBrowser.Api.Library
         public bool RememberCorrection { get; set; }
     }
 
+    [Authenticated]
     public class FileOrganizationService : BaseApiService
     {
         private readonly IFileOrganizationService _iFileOrganizationService;

+ 2 - 26
MediaBrowser.Api/Library/LibraryStructureService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Common.IO;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using ServiceStack;
@@ -130,36 +131,11 @@ namespace MediaBrowser.Api.Library
         /// <value><c>true</c> if [refresh library]; otherwise, <c>false</c>.</value>
         public bool RefreshLibrary { get; set; }
     }
-
-    [Route("/Library/Downloaded", "POST")]
-    public class ReportContentDownloaded : IReturnVoid
-    {
-        [ApiMember(Name = "Path", Description = "The path being downloaded to.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string Path { get; set; }
-
-        [ApiMember(Name = "ImageUrl", Description = "Optional thumbnail image url of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string ImageUrl { get; set; }
-
-        [ApiMember(Name = "Name", Description = "The name of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string Name { get; set; }
-    }
-
-    [Route("/Library/Downloading", "POST")]
-    public class ReportContentDownloading : IReturnVoid
-    {
-        [ApiMember(Name = "Path", Description = "The path being downloaded to.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string Path { get; set; }
-
-        [ApiMember(Name = "ImageUrl", Description = "Optional thumbnail image url of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string ImageUrl { get; set; }
-
-        [ApiMember(Name = "Name", Description = "The name of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
-        public string Name { get; set; }
-    }
     
     /// <summary>
     /// Class LibraryStructureService
     /// </summary>
+    [Authenticated]
     public class LibraryStructureService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/Library/SubtitleService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.MediaEncoding;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Controller.Subtitles;
 using MediaBrowser.Model.Entities;
@@ -86,6 +87,7 @@ namespace MediaBrowser.Api.Library
         public string Id { get; set; }
     }
 
+    [Authenticated]
     public class SubtitleService : BaseApiService
     {
         private readonly ILibraryManager _libraryManager;

+ 2 - 0
MediaBrowser.Api/LiveTv/LiveTvService.cs

@@ -1,5 +1,6 @@
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.LiveTv;
@@ -267,6 +268,7 @@ namespace MediaBrowser.Api.LiveTv
         public string UserId { get; set; }
     }
 
+    [Authenticated]
     public class LiveTvService : BaseApiService
     {
         private readonly ILiveTvManager _liveTvManager;

+ 2 - 0
MediaBrowser.Api/LocalizationService.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Controller.Localization;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Globalization;
 using ServiceStack;
@@ -42,6 +43,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class CulturesService
     /// </summary>
+    [Authenticated]
     public class LocalizationService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/Movies/CollectionService.cs

@@ -1,5 +1,6 @@
 using MediaBrowser.Controller.Collections;
 using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Querying;
 using ServiceStack;
 using System;
@@ -45,6 +46,7 @@ namespace MediaBrowser.Api.Movies
         public Guid Id { get; set; }
     }
 
+    [Authenticated]
     public class CollectionService : BaseApiService
     {
         private readonly ICollectionManager _collectionManager;

+ 2 - 0
MediaBrowser.Api/Movies/MoviesService.cs

@@ -3,6 +3,7 @@ using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
@@ -64,6 +65,7 @@ namespace MediaBrowser.Api.Movies
     /// <summary>
     /// Class MoviesService
     /// </summary>
+    [Authenticated]
     public class MoviesService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/Movies/TrailersService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using ServiceStack;
 
@@ -18,6 +19,7 @@ namespace MediaBrowser.Api.Movies
     /// <summary>
     /// Class TrailersService
     /// </summary>
+    [Authenticated]
     public class TrailersService : BaseApiService
     {
         /// <summary>

+ 2 - 1
MediaBrowser.Api/Music/AlbumsService.cs

@@ -2,10 +2,10 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using ServiceStack;
 using System;
-using System.Collections.Generic;
 using System.Linq;
 
 namespace MediaBrowser.Api.Music
@@ -15,6 +15,7 @@ namespace MediaBrowser.Api.Music
     {
     }
 
+    [Authenticated]
     public class AlbumsService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/Music/InstantMixService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Querying;
 using ServiceStack;
 using System.Collections.Generic;
@@ -33,6 +34,7 @@ namespace MediaBrowser.Api.Music
         public string Name { get; set; }
     }
 
+    [Authenticated]
     public class InstantMixService : BaseApiService
     {
         private readonly IUserManager _userManager;

+ 2 - 0
MediaBrowser.Api/PackageReviewService.cs

@@ -1,5 +1,6 @@
 using MediaBrowser.Common.Constants;
 using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Serialization;
 using ServiceStack;
@@ -96,6 +97,7 @@ namespace MediaBrowser.Api
 
     }
 
+    [Authenticated]
     public class PackageReviewService : BaseApiService
     {
         private readonly IHttpClient _httpClient;

+ 2 - 0
MediaBrowser.Api/PackageService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Common;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Updates;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Updates;
 using ServiceStack;
 using System;
@@ -121,6 +122,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class PackageService
     /// </summary>
+    [Authenticated]
     public class PackageService : BaseApiService
     {
         private readonly IInstallationManager _installationManager;

+ 0 - 7
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -13,7 +13,6 @@ using MediaBrowser.Model.Drawing;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
-using MediaBrowser.Model.Library;
 using MediaBrowser.Model.LiveTv;
 using MediaBrowser.Model.MediaInfo;
 using System;
@@ -1955,12 +1954,6 @@ namespace MediaBrowser.Api.Playback
         /// <param name="videoRequest">The video request.</param>
         private void EnforceResolutionLimit(StreamState state, VideoStreamRequest videoRequest)
         {
-            // If enabled, allow whatever the client asks for
-            if (ServerConfigurationManager.Configuration.AllowVideoUpscaling)
-            {
-                return;
-            }
-
             // Switch the incoming params to be ceilings rather than fixed values
             videoRequest.MaxWidth = videoRequest.MaxWidth ?? videoRequest.Width;
             videoRequest.MaxHeight = videoRequest.MaxHeight ?? videoRequest.Height;

+ 9 - 3
MediaBrowser.Api/Playback/Hls/BaseHlsService.cs

@@ -66,7 +66,6 @@ namespace MediaBrowser.Api.Playback.Hls
             return ProcessRequestAsync(request, isLive).Result;
         }
 
-        private static readonly SemaphoreSlim FfmpegStartLock = new SemaphoreSlim(1, 1);
         /// <summary>
         /// Processes the request async.
         /// </summary>
@@ -82,6 +81,11 @@ namespace MediaBrowser.Api.Playback.Hls
 
             var state = await GetState(request, cancellationTokenSource.Token).ConfigureAwait(false);
 
+            if (isLive)
+            {
+                state.Request.StartTimeTicks = null;
+            }
+
             var playlist = state.OutputFilePath;
 
             if (File.Exists(playlist))
@@ -90,7 +94,7 @@ namespace MediaBrowser.Api.Playback.Hls
             }
             else
             {
-                await FfmpegStartLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
+                await ApiEntryPoint.Instance.TranscodingStartLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
                 try
                 {
                     if (File.Exists(playlist))
@@ -99,6 +103,8 @@ namespace MediaBrowser.Api.Playback.Hls
                     }
                     else
                     {
+                        await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, FileDeleteMode.All, false).ConfigureAwait(false);
+                        
                         // If the playlist doesn't already exist, startup ffmpeg
                         try
                         {
@@ -116,7 +122,7 @@ namespace MediaBrowser.Api.Playback.Hls
                 }
                 finally
                 {
-                    FfmpegStartLock.Release();
+                    ApiEntryPoint.Instance.TranscodingStartLock.Release();
                 }
             }
 

+ 5 - 5
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs

@@ -65,7 +65,6 @@ namespace MediaBrowser.Api.Playback.Hls
             return GetDynamicSegment(request).Result;
         }
 
-        private static readonly SemaphoreSlim FfmpegStartLock = new SemaphoreSlim(1, 1);
         private async Task<object> GetDynamicSegment(GetDynamicHlsVideoSegment request)
         {
             if ((request.StartTimeTicks ?? 0) > 0)
@@ -90,7 +89,7 @@ namespace MediaBrowser.Api.Playback.Hls
                 return await GetSegmentResult(playlistPath, segmentPath, index, cancellationToken).ConfigureAwait(false);
             }
 
-            await FfmpegStartLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
+            await ApiEntryPoint.Instance.TranscodingStartLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
             try
             {
                 if (File.Exists(segmentPath))
@@ -107,10 +106,11 @@ namespace MediaBrowser.Api.Playback.Hls
                         // If the playlist doesn't already exist, startup ffmpeg
                         try
                         {
+                            // TODO: Delete files from other jobs, but not this one
+                            await ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, TranscodingJobType.Hls, FileDeleteMode.None, false).ConfigureAwait(false);
+
                             if (currentTranscodingIndex.HasValue)
                             {
-                                ApiEntryPoint.Instance.KillTranscodingJobs(state.Request.DeviceId, playlistPath, FileDeleteMode.None);
-
                                 DeleteLastFile(playlistPath, 0);
                             }
 
@@ -131,7 +131,7 @@ namespace MediaBrowser.Api.Playback.Hls
             }
             finally
             {
-                FfmpegStartLock.Release();
+                ApiEntryPoint.Instance.TranscodingStartLock.Release();
             }
 
             Logger.Info("waiting for {0}", segmentPath);

+ 3 - 1
MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs

@@ -74,7 +74,9 @@ namespace MediaBrowser.Api.Playback.Hls
 
         public void Delete(StopEncodingProcess request)
         {
-            ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, FileDeleteMode.All);
+            var task = ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, FileDeleteMode.All, true);
+
+            Task.WaitAll(task);
         }
 
         /// <summary>

+ 2 - 0
MediaBrowser.Api/PluginService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Security;
 using MediaBrowser.Common.Updates;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Plugins;
 using MediaBrowser.Model.Serialization;
@@ -100,6 +101,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class PluginsService
     /// </summary>
+    [Authenticated]
     public class PluginService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs

@@ -1,5 +1,6 @@
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.ScheduledTasks;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Tasks;
 using ServiceStack;
 using ServiceStack.Text.Controller;
@@ -78,6 +79,7 @@ namespace MediaBrowser.Api.ScheduledTasks
     /// <summary>
     /// Class ScheduledTasksService
     /// </summary>
+    [Authenticated]
     public class ScheduledTaskService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/SearchService.cs

@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Search;
 using ServiceStack;
@@ -79,6 +80,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class SearchService
     /// </summary>
+    [Authenticated]
     public class SearchService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/TvShowsService.cs

@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Querying;
@@ -175,6 +176,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class TvShowsService
     /// </summary>
+    [Authenticated]
     public class TvShowsService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/UserLibrary/ArtistsService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -46,6 +47,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class ArtistsService
     /// </summary>
+    [Authenticated]
     public class ArtistsService : BaseItemsByNameService<MusicArtist>
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/UserLibrary/GameGenresService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
@@ -41,6 +42,7 @@ namespace MediaBrowser.Api.UserLibrary
         public Guid? UserId { get; set; }
     }
 
+    [Authenticated]
     public class GameGenresService : BaseItemsByNameService<GameGenre>
     {
         public GameGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IDtoService dtoService)

+ 2 - 0
MediaBrowser.Api/UserLibrary/GenresService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -46,6 +47,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class GenresService
     /// </summary>
+    [Authenticated]
     public class GenresService : BaseItemsByNameService<Genre>
     {
         public GenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IDtoService dtoService)

+ 2 - 0
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -6,6 +6,7 @@ using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Localization;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Querying;
@@ -246,6 +247,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class ItemsService
     /// </summary>
+    [Authenticated]
     public class ItemsService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/UserLibrary/MusicGenresService.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -41,6 +42,7 @@ namespace MediaBrowser.Api.UserLibrary
         public Guid? UserId { get; set; }
     }
 
+    [Authenticated]
     public class MusicGenresService : BaseItemsByNameService<MusicGenre>
     {
         public MusicGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IDtoService dtoService)

+ 2 - 0
MediaBrowser.Api/UserLibrary/PersonsService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -51,6 +52,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class PersonsService
     /// </summary>
+    [Authenticated]
     public class PersonsService : BaseItemsByNameService<Person>
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/UserLibrary/StudiosService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -43,6 +44,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class StudiosService
     /// </summary>
+    [Authenticated]
     public class StudiosService : BaseItemsByNameService<Studio>
     {
         public StudiosService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IDtoService dtoService)

+ 2 - 0
MediaBrowser.Api/UserLibrary/UserLibraryService.cs

@@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
@@ -424,6 +425,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class UserLibraryService
     /// </summary>
+    [Authenticated]
     public class UserLibraryService : BaseApiService
     {
         /// <summary>

+ 2 - 0
MediaBrowser.Api/UserLibrary/YearsService.cs

@@ -1,6 +1,7 @@
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Querying;
@@ -43,6 +44,7 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class YearsService
     /// </summary>
+    [Authenticated]
     public class YearsService : BaseItemsByNameService<Year>
     {
         public YearsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IDtoService dtoService)

+ 12 - 51
MediaBrowser.Api/UserService.cs

@@ -268,28 +268,6 @@ namespace MediaBrowser.Api
         /// </summary>
         /// <param name="request">The request.</param>
         public object Post(AuthenticateUser request)
-        {
-            // No response needed. Will throw an exception on failure.
-            var result = AuthenticateUser(request).Result;
-
-            return result;
-        }
-
-        public object Post(AuthenticateUserByName request)
-        {
-            var user = _userManager.Users.FirstOrDefault(i => string.Equals(request.Username, i.Name, StringComparison.OrdinalIgnoreCase));
-
-            if (user == null)
-            {
-                throw new ArgumentException(string.Format("User {0} not found.", request.Username));
-            }
-
-            var result = AuthenticateUser(new AuthenticateUser { Id = user.Id, Password = request.Password }).Result;
-
-            return ToOptimizedResult(result);
-        }
-
-        private async Task<AuthenticationResult> AuthenticateUser(AuthenticateUser request)
         {
             var user = _userManager.GetUserById(request.Id);
 
@@ -298,38 +276,21 @@ namespace MediaBrowser.Api
                 throw new ResourceNotFoundException("User not found");
             }
 
-            var auth = AuthorizationContext.GetAuthorizationInfo(Request);
-
-            // Login in the old way if the header is missing
-            if (string.IsNullOrEmpty(auth.Client) ||
-                string.IsNullOrEmpty(auth.Device) ||
-                string.IsNullOrEmpty(auth.DeviceId) ||
-                string.IsNullOrEmpty(auth.Version))
+            return Post(new AuthenticateUserByName
             {
-                var success = await _userManager.AuthenticateUser(user, request.Password).ConfigureAwait(false);
-
-                if (!success)
-                {
-                    // Unauthorized
-                    throw new UnauthorizedAccessException("Invalid user or password entered.");
-                }
-
-                return new AuthenticationResult
-                {
-                    User = _dtoService.GetUserDto(user)
-                };
-            }
+                Username = user.Name,
+                Password = request.Password
+            });
+        }
 
-            var session = await _sessionMananger.AuthenticateNewSession(user, request.Password, auth.Client, auth.Version,
-                        auth.DeviceId, auth.Device, Request.RemoteIp).ConfigureAwait(false);
+        public object Post(AuthenticateUserByName request)
+        {
+            var auth = AuthorizationContext.GetAuthorizationInfo(Request);
 
-            var result = new AuthenticationResult
-            {
-                User = _dtoService.GetUserDto(user),
-                SessionInfo = _sessionMananger.GetSessionInfoDto(session)
-            };
+            var result = _sessionMananger.AuthenticateNewSession(request.Username, request.Password, auth.Client, auth.Version,
+                        auth.DeviceId, auth.Device, Request.RemoteIp).Result;
 
-            return result;
+            return ToOptimizedResult(result);
         }
 
         /// <summary>
@@ -353,7 +314,7 @@ namespace MediaBrowser.Api
             }
             else
             {
-                var success = _userManager.AuthenticateUser(user, request.CurrentPassword).Result;
+                var success = _userManager.AuthenticateUser(user.Name, request.CurrentPassword).Result;
 
                 if (!success)
                 {

+ 2 - 0
MediaBrowser.Api/VideosService.cs

@@ -3,6 +3,7 @@ using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Querying;
 using ServiceStack;
@@ -41,6 +42,7 @@ namespace MediaBrowser.Api
         public string Ids { get; set; }
     }
 
+    [Authenticated]
     public class VideosService : BaseApiService
     {
         private readonly ILibraryManager _libraryManager;

+ 2 - 2
MediaBrowser.Controller/Library/IUserManager.cs

@@ -50,11 +50,11 @@ namespace MediaBrowser.Controller.Library
         /// <summary>
         /// Authenticates a User and returns a result indicating whether or not it succeeded
         /// </summary>
-        /// <param name="user">The user.</param>
+        /// <param name="username">The username.</param>
         /// <param name="password">The password.</param>
         /// <returns>Task{System.Boolean}.</returns>
         /// <exception cref="System.ArgumentNullException">user</exception>
-        Task<bool> AuthenticateUser(User user, string password);
+        Task<bool> AuthenticateUser(string username, string password);
 
         /// <summary>
         /// Refreshes metadata for each user

+ 5 - 0
MediaBrowser.Controller/Net/AuthorizationInfo.cs

@@ -28,5 +28,10 @@ namespace MediaBrowser.Controller.Net
         /// </summary>
         /// <value>The version.</value>
         public string Version { get; set; }
+        /// <summary>
+        /// Gets or sets the token.
+        /// </summary>
+        /// <value>The token.</value>
+        public string Token { get; set; }
     }
 }

+ 10 - 3
MediaBrowser.Controller/Session/ISessionManager.cs

@@ -2,6 +2,7 @@
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Session;
+using MediaBrowser.Model.Users;
 using System;
 using System.Collections.Generic;
 using System.Threading;
@@ -206,11 +207,11 @@ namespace MediaBrowser.Controller.Session
         /// <param name="sessionId">The session identifier.</param>
         /// <param name="item">The item.</param>
         void ReportNowViewingItem(string sessionId, BaseItemInfo item);
-        
+
         /// <summary>
         /// Authenticates the new session.
         /// </summary>
-        /// <param name="user">The user.</param>
+        /// <param name="username">The username.</param>
         /// <param name="password">The password.</param>
         /// <param name="clientType">Type of the client.</param>
         /// <param name="appVersion">The application version.</param>
@@ -218,7 +219,7 @@ namespace MediaBrowser.Controller.Session
         /// <param name="deviceName">Name of the device.</param>
         /// <param name="remoteEndPoint">The remote end point.</param>
         /// <returns>Task{SessionInfo}.</returns>
-        Task<SessionInfo> AuthenticateNewSession(User user, string password, string clientType, string appVersion, string deviceId, string deviceName, string remoteEndPoint);
+        Task<AuthenticationResult> AuthenticateNewSession(string username, string password, string clientType, string appVersion, string deviceId, string deviceName, string remoteEndPoint);
 
         /// <summary>
         /// Reports the capabilities.
@@ -248,5 +249,11 @@ namespace MediaBrowser.Controller.Session
         /// <param name="version">The version.</param>
         /// <returns>SessionInfo.</returns>
         SessionInfo GetSession(string deviceId, string client, string version);
+
+        /// <summary>
+        /// Validates the security token.
+        /// </summary>
+        /// <param name="token">The token.</param>
+        void ValidateSecurityToken(string token);
     }
 }

+ 12 - 12
MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj

@@ -137,21 +137,9 @@
     <Compile Include="..\MediaBrowser.Model\Configuration\MetadataPluginType.cs">
       <Link>Configuration\MetadataPluginType.cs</Link>
     </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationOption.cs">
-      <Link>Configuration\NotificationOption.cs</Link>
-    </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationOptions.cs">
-      <Link>Configuration\NotificationOptions.cs</Link>
-    </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationType.cs">
-      <Link>Configuration\NotificationType.cs</Link>
-    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\PathSubstitution.cs">
       <Link>Configuration\PathSubstitution.cs</Link>
     </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\SendToUserType.cs">
-      <Link>Configuration\SendToUserType.cs</Link>
-    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\ServerConfiguration.cs">
       <Link>Configuration\ServerConfiguration.cs</Link>
     </Compile>
@@ -638,6 +626,12 @@
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationLevel.cs">
       <Link>Notifications\NotificationLevel.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationOption.cs">
+      <Link>Notifications\NotificationOption.cs</Link>
+    </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationOptions.cs">
+      <Link>Notifications\NotificationOptions.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationQuery.cs">
       <Link>Notifications\NotificationQuery.cs</Link>
     </Compile>
@@ -653,9 +647,15 @@
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationsSummary.cs">
       <Link>Notifications\NotificationsSummary.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationType.cs">
+      <Link>Notifications\NotificationType.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationTypeInfo.cs">
       <Link>Notifications\NotificationTypeInfo.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\SendToUserType.cs">
+      <Link>Notifications\SendToUserType.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Plugins\BasePluginConfiguration.cs">
       <Link>Plugins\BasePluginConfiguration.cs</Link>
     </Compile>

+ 12 - 12
MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj

@@ -124,21 +124,9 @@
     <Compile Include="..\MediaBrowser.Model\Configuration\MetadataPluginType.cs">
       <Link>Configuration\MetadataPluginType.cs</Link>
     </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationOption.cs">
-      <Link>Configuration\NotificationOption.cs</Link>
-    </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationOptions.cs">
-      <Link>Configuration\NotificationOptions.cs</Link>
-    </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\NotificationType.cs">
-      <Link>Configuration\NotificationType.cs</Link>
-    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\PathSubstitution.cs">
       <Link>Configuration\PathSubstitution.cs</Link>
     </Compile>
-    <Compile Include="..\MediaBrowser.Model\Configuration\SendToUserType.cs">
-      <Link>Configuration\SendToUserType.cs</Link>
-    </Compile>
     <Compile Include="..\MediaBrowser.Model\Configuration\ServerConfiguration.cs">
       <Link>Configuration\ServerConfiguration.cs</Link>
     </Compile>
@@ -619,6 +607,12 @@
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationLevel.cs">
       <Link>Notifications\NotificationLevel.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationOption.cs">
+      <Link>Notifications\NotificationOption.cs</Link>
+    </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationOptions.cs">
+      <Link>Notifications\NotificationOptions.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationQuery.cs">
       <Link>Notifications\NotificationQuery.cs</Link>
     </Compile>
@@ -634,9 +628,15 @@
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationsSummary.cs">
       <Link>Notifications\NotificationsSummary.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\NotificationType.cs">
+      <Link>Notifications\NotificationType.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Notifications\NotificationTypeInfo.cs">
       <Link>Notifications\NotificationTypeInfo.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Notifications\SendToUserType.cs">
+      <Link>Notifications\SendToUserType.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Plugins\BasePluginConfiguration.cs">
       <Link>Plugins\BasePluginConfiguration.cs</Link>
     </Compile>

+ 2 - 6
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Model.Weather;
+using MediaBrowser.Model.Notifications;
+using MediaBrowser.Model.Weather;
 using System;
 
 namespace MediaBrowser.Model.Configuration
@@ -178,8 +179,6 @@ namespace MediaBrowser.Model.Configuration
         /// <value>The encoding quality.</value>
         public EncodingQuality MediaEncodingQuality { get; set; }
 
-        public bool AllowVideoUpscaling { get; set; }
-
         public MetadataOptions[] MetadataOptions { get; set; }
 
         public bool EnableDebugEncodingLogging { get; set; }
@@ -268,10 +267,7 @@ namespace MediaBrowser.Model.Configuration
                 new MetadataOptions(0, 1280) {ItemType = "Season"}
             };
 
-            NotificationOptions = new NotificationOptions();
-
             SubtitleOptions = new SubtitleOptions();
-
             LiveTvOptions = new LiveTvOptions();
             TvFileOrganizationOptions = new TvFileOrganizationOptions();
         }

+ 4 - 4
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -88,11 +88,11 @@
     <Compile Include="Configuration\MetadataOptions.cs" />
     <Compile Include="Configuration\MetadataPluginSummary.cs" />
     <Compile Include="Configuration\MetadataPluginType.cs" />
-    <Compile Include="Configuration\NotificationOption.cs" />
-    <Compile Include="Configuration\NotificationOptions.cs" />
-    <Compile Include="Configuration\NotificationType.cs" />
+    <Compile Include="Notifications\NotificationOption.cs" />
+    <Compile Include="Notifications\NotificationOptions.cs" />
+    <Compile Include="Notifications\NotificationType.cs" />
     <Compile Include="Configuration\PathSubstitution.cs" />
-    <Compile Include="Configuration\SendToUserType.cs" />
+    <Compile Include="Notifications\SendToUserType.cs" />
     <Compile Include="Configuration\ServerConfiguration.cs" />
     <Compile Include="Configuration\SubtitleOptions.cs" />
     <Compile Include="Configuration\UnratedItem.cs" />

+ 3 - 1
MediaBrowser.Model/Configuration/NotificationOption.cs → MediaBrowser.Model/Notifications/NotificationOption.cs

@@ -1,4 +1,6 @@
-namespace MediaBrowser.Model.Configuration
+using MediaBrowser.Model.Configuration;
+
+namespace MediaBrowser.Model.Notifications
 {
     public class NotificationOption
     {

+ 3 - 2
MediaBrowser.Model/Configuration/NotificationOptions.cs → MediaBrowser.Model/Notifications/NotificationOptions.cs

@@ -1,6 +1,7 @@
-using MediaBrowser.Model.Extensions;
+using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Extensions;
 
-namespace MediaBrowser.Model.Configuration
+namespace MediaBrowser.Model.Notifications
 {
     public class NotificationOptions
     {

+ 1 - 1
MediaBrowser.Model/Configuration/NotificationType.cs → MediaBrowser.Model/Notifications/NotificationType.cs

@@ -1,4 +1,4 @@
-namespace MediaBrowser.Model.Configuration
+namespace MediaBrowser.Model.Notifications
 {
     public enum NotificationType
     {

+ 1 - 1
MediaBrowser.Model/Configuration/SendToUserType.cs → MediaBrowser.Model/Notifications/SendToUserType.cs

@@ -1,4 +1,4 @@
-namespace MediaBrowser.Model.Configuration
+namespace MediaBrowser.Model.Notifications
 {
     public enum SendToUserType
     {

+ 30 - 2
MediaBrowser.Model/Updates/PackageVersionInfo.cs

@@ -1,4 +1,6 @@
-
+using System;
+using System.Runtime.Serialization;
+
 namespace MediaBrowser.Model.Updates
 {
     /// <summary>
@@ -24,6 +26,32 @@ namespace MediaBrowser.Model.Updates
         /// <value>The version STR.</value>
         public string versionStr { get; set; }
 
+        /// <summary>
+        /// The _version
+        /// </summary>
+        private Version _version;
+        /// <summary>
+        /// Gets or sets the version.
+        /// Had to make this an interpreted property since Protobuf can't handle Version
+        /// </summary>
+        /// <value>The version.</value>
+        [IgnoreDataMember]
+        public Version version
+        {
+            get { return _version ?? (_version = new Version(ValueOrDefault(versionStr, "0.0.0.1"))); }
+        }
+
+        /// <summary>
+        /// Values the or default.
+        /// </summary>
+        /// <param name="str">The STR.</param>
+        /// <param name="def">The def.</param>
+        /// <returns>System.String.</returns>
+        private static string ValueOrDefault(string str, string def)
+        {
+            return string.IsNullOrEmpty(str) ? def : str;
+        }
+
         /// <summary>
         /// Gets or sets the classification.
         /// </summary>
@@ -60,4 +88,4 @@ namespace MediaBrowser.Model.Updates
         /// <value>The target filename.</value>
         public string targetFilename { get; set; }
     }
-}
+}

+ 6 - 0
MediaBrowser.Model/Users/AuthenticationResult.cs

@@ -16,5 +16,11 @@ namespace MediaBrowser.Model.Users
         /// </summary>
         /// <value>The session information.</value>
         public SessionInfoDto SessionInfo { get; set; }
+
+        /// <summary>
+        /// Gets or sets the authentication token.
+        /// </summary>
+        /// <value>The authentication token.</value>
+        public string AuthenticationToken { get; set; }
     }
 }

+ 10 - 15
MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs

@@ -51,13 +51,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
 
         private void ValidateUser(IRequest req)
         {
-            User user = null;
-
             //This code is executed before the service
             var auth = AuthorizationContext.GetAuthorizationInfo(req);
 
-            if (auth != null)
+            if (string.IsNullOrWhiteSpace(auth.Token))
             {
+                // Legacy
+                // TODO: Deprecate this in Oct 2014
+
+                User user = null;
+
                 if (!string.IsNullOrWhiteSpace(auth.UserId))
                 {
                     var userId = auth.UserId;
@@ -65,22 +68,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
                     user = UserManager.GetUserById(new Guid(userId));
                 }
 
-                string deviceId = auth.DeviceId;
-                string device = auth.Device;
-                string client = auth.Client;
-                string version = auth.Version;
-
-                if (!string.IsNullOrEmpty(client) && !string.IsNullOrEmpty(deviceId) && !string.IsNullOrEmpty(device) && !string.IsNullOrEmpty(version))
+                if (user == null || user.Configuration.IsDisabled)
                 {
-                    var remoteEndPoint = req.RemoteIp;
-
-                    SessionManager.LogSessionActivity(client, version, deviceId, device, remoteEndPoint, user);
+                    throw new UnauthorizedAccessException("Unauthorized access.");
                 }
             }
-
-            if (user == null || user.Configuration.IsDisabled)
+            else
             {
-                throw new UnauthorizedAccessException("Unauthorized access.");
+                SessionManager.ValidateSecurityToken(auth.Token);
             }
         }
 

+ 2 - 1
MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs

@@ -42,7 +42,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
                 Device = device,
                 DeviceId = deviceId,
                 UserId = userId,
-                Version = version
+                Version = version,
+                Token = httpReq.Headers["X-AUTH-TOKEN"]
             };
         }
 

+ 7 - 4
MediaBrowser.Server.Implementations/Library/UserManager.cs

@@ -121,17 +121,20 @@ namespace MediaBrowser.Server.Implementations.Library
         /// <summary>
         /// Authenticates a User and returns a result indicating whether or not it succeeded
         /// </summary>
-        /// <param name="user">The user.</param>
+        /// <param name="username">The username.</param>
         /// <param name="password">The password.</param>
         /// <returns>Task{System.Boolean}.</returns>
         /// <exception cref="System.ArgumentNullException">user</exception>
-        public async Task<bool> AuthenticateUser(User user, string password)
+        /// <exception cref="System.UnauthorizedAccessException"></exception>
+        public async Task<bool> AuthenticateUser(string username, string password)
         {
-            if (user == null)
+            if (string.IsNullOrWhiteSpace(username))
             {
-                throw new ArgumentNullException("user");
+                throw new ArgumentNullException("username");
             }
 
+            var user = Users.First(i => string.Equals(username, i.Name, StringComparison.OrdinalIgnoreCase));
+
             if (user.Configuration.IsDisabled)
             {
                 throw new UnauthorizedAccessException(string.Format("The {0} account is currently disabled. Please consult with your administrator.", user.Name));

+ 73 - 52
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -49,8 +49,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
         private readonly List<ILiveTvService> _services = new List<ILiveTvService>();
 
-        private readonly ConcurrentDictionary<string, LiveStreamInfo> _openStreams =
-            new ConcurrentDictionary<string, LiveStreamInfo>();
+        private readonly ConcurrentDictionary<string, LiveStreamData> _openStreams =
+            new ConcurrentDictionary<string, LiveStreamData>();
 
         private List<Guid> _channelIdList = new List<Guid>();
         private Dictionary<Guid, LiveTvProgram> _programs = new Dictionary<Guid, LiveTvProgram>();
@@ -291,66 +291,69 @@ namespace MediaBrowser.Server.Implementations.LiveTv
         private readonly SemaphoreSlim _liveStreamSemaphore = new SemaphoreSlim(1, 1);
 
         public async Task<LiveStreamInfo> GetRecordingStream(string id, CancellationToken cancellationToken)
+        {
+            return await GetLiveStream(id, false, cancellationToken).ConfigureAwait(false);
+        }
+
+        public async Task<LiveStreamInfo> GetChannelStream(string id, CancellationToken cancellationToken)
+        {
+            return await GetLiveStream(id, true, cancellationToken).ConfigureAwait(false);
+        }
+
+        private async Task<LiveStreamInfo> GetLiveStream(string id, bool isChannel, CancellationToken cancellationToken)
         {
             await _liveStreamSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
 
             try
             {
-                var service = ActiveService;
-
-                var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false);
-
-                var recording = recordings.First(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(id));
-
-                var result = await service.GetRecordingStream(recording.Id, cancellationToken).ConfigureAwait(false);
-
-                Sanitize(result);
+                // Avoid implicitly captured closure
+                var itemId = id;
 
-                _logger.Debug("Live stream info: " + _json.SerializeToString(result));
+                var stream = _openStreams
+                    .Where(i => string.Equals(i.Value.ItemId, itemId) && isChannel == i.Value.IsChannel)
+                    .Take(1)
+                    .Select(i => i.Value)
+                    .FirstOrDefault();
 
-                if (!string.IsNullOrEmpty(result.Id))
+                if (stream != null)
                 {
-                    _openStreams.AddOrUpdate(result.Id, result, (key, info) => result);
+                    stream.ConsumerCount++;
+                    _logger.Debug("Returning existing live tv stream");
+                    return stream.Info;
                 }
 
-                return result;
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting recording stream", ex);
-
-                throw;
-            }
-            finally
-            {
-                _liveStreamSemaphore.Release();
-            }
-        }
-
-        public async Task<LiveStreamInfo> GetChannelStream(string id, CancellationToken cancellationToken)
-        {
-            await _liveStreamSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
-
-            try
-            {
                 var service = ActiveService;
+                LiveStreamInfo info;
 
-                var channel = GetInternalChannel(id);
-
-                _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId);
+                if (isChannel)
+                {
+                    var channel = GetInternalChannel(id);
+                    _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId);
 
-                var result = await service.GetChannelStream(channel.ExternalId, cancellationToken).ConfigureAwait(false);
+                    info = await service.GetChannelStream(channel.ExternalId, cancellationToken).ConfigureAwait(false);
+                }
+                else
+                {
+                    var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false);
+                    var recording = recordings.First(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(id));
 
-                Sanitize(result);
+                    _logger.Info("Opening recording stream from {0}, external recording Id: {1}", service.Name, recording.Id);
+                    info = await service.GetRecordingStream(recording.Id, cancellationToken).ConfigureAwait(false);
+                }
 
-                _logger.Debug("Live stream info: " + _json.SerializeToString(result));
+                Sanitize(info);
 
-                if (!string.IsNullOrEmpty(result.Id))
+                var data = new LiveStreamData
                 {
-                    _openStreams.AddOrUpdate(result.Id, result, (key, info) => result);
-                }
+                    Info = info,
+                    ConsumerCount = 1,
+                    IsChannel = isChannel,
+                    ItemId = id
+                };
 
-                return result;
+                _openStreams.AddOrUpdate(info.Id, data, (key, i) => data);
+
+                return info;
             }
             catch (Exception ex)
             {
@@ -1597,20 +1600,38 @@ namespace MediaBrowser.Server.Implementations.LiveTv
             };
         }
 
+        class LiveStreamData
+        {
+            internal LiveStreamInfo Info;
+            internal int ConsumerCount;
+            internal string ItemId;
+            internal bool IsChannel;
+        }
+
         public async Task CloseLiveStream(string id, CancellationToken cancellationToken)
         {
             await _liveStreamSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
 
-            var service = ActiveService;
-
-            _logger.Info("Closing live stream from {0}, stream Id: {1}", service.Name, id);
-
             try
             {
-                await service.CloseLiveStream(id, cancellationToken).ConfigureAwait(false);
+                var service = ActiveService;
+
+                LiveStreamData data;
+                if (_openStreams.TryGetValue(id, out data))
+                {
+                    if (data.ConsumerCount > 1)
+                    {
+                        data.ConsumerCount--;
+                        _logger.Info("Decrementing live stream client count.");
+                        return;
+                    }
 
-                LiveStreamInfo removed;
-                _openStreams.TryRemove(id, out removed);
+                }
+                _openStreams.TryRemove(id, out data);
+
+                _logger.Info("Closing live stream from {0}, stream Id: {1}", service.Name, id);
+
+                await service.CloseLiveStream(id, cancellationToken).ConfigureAwait(false);
             }
             catch (Exception ex)
             {
@@ -1662,7 +1683,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
                 {
                     foreach (var stream in _openStreams.Values.ToList())
                     {
-                        var task = CloseLiveStream(stream.Id, CancellationToken.None);
+                        var task = CloseLiveStream(stream.Info.Id, CancellationToken.None);
 
                         Task.WaitAll(task);
                     }

+ 17 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json

@@ -201,5 +201,21 @@
 	"ButtonOpenInNewTab": "Open in new tab",
 	"ButtonShuffle": "Shuffle",
 	"ButtonInstantMix": "Instant mix",
-	"ButtonResume": "Resume"
+	"ButtonResume": "Resume",
+	"HeaderScenes": "Scenes",
+	"HeaderAudioTracks": "Audio Tracks",
+	"LabelUnknownLanguage": "Unknown language",
+	"HeaderSubtitles": "Subtitles",
+	"HeaderVideoQuality": "Video Quality",
+	"MessageErrorPlayingVideo": "There was an error playing the video.",
+	"MessageEnsureOpenTuner": "Please ensure there is an open tuner availalble.",
+	"ButtonHome": "Home",
+	"ButtonDashboard": "Dashboard",
+	"ButtonReports": "Reports",
+	"ButtonMetadataManager": "Metadata Manager",
+	"HeaderTime": "Time",
+	"HeaderName": "Name",
+	"HeaderAlbum": "Album",
+	"HeaderAlbumArtist": "Album Artist",
+	"HeaderArtist": "Artist"
 }

+ 1 - 0
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -200,6 +200,7 @@
     <Compile Include="News\NewsService.cs" />
     <Compile Include="Notifications\CoreNotificationTypes.cs" />
     <Compile Include="Notifications\InternalNotificationService.cs" />
+    <Compile Include="Notifications\NotificationConfigurationFactory.cs" />
     <Compile Include="Notifications\NotificationManager.cs" />
     <Compile Include="Persistence\SqliteChapterRepository.cs" />
     <Compile Include="Persistence\SqliteExtensions.cs" />

+ 21 - 0
MediaBrowser.Server.Implementations/Notifications/NotificationConfigurationFactory.cs

@@ -0,0 +1,21 @@
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Model.Notifications;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Server.Implementations.Notifications
+{
+    public class NotificationConfigurationFactory : IConfigurationFactory
+    {
+        public IEnumerable<ConfigurationStore> GetConfigurations()
+        {
+            return new List<ConfigurationStore>
+            {
+                new ConfigurationStore
+                {
+                    Key = "notifications",
+                    ConfigurationType = typeof (NotificationOptions)
+                }
+            };
+        }
+    }
+}

+ 12 - 4
MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
@@ -30,13 +31,18 @@ namespace MediaBrowser.Server.Implementations.Notifications
             _logger = logManager.GetLogger(GetType().Name);
         }
 
+        private NotificationOptions GetConfiguration()
+        {
+            return _config.GetConfiguration<NotificationOptions>("notifications");
+        }
+
         public Task SendNotification(NotificationRequest request, CancellationToken cancellationToken)
         {
             var notificationType = request.NotificationType;
 
             var options = string.IsNullOrWhiteSpace(notificationType) ?
                 null :
-                _config.Configuration.NotificationOptions.GetOptions(notificationType);
+                GetConfiguration().GetOptions(notificationType);
 
             var users = GetUserIds(request, options)
                 .Except(request.ExcludeUserIds)
@@ -223,7 +229,7 @@ namespace MediaBrowser.Server.Implementations.Notifications
         private bool IsEnabled(INotificationService service, string notificationType)
         {
             return string.IsNullOrEmpty(notificationType) ||
-                _config.Configuration.NotificationOptions.IsServiceEnabled(service.Name, notificationType);
+                GetConfiguration().IsServiceEnabled(service.Name, notificationType);
         }
 
         public void AddParts(IEnumerable<INotificationService> services, IEnumerable<INotificationTypeFactory> notificationTypeFactories)
@@ -248,9 +254,11 @@ namespace MediaBrowser.Server.Implementations.Notifications
 
             }).SelectMany(i => i).ToList();
 
+            var config = GetConfiguration();
+
             foreach (var i in list)
             {
-                i.Enabled = _config.Configuration.NotificationOptions.IsEnabled(i.Type);
+                i.Enabled = config.IsEnabled(i.Type);
             }
 
             return list;

+ 27 - 4
MediaBrowser.Server.Implementations/Session/SessionManager.cs

@@ -25,6 +25,7 @@ using System.IO;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using MediaBrowser.Model.Users;
 
 namespace MediaBrowser.Server.Implementations.Session
 {
@@ -1138,10 +1139,15 @@ namespace MediaBrowser.Server.Implementations.Session
             }
         }
 
+        public void ValidateSecurityToken(string token)
+        {
+
+        }
+
         /// <summary>
         /// Authenticates the new session.
         /// </summary>
-        /// <param name="user">The user.</param>
+        /// <param name="username">The username.</param>
         /// <param name="password">The password.</param>
         /// <param name="clientType">Type of the client.</param>
         /// <param name="appVersion">The application version.</param>
@@ -1149,17 +1155,34 @@ namespace MediaBrowser.Server.Implementations.Session
         /// <param name="deviceName">Name of the device.</param>
         /// <param name="remoteEndPoint">The remote end point.</param>
         /// <returns>Task{SessionInfo}.</returns>
+        /// <exception cref="System.UnauthorizedAccessException">Invalid user or password entered.</exception>
         /// <exception cref="UnauthorizedAccessException"></exception>
-        public async Task<SessionInfo> AuthenticateNewSession(User user, string password, string clientType, string appVersion, string deviceId, string deviceName, string remoteEndPoint)
+        public async Task<AuthenticationResult> AuthenticateNewSession(string username, string password, string clientType, string appVersion, string deviceId, string deviceName, string remoteEndPoint)
         {
-            var result = await _userManager.AuthenticateUser(user, password).ConfigureAwait(false);
+            var result = await _userManager.AuthenticateUser(username, password).ConfigureAwait(false);
 
             if (!result)
             {
                 throw new UnauthorizedAccessException("Invalid user or password entered.");
             }
 
-            return await LogSessionActivity(clientType, appVersion, deviceId, deviceName, remoteEndPoint, user).ConfigureAwait(false);
+            var user = _userManager.Users
+                .First(i => string.Equals(username, i.Name, StringComparison.OrdinalIgnoreCase));
+
+            var session = await LogSessionActivity(clientType,
+                appVersion,
+                deviceId,
+                deviceName,
+                remoteEndPoint,
+                user)
+                .ConfigureAwait(false);
+
+            return new AuthenticationResult
+            {
+                User = _dtoService.GetUserDto(user),
+                SessionInfo = GetSessionInfoDto(session),
+                AuthenticationToken = Guid.NewGuid().ToString("N")
+            };
         }
 
         /// <summary>

+ 7 - 0
MediaBrowser.ServerApplication/ApplicationHost.cs

@@ -318,6 +318,13 @@ namespace MediaBrowser.ServerApplication
                 saveConfig = true;
             }
 
+            if (ServerConfigurationManager.Configuration.NotificationOptions != null)
+            {
+                ServerConfigurationManager.SaveConfiguration("notifications", ServerConfigurationManager.Configuration.NotificationOptions);
+                ServerConfigurationManager.Configuration.NotificationOptions = null;
+                saveConfig = true;
+            }
+
             if (saveConfig)
             {
                 ServerConfigurationManager.SaveConfiguration();

+ 2 - 2
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -403,7 +403,7 @@ namespace MediaBrowser.WebDashboard.Api
 
             var files = new[]
                             {
-                                "thirdparty/jquerymobile-1.4.2/jquery.mobile-1.4.2.min.css",
+                                "thirdparty/jquerymobile-1.4.3/jquery.mobile-1.4.3.min.css",
                                 "css/all.css" + versionString
                             };
 
@@ -449,7 +449,7 @@ namespace MediaBrowser.WebDashboard.Api
 
             // jQuery + jQuery mobile
             await AppendResource(memoryStream, "thirdparty/jquery-2.0.3.min.js", newLineBytes).ConfigureAwait(false);
-            await AppendResource(memoryStream, "thirdparty/jquerymobile-1.4.2/jquery.mobile-1.4.2.min.js", newLineBytes).ConfigureAwait(false);
+            await AppendResource(memoryStream, "thirdparty/jquerymobile-1.4.3/jquery.mobile-1.4.3.min.js", newLineBytes).ConfigureAwait(false);
 
             await AppendLocalization(memoryStream).ConfigureAwait(false);
             await memoryStream.WriteAsync(newLineBytes, 0, newLineBytes.Length).ConfigureAwait(false);

+ 206 - 203
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -815,613 +815,613 @@
     <Content Include="dashboard-ui\thirdparty\jquery.unveil-custom.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\ajax-loader.gif">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\ajax-loader.gif">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\action-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\action-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\action-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\action-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\alert-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\alert-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\alert-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\alert-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-l-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-l-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-l-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-l-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-r-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-r-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-r-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-r-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-d-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-d-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-l-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-l-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-l-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-l-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-r-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-r-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-r-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-r-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-l-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-l-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-l-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-l-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-r-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-r-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-r-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-r-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\arrow-u-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\arrow-u-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\audio-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\audio-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\audio-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\audio-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\back-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\back-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\back-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\back-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\bars-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\bars-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\bars-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\bars-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\bullets-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\bullets-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\bullets-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\bullets-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\calendar-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\calendar-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\calendar-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\calendar-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\camera-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\camera-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\camera-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\camera-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-d-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-d-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-d-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-d-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-l-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-l-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-l-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-l-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-r-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-r-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-r-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-r-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-u-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-u-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\carat-u-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\carat-u-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\check-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\check-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\check-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\check-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\clock-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\clock-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\clock-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\clock-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\cloud-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\cloud-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\cloud-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\cloud-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\comment-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\comment-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\comment-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\comment-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\delete-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\delete-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\delete-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\delete-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\edit-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\edit-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\edit-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\edit-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\eye-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\eye-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\eye-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\eye-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\forbidden-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\forbidden-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\forbidden-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\forbidden-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\forward-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\forward-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\forward-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\forward-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\gear-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\gear-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\gear-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\gear-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\grid-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\grid-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\grid-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\grid-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\heart-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\heart-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\heart-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\heart-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\home-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\home-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\home-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\home-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\info-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\info-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\info-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\info-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\location-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\location-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\location-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\location-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\lock-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\lock-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\lock-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\lock-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\mail-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\mail-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\mail-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\mail-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\minus-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\minus-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\minus-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\minus-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\navigation-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\navigation-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\navigation-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\navigation-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\phone-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\phone-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\phone-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\phone-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\plus-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\plus-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\plus-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\plus-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\power-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\power-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\power-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\power-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\recycle-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\recycle-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\recycle-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\recycle-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\refresh-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\refresh-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\refresh-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\refresh-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\search-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\search-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\search-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\search-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\shop-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\shop-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\shop-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\shop-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\star-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\star-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\star-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\star-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\tag-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\tag-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\tag-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\tag-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\user-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\user-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\user-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\user-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\video-black.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\video-black.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-png\video-white.png">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-png\video-white.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\action-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\action-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\action-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\action-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\alert-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\alert-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\alert-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\alert-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-l-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-l-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-l-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-l-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-r-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-r-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-r-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-r-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-d-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-d-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-l-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-l-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-l-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-l-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-r-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-r-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-r-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-r-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-l-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-l-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-l-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-l-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-r-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-r-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-r-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-r-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\arrow-u-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\arrow-u-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\audio-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\audio-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\audio-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\audio-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\back-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\back-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\back-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\back-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\bars-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\bars-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\bars-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\bars-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\bullets-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\bullets-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\bullets-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\bullets-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\calendar-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\calendar-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\calendar-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\calendar-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\camera-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\camera-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\camera-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\camera-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-d-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-d-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-d-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-d-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-l-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-l-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-l-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-l-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-r-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-r-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-r-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-r-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-u-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-u-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\carat-u-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\carat-u-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\check-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\check-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\check-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\check-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\clock-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\clock-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\clock-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\clock-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\cloud-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\cloud-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\cloud-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\cloud-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\comment-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\comment-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\comment-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\comment-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\delete-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\delete-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\delete-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\delete-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\edit-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\edit-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\edit-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\edit-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\eye-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\eye-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\eye-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\eye-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\forbidden-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\forbidden-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\forbidden-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\forbidden-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\forward-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\forward-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\forward-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\forward-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\gear-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\gear-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\gear-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\gear-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\grid-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\grid-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\grid-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\grid-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\heart-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\heart-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\heart-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\heart-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\home-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\home-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\home-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\home-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\info-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\info-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\info-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\info-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\location-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\location-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\location-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\location-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\lock-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\lock-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\lock-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\lock-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\mail-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\mail-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\mail-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\mail-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\minus-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\minus-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\minus-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\minus-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\navigation-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\navigation-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\navigation-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\navigation-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\phone-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\phone-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\phone-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\phone-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\plus-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\plus-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\plus-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\plus-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\power-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\power-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\power-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\power-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\recycle-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\recycle-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\recycle-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\recycle-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\refresh-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\refresh-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\refresh-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\refresh-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\search-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\search-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\search-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\search-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\shop-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\shop-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\shop-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\shop-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\star-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\star-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\star-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\star-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\tag-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\tag-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\tag-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\tag-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\user-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\user-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\user-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\user-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\video-black.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\video-black.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\images\icons-svg\video-white.svg">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\images\icons-svg\video-white.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\jquery.mobile-1.4.2.min.css">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\jquery.mobile-1.4.3.min.css">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.2\jquery.mobile-1.4.2.min.js">
+    <Content Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\jquery.mobile-1.4.3.min.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="dashboard-ui\thirdparty\jstree1.0\jquery.jstree.min.js">
@@ -2144,6 +2144,9 @@
     <None Include="dashboard-ui\css\fonts\RobotoThin.woff">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="dashboard-ui\thirdparty\jquerymobile-1.4.3\jquery.mobile-1.4.3.min.map">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="packages.config" />
     <None Include="WebMarkupMin.Configuration.xsd">
       <SubType>Designer</SubType>