48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using Microsoft.AspNetCore.Components.Forms;
|
|
using System;
|
|
|
|
namespace Generic.Media.Components
|
|
{
|
|
public class MediaItemModel
|
|
{
|
|
public string Id { get; set; } = Guid.NewGuid().ToString();
|
|
public string? Url { get; set; }
|
|
public IBrowserFile? File { get; set; }
|
|
public MediaType Type { get; set; }
|
|
public string? AltText { get; set; }
|
|
public int Order { get; set; }
|
|
|
|
public bool IsLocal { get; set; }
|
|
public string? PreviewUrl { get; set; } // Blob URL for local files
|
|
}
|
|
|
|
public enum MediaType
|
|
{
|
|
Image,
|
|
Video,
|
|
YouTube,
|
|
Vimeo,
|
|
Unknown
|
|
}
|
|
|
|
public static class MediaHelper
|
|
{
|
|
public static MediaType GetType(string url)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(url)) return MediaType.Image;
|
|
url = url.ToLower();
|
|
if (url.Contains("youtube.com") || url.Contains("youtu.be")) return MediaType.YouTube;
|
|
if (url.Contains("vimeo.com")) return MediaType.Vimeo;
|
|
if (url.EndsWith(".mp4") || url.EndsWith(".webm") || url.EndsWith(".ogg")) return MediaType.Video;
|
|
return MediaType.Image;
|
|
}
|
|
|
|
public static string GetYouTubeId(string url)
|
|
{
|
|
if (url.Contains("youtu.be/")) return url.Split("youtu.be/")[1].Split("?")[0];
|
|
if (url.Contains("v=")) return url.Split("v=")[1].Split("&")[0];
|
|
return "";
|
|
}
|
|
}
|
|
}
|