mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-04-24 14:08:44 -04:00
Fix issues and add profile image support
This commit is contained in:
parent
292993d8ef
commit
1d1a145ad4
8 changed files with 50 additions and 25 deletions
|
@ -1,24 +1,33 @@
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Entities
|
namespace Jellyfin.Data.Entities
|
||||||
{
|
{
|
||||||
public class ImageInfo
|
public class ImageInfo
|
||||||
{
|
{
|
||||||
public ImageInfo(string path)
|
public ImageInfo(string path, int width, int height)
|
||||||
{
|
{
|
||||||
Path = path;
|
Path = path;
|
||||||
|
Width = width;
|
||||||
|
Height = height;
|
||||||
LastModified = DateTime.UtcNow;
|
LastModified = DateTime.UtcNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Key]
|
[Key]
|
||||||
[Required]
|
[Required]
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
public int Id { get; protected set; }
|
public int Id { get; protected set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int Width { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public int Height { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public DateTime LastModified { get; set; }
|
public DateTime LastModified { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,14 +12,7 @@ namespace Jellyfin.Data.Entities
|
||||||
partial void Init();
|
partial void Init();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
/// Initializes a new instance of the <see cref="Permission"/> class.
|
||||||
/// </summary>
|
|
||||||
protected Permission()
|
|
||||||
{
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Public constructor with required data
|
/// Public constructor with required data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="kind"></param>
|
/// <param name="kind"></param>
|
||||||
|
@ -33,6 +26,15 @@ namespace Jellyfin.Data.Entities
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="Permission"/> class.
|
||||||
|
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||||
|
/// </summary>
|
||||||
|
protected Permission()
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Static create function (for use in LINQ queries, etc.)
|
/// Static create function (for use in LINQ queries, etc.)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace Jellyfin.Data.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="username">The username for the new user.</param>
|
/// <param name="username">The username for the new user.</param>
|
||||||
/// <param name="authenticationProviderId">The authentication provider's Id</param>
|
/// <param name="authenticationProviderId">The authentication provider's Id</param>
|
||||||
public User(string username, string authenticationProviderId)
|
public User(string username, string authenticationProviderId, string passwordResetProviderId)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(username))
|
if (string.IsNullOrEmpty(username))
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,7 @@ namespace Jellyfin.Data.Entities
|
||||||
|
|
||||||
Username = username;
|
Username = username;
|
||||||
AuthenticationProviderId = authenticationProviderId;
|
AuthenticationProviderId = authenticationProviderId;
|
||||||
|
PasswordResetProviderId = passwordResetProviderId;
|
||||||
|
|
||||||
Groups = new HashSet<Group>();
|
Groups = new HashSet<Group>();
|
||||||
Permissions = new HashSet<Permission>();
|
Permissions = new HashSet<Permission>();
|
||||||
|
@ -85,10 +86,11 @@ namespace Jellyfin.Data.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="username">The username for the created user.</param>
|
/// <param name="username">The username for the created user.</param>
|
||||||
/// <param name="authenticationProviderId">The Id of the user's authentication provider.</param>
|
/// <param name="authenticationProviderId">The Id of the user's authentication provider.</param>
|
||||||
|
/// <param name="passwordResetProviderId">The Id of the user's password reset provider.</param>
|
||||||
/// <returns>The created instance.</returns>
|
/// <returns>The created instance.</returns>
|
||||||
public static User Create(string username, string authenticationProviderId)
|
public static User Create(string username, string authenticationProviderId, string passwordResetProviderId)
|
||||||
{
|
{
|
||||||
return new User(username, authenticationProviderId);
|
return new User(username, authenticationProviderId, passwordResetProviderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
|
@ -190,7 +190,10 @@ namespace Jellyfin.Server.Implementations.Users
|
||||||
|
|
||||||
var dbContext = _dbProvider.CreateContext();
|
var dbContext = _dbProvider.CreateContext();
|
||||||
|
|
||||||
var newUser = new User(name, _defaultAuthenticationProvider.GetType().FullName);
|
var newUser = new User(
|
||||||
|
name,
|
||||||
|
_defaultAuthenticationProvider.GetType().FullName,
|
||||||
|
_defaultPasswordResetProvider.GetType().FullName);
|
||||||
dbContext.Users.Add(newUser);
|
dbContext.Users.Add(newUser);
|
||||||
dbContext.SaveChanges();
|
dbContext.SaveChanges();
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ using Jellyfin.Data.Enums;
|
||||||
using Jellyfin.Server.Implementations;
|
using Jellyfin.Server.Implementations;
|
||||||
using Jellyfin.Server.Implementations.Users;
|
using Jellyfin.Server.Implementations.Users;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Users;
|
using MediaBrowser.Model.Users;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
@ -84,9 +85,9 @@ namespace Jellyfin.Server.Migrations.Routines
|
||||||
StringComparison.Ordinal)
|
StringComparison.Ordinal)
|
||||||
?? typeof(DefaultAuthenticationProvider).FullName;
|
?? typeof(DefaultAuthenticationProvider).FullName;
|
||||||
|
|
||||||
policy.PasswordResetProviderId ??= typeof(DefaultPasswordResetProvider).FullName;
|
policy.PasswordResetProviderId = typeof(DefaultPasswordResetProvider).FullName;
|
||||||
|
|
||||||
var user = new User(mockup.Name, policy.AuthenticationProviderId)
|
var user = new User(mockup.Name, policy.AuthenticationProviderId, string.Empty)
|
||||||
{
|
{
|
||||||
Id = entry[1].ReadGuidFromBlob(),
|
Id = entry[1].ReadGuidFromBlob(),
|
||||||
InternalId = entry[0].ToInt64(),
|
InternalId = entry[0].ToInt64(),
|
||||||
|
@ -113,6 +114,16 @@ namespace Jellyfin.Server.Migrations.Routines
|
||||||
LastActivityDate = mockup.LastActivityDate ?? DateTime.MinValue
|
LastActivityDate = mockup.LastActivityDate ?? DateTime.MinValue
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (mockup.ImageInfos.Length > 0)
|
||||||
|
{
|
||||||
|
ItemImageInfo info = mockup.ImageInfos[0];
|
||||||
|
|
||||||
|
user.ProfileImage = new ImageInfo(info.Path, info.Width, info.Height)
|
||||||
|
{
|
||||||
|
LastModified = info.DateModified
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
user.SetPermission(PermissionKind.IsAdministrator, policy.IsAdministrator);
|
user.SetPermission(PermissionKind.IsAdministrator, policy.IsAdministrator);
|
||||||
user.SetPermission(PermissionKind.IsHidden, policy.IsHidden);
|
user.SetPermission(PermissionKind.IsHidden, policy.IsHidden);
|
||||||
user.SetPermission(PermissionKind.IsDisabled, policy.IsDisabled);
|
user.SetPermission(PermissionKind.IsDisabled, policy.IsDisabled);
|
||||||
|
@ -184,6 +195,8 @@ namespace Jellyfin.Server.Migrations.Routines
|
||||||
public DateTime? LastActivityDate { get; set; }
|
public DateTime? LastActivityDate { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public ItemImageInfo[] ImageInfos { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ using MediaBrowser.Model.Drawing;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
using MediaBrowser.Model.Net;
|
||||||
using MediaBrowser.Model.Services;
|
using MediaBrowser.Model.Services;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
@ -887,7 +888,7 @@ namespace MediaBrowser.Api.Images
|
||||||
var userDataPath = Path.Combine(ServerConfigurationManager.ApplicationPaths.UserConfigurationDirectoryPath, user.Username);
|
var userDataPath = Path.Combine(ServerConfigurationManager.ApplicationPaths.UserConfigurationDirectoryPath, user.Username);
|
||||||
|
|
||||||
await _providerManager
|
await _providerManager
|
||||||
.SaveImage(user, memoryStream, mimeType, Path.Combine(userDataPath, _imageProcessor.GetImageCacheTag(user)))
|
.SaveImage(user, memoryStream, mimeType, Path.Combine(userDataPath, "profile" + MimeTypes.ToExtension(mimeType)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
await _userManager.UpdateUserAsync(user);
|
await _userManager.UpdateUserAsync(user);
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ namespace MediaBrowser.Providers.Manager
|
||||||
|
|
||||||
var currentImage = GetCurrentImage(item, type, index);
|
var currentImage = GetCurrentImage(item, type, index);
|
||||||
var currentImageIsLocalFile = currentImage != null && currentImage.IsLocalFile;
|
var currentImageIsLocalFile = currentImage != null && currentImage.IsLocalFile;
|
||||||
var currentImagePath = currentImage == null ? null : currentImage.Path;
|
var currentImagePath = currentImage?.Path;
|
||||||
|
|
||||||
var savedPaths = new List<string>();
|
var savedPaths = new List<string>();
|
||||||
|
|
||||||
|
@ -179,13 +179,8 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveImage(User user, Stream source, string mimeType, string path)
|
public async Task SaveImage(User user, Stream source, string path)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(mimeType))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(mimeType));
|
|
||||||
}
|
|
||||||
|
|
||||||
await SaveImageToLocation(source, path, path, CancellationToken.None).ConfigureAwait(false);
|
await SaveImageToLocation(source, path, path, CancellationToken.None).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ namespace MediaBrowser.Providers.Manager
|
||||||
public Task SaveImage(User user, Stream source, string mimeType, string path)
|
public Task SaveImage(User user, Stream source, string mimeType, string path)
|
||||||
{
|
{
|
||||||
return new ImageSaver(_configurationManager, _libraryMonitor, _fileSystem, _logger)
|
return new ImageSaver(_configurationManager, _libraryMonitor, _fileSystem, _logger)
|
||||||
.SaveImage(user, source, mimeType, path);
|
.SaveImage(user, source, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<RemoteImageInfo>> GetAvailableRemoteImages(BaseItem item, RemoteImageQuery query, CancellationToken cancellationToken)
|
public async Task<IEnumerable<RemoteImageInfo>> GetAvailableRemoteImages(BaseItem item, RemoteImageQuery query, CancellationToken cancellationToken)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue