浏览代码

update camera upload

Luke Pulverenti 9 年之前
父节点
当前提交
baf2f80154

+ 28 - 9
MediaBrowser.Api/Devices/DeviceService.cs

@@ -1,4 +1,6 @@
-using MediaBrowser.Controller.Devices;
+using System;
+using System.Linq;
+using MediaBrowser.Controller.Devices;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Devices;
 using MediaBrowser.Model.Querying;
@@ -128,15 +130,32 @@ namespace MediaBrowser.Api.Devices
             var id = Request.QueryString["Id"];
             var name = Request.QueryString["Name"];
 
-            var task = _deviceManager.AcceptCameraUpload(deviceId, request.RequestStream, new LocalFileInfo
+            if (Request.ContentType.IndexOf("multi", StringComparison.OrdinalIgnoreCase) == -1)
             {
-                MimeType = Request.ContentType,
-                Album = album,
-                Name = name,
-                Id = id
-            });
-
-            Task.WaitAll(task);
+                var task = _deviceManager.AcceptCameraUpload(deviceId, request.RequestStream, new LocalFileInfo
+                {
+                    MimeType = Request.ContentType,
+                    Album = album,
+                    Name = name,
+                    Id = id
+                });
+
+                Task.WaitAll(task);
+            }
+            else
+            {
+                var file = Request.Files.First();
+
+                var task = _deviceManager.AcceptCameraUpload(deviceId, file.InputStream, new LocalFileInfo
+                {
+                    MimeType = file.ContentType,
+                    Album = album,
+                    Name = name,
+                    Id = id
+                });
+
+                Task.WaitAll(task);
+            }
         }
     }
 }

+ 1 - 1
MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs

@@ -58,7 +58,7 @@ namespace MediaBrowser.Common.ScheduledTasks
             {
                 if (isApplicationStartup)
                 {
-                    triggerDate = DateTime.UtcNow.AddMinutes(5);
+                    triggerDate = DateTime.UtcNow.AddMinutes(2);
                 }
                 else
                 {

+ 1 - 0
MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs

@@ -20,6 +20,7 @@ namespace MediaBrowser.Controller.LiveTv
         public string EpisodeTitle { get; set; }
         public bool IsSeries { get; set; }
         public string SeriesTimerId { get; set; }
+        [IgnoreDataMember]
         public DateTime StartDate { get; set; }
         public RecordingStatus Status { get; set; }
         [IgnoreDataMember]

+ 1 - 0
MediaBrowser.Controller/LiveTv/LiveTvProgram.cs

@@ -56,6 +56,7 @@ namespace MediaBrowser.Controller.LiveTv
         /// <summary>
         /// The start date of the program, in UTC.
         /// </summary>
+        [IgnoreDataMember]
         public DateTime StartDate { get; set; }
 
         /// <summary>

+ 1 - 0
MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs

@@ -20,6 +20,7 @@ namespace MediaBrowser.Controller.LiveTv
         public string EpisodeTitle { get; set; }
         public bool IsSeries { get; set; }
         public string SeriesTimerId { get; set; }
+        [IgnoreDataMember]
         public DateTime StartDate { get; set; }
         public RecordingStatus Status { get; set; }
         [IgnoreDataMember]

+ 4 - 4
MediaBrowser.Controller/Providers/MetadataStatus.cs

@@ -78,9 +78,9 @@ namespace MediaBrowser.Controller.Providers
 
         public bool IsDirty { get; private set; }
 
-        public void SetDateLastMetadataRefresh(DateTime date)
+        public void SetDateLastMetadataRefresh(DateTime? date)
         {
-            if (date != (DateLastMetadataRefresh ?? DateTime.MinValue))
+            if (date != DateLastMetadataRefresh)
             {
                 IsDirty = true;
             }
@@ -88,9 +88,9 @@ namespace MediaBrowser.Controller.Providers
             DateLastMetadataRefresh = date;
         }
 
-        public void SetDateLastImagesRefresh(DateTime date)
+        public void SetDateLastImagesRefresh(DateTime? date)
         {
-            if (date != (DateLastImagesRefresh ?? DateTime.MinValue))
+            if (date != DateLastImagesRefresh)
             {
                 IsDirty = true;
             }

+ 1 - 1
MediaBrowser.Model/Net/MimeTypes.cs

@@ -318,7 +318,7 @@ namespace MediaBrowser.Model.Net
             {
                 return result;
             }
-            throw new ArgumentNullException("Unable to determine extension for mimeType: " + mimeType);
+            return null;
         }
     }
 }

+ 17 - 3
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -147,7 +147,14 @@ namespace MediaBrowser.Providers.Manager
 
                     updateType = updateType | result.UpdateType;
                     refreshResult.AddStatus(result.Status, result.ErrorMessage);
-                    refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow);
+                    if (result.Failures == 0)
+                    {
+                        refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow);
+                    }
+                    else
+                    {
+                        refreshResult.SetDateLastMetadataRefresh(null);
+                    }
 
                     MergeIdentities(itemOfType, id);
                 }
@@ -164,7 +171,14 @@ namespace MediaBrowser.Providers.Manager
 
                     updateType = updateType | result.UpdateType;
                     refreshResult.AddStatus(result.Status, result.ErrorMessage);
-                    refreshResult.SetDateLastImagesRefresh(DateTime.UtcNow);
+                    if (result.Failures == 0)
+                    {
+                        refreshResult.SetDateLastImagesRefresh(DateTime.UtcNow);
+                    }
+                    else
+                    {
+                        refreshResult.SetDateLastImagesRefresh(null);
+                    }
                 }
             }
 
@@ -503,7 +517,7 @@ namespace MediaBrowser.Providers.Manager
             {
                 return false;
             }
-            
+
             return true;
         }
 

+ 4 - 2
MediaBrowser.Server.Implementations/Devices/DeviceManager.cs

@@ -8,6 +8,7 @@ using MediaBrowser.Model.Devices;
 using MediaBrowser.Model.Events;
 using MediaBrowser.Model.Extensions;
 using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Net;
 using MediaBrowser.Model.Querying;
 using MediaBrowser.Model.Session;
 using MediaBrowser.Model.Users;
@@ -151,12 +152,13 @@ namespace MediaBrowser.Server.Implementations.Devices
                 path = Path.Combine(path, _fileSystem.GetValidFilename(file.Album));
             }
 
-            Directory.CreateDirectory(path);
-
             path = Path.Combine(path, file.Name);
+            path = Path.ChangeExtension(path, MimeTypes.ToExtension(file.MimeType) ?? "jpg");
 
             _libraryMonitor.ReportFileSystemChangeBeginning(path);
 
+            Directory.CreateDirectory(Path.GetDirectoryName(path));
+
             try
             {
                 using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))

+ 14 - 0
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -369,6 +369,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
         }
 
         public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+        {
+            try
+            {
+                return await GetProgramsAsyncInternal(channelId, startDateUtc, endDateUtc, cancellationToken).ConfigureAwait(false);
+            }
+            catch (Exception ex)
+            {
+                _logger.ErrorException("Error getting programs", ex);
+                return GetEpgDataForChannel(channelId).Where(i => i.StartDate <= endDateUtc && i.EndDate >= startDateUtc);
+            }
+        }
+
+        private async Task<IEnumerable<ProgramInfo>> GetProgramsAsyncInternal(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
         {
             var channels = await GetChannelsAsync(true, cancellationToken).ConfigureAwait(false);
             var channel = channels.First(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
@@ -377,6 +390,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             {
                 var programs = await provider.Item1.GetProgramsAsync(provider.Item2, channel.Number, startDateUtc, endDateUtc, cancellationToken)
                         .ConfigureAwait(false);
+
                 var list = programs.ToList();
 
                 // Replace the value that came from the provider with a normalized value

+ 1 - 1
MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -331,7 +331,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 Container = "ts",
                 Id = profile,
                 SupportsDirectPlay = true,
-                SupportsDirectStream = false,
+                SupportsDirectStream = true,
                 SupportsTranscoding = true
             };
 

+ 19 - 9
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -191,6 +191,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
         {
             "type",
             "data",
+            "StartDate",
             "EndDate",
             "IsOffline",
             "ChannelId",
@@ -516,35 +517,44 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
             if (!reader.IsDBNull(2))
             {
-                item.EndDate = reader.GetDateTime(2).ToUniversalTime();
+                var hasStartDate = item as IHasStartDate;
+                if (hasStartDate != null)
+                {
+                    hasStartDate.StartDate = reader.GetDateTime(2).ToUniversalTime();
+                }
             }
 
             if (!reader.IsDBNull(3))
             {
-                item.IsOffline = reader.GetBoolean(3);
+                item.EndDate = reader.GetDateTime(3).ToUniversalTime();
             }
 
             if (!reader.IsDBNull(4))
             {
-                item.ChannelId = reader.GetString(4);
+                item.IsOffline = reader.GetBoolean(4);
+            }
+
+            if (!reader.IsDBNull(5))
+            {
+                item.ChannelId = reader.GetString(5);
             }
 
             var hasProgramAttributes = item as IHasProgramAttributes;
             if (hasProgramAttributes != null)
             {
-                if (!reader.IsDBNull(5))
+                if (!reader.IsDBNull(6))
                 {
-                    hasProgramAttributes.IsMovie = reader.GetBoolean(5);
+                    hasProgramAttributes.IsMovie = reader.GetBoolean(6);
                 }
 
-                if (!reader.IsDBNull(6))
+                if (!reader.IsDBNull(7))
                 {
-                    hasProgramAttributes.IsSports = reader.GetBoolean(6);
+                    hasProgramAttributes.IsSports = reader.GetBoolean(7);
                 }
 
-                if (!reader.IsDBNull(7))
+                if (!reader.IsDBNull(8))
                 {
-                    hasProgramAttributes.IsKids = reader.GetBoolean(7);
+                    hasProgramAttributes.IsKids = reader.GetBoolean(8);
                 }
             }
 

+ 6 - 0
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -90,6 +90,9 @@
     <Content Include="dashboard-ui\apiclient\sync\contentuploader.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="dashboard-ui\apiclient\fileupload.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\apiclient\sync\mediasync.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -165,6 +168,9 @@
     <Content Include="dashboard-ui\cordova\android\logging.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="dashboard-ui\cordova\fileupload.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\cordova\ios\vlcplayer.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>