This commit is contained in:
Aesthetiful committed 2026-10-05 21:14:14 -07:00
commit bb2cf4708d
27 files changed
+1700

No files matched your search

Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,137 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\controllers\\thumbnailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\controllers\\thumbnailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\data\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\data\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\entities\\video.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\entities\\video.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\appsettings.development.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\appsettings.development.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 5,
"Children": [
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "appsettings.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\appsettings.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.json",
"RelativeToolTip": "ThumbnailServer2016\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAABTAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-13T23:00:26.458Z"
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "appsettings.Development.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.Development.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\appsettings.Development.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.Development.json",
"RelativeToolTip": "ThumbnailServer2016\\appsettings.Development.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAADAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-13T23:00:21.366Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "AppDbContext.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Data\\AppDbContext.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Data\\AppDbContext.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Data\\AppDbContext.cs",
"RelativeToolTip": "ThumbnailServer2016\\Data\\AppDbContext.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAwAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-13T22:54:46.474Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "launchSettings.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Properties\\launchSettings.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Properties\\launchSettings.json",
"RelativeToolTip": "ThumbnailServer2016\\Properties\\launchSettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-08T20:59:41.453Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ThumbnailController.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"RelativeToolTip": "ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:46:17.852Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Program.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Program.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Program.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Program.cs",
"RelativeToolTip": "ThumbnailServer2016\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAABcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:43:13.873Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "Video.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Entities\\Video.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Entities\\Video.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Entities\\Video.cs",
"RelativeToolTip": "ThumbnailServer2016\\Entities\\Video.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAATAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:30:15.044Z"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
}
]
}
]
}
]
}
@@ -0,0 +1,173 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\controllers\\thumbnailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\controllers\\thumbnailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\data\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\data\\appdbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\eracast\\app\\Http\\Controllers\\v2\\api.php||{3B902123-F8A7-4915-9F01-361F908088D0}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|D:\\eracast\\.env||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\entities\\video.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\entities\\video.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|d:\\eracast\\storage\\app\\aspx\\thumbnailserver2016\\thumbnailserver2016\\appsettings.development.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{65C2F2A5-9C93-4C4B-8C82-86044FA39891}|ThumbnailServer2016\\ThumbnailServer2016.csproj|solutionrelative:thumbnailserver2016\\appsettings.development.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 7,
"Children": [
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "appsettings.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\appsettings.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.json",
"RelativeToolTip": "ThumbnailServer2016\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAABTAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-13T23:00:26.458Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": ".env",
"DocumentMoniker": "D:\\eracast\\.env",
"RelativeDocumentMoniker": "..\\..\\..\\..\\.env",
"ToolTip": "D:\\eracast\\.env",
"RelativeToolTip": "..\\..\\..\\..\\.env",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-24T09:00:13.384Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "api.php",
"DocumentMoniker": "D:\\eracast\\app\\Http\\Controllers\\v2\\api.php",
"RelativeDocumentMoniker": "..\\..\\..\\..\\app\\Http\\Controllers\\v2\\api.php",
"ToolTip": "D:\\eracast\\app\\Http\\Controllers\\v2\\api.php",
"RelativeToolTip": "..\\..\\..\\..\\app\\Http\\Controllers\\v2\\api.php",
"ViewState": "AgIAAO8CAAAAAAAAAAAAALIBAAAdAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002338|",
"WhenOpened": "2025-02-24T08:56:55.876Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "appsettings.Development.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.Development.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\appsettings.Development.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\appsettings.Development.json",
"RelativeToolTip": "ThumbnailServer2016\\appsettings.Development.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAADAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-13T23:00:21.366Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "AppDbContext.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Data\\AppDbContext.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Data\\AppDbContext.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Data\\AppDbContext.cs",
"RelativeToolTip": "ThumbnailServer2016\\Data\\AppDbContext.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAwAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-13T22:54:46.474Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "launchSettings.json",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Properties\\launchSettings.json",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Properties\\launchSettings.json",
"RelativeToolTip": "ThumbnailServer2016\\Properties\\launchSettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-11-08T20:59:41.453Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ThumbnailController.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"RelativeToolTip": "ThumbnailServer2016\\Controllers\\ThumbnailController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:46:17.852Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Program.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Program.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Program.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Program.cs",
"RelativeToolTip": "ThumbnailServer2016\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAABYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:43:13.873Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "Video.cs",
"DocumentMoniker": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Entities\\Video.cs",
"RelativeDocumentMoniker": "ThumbnailServer2016\\Entities\\Video.cs",
"ToolTip": "D:\\eracast\\storage\\app\\aspx\\ThumbnailServer2016\\ThumbnailServer2016\\Entities\\Video.cs",
"RelativeToolTip": "ThumbnailServer2016\\Entities\\Video.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAATAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-11-08T20:30:15.044Z"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
}
]
}
]
}
]
}
+49
View File
@@ -0,0 +1,49 @@
![Logo](https://www.eracast.cc/yt/imgbin/yt-mini-logo.jpg)
# Thumbnail Server for EraCast 2016 (Deprecated)
This project was made using ASP.NET Web API and was made to generate thumbnails for EraCast 2016
## Installation
```bash
git clone https://github.com/eracast/ThumbnailServer2016.git
cd ThumbnailServer2016
dotnet restore
```
Else if deploying use command below for complied release (Not recommended)
```bash
dotnet publish -c Release -o ./publish
```
## Run Locally
CD to ThumbnailServer2016 inside root folder
```bash
cd ThumbnailServer2016
```
Build project
```bash
dotnet build
```
## Deployment
CD to ThumbnailServer2016 inside root folder
```bash
cd ThumbnailServer2016
```
To build the compiled server run the command below (Not recommended)
```bash
dotnet publish -c Release -o ./publish
```
+12
View File
@@ -0,0 +1,12 @@
[Unit]
Description=ThumbnailServer2016
[Service]
ExecStart=/usr/bin/dotnet /var/www/eracast/storage/app/aspx/ThumbnailServer2016/ThumbnailServer2016/publish/ThumbnailServer2016.dll --urls "http://localhost:5001"
Restart=always
User=www-data
Group=www-data
Environment=DOTNET_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
+25
View File
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailServer2016", "ThumbnailServer2016\ThumbnailServer2016.csproj", "{65C2F2A5-9C93-4C4B-8C82-86044FA39891}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{65C2F2A5-9C93-4C4B-8C82-86044FA39891}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{65C2F2A5-9C93-4C4B-8C82-86044FA39891}.Debug|Any CPU.Build.0 = Debug|Any CPU
{65C2F2A5-9C93-4C4B-8C82-86044FA39891}.Release|Any CPU.ActiveCfg = Release|Any CPU
{65C2F2A5-9C93-4C4B-8C82-86044FA39891}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A2280FC7-17D3-4A63-A17B-E7A911373014}
EndGlobalSection
EndGlobal
@@ -0,0 +1,145 @@
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
[ApiController]
public class ThumbnailController : ControllerBase
{
private readonly AppDbContext _dbContext;
public ThumbnailController(AppDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpGet("/get_thumbnail.aspx")]
public IActionResult GetThumbnail([FromQuery] string v)
{
if (string.IsNullOrEmpty(v) || !_dbContext.videos.Any(video => video.Rid == v))
{
return DefaultThumbnail();
}
var video = _dbContext.videos.FirstOrDefault(video => video.Rid == v);
if (video == null)
{
return DefaultThumbnail();
}
var videoPath = "/mnt/d/eracast/storage/app/videos/" + v + "/";
var thumbnailPath = videoPath + "hqdefault.jpg";
var originalThumbnailPath = videoPath + video.Thumbnail;
Response.Headers["Cache-Control"] = "public, max-age=3600";
if (System.IO.File.Exists(thumbnailPath))
{
Response.Headers["Content-Disposition"] = "inline; filename=\"hqdefault.jpg\"";
var file = File(System.IO.File.ReadAllBytes(thumbnailPath), "image/jpeg");
return file;
}
if (!System.IO.File.Exists(originalThumbnailPath))
{
Response.Headers["Content-Disposition"] = "inline; filename=\"hqdefault.jpg\"";
return DefaultThumbnail();
}
GenerateThumbnail(originalThumbnailPath, thumbnailPath);
if (System.IO.File.Exists(thumbnailPath))
{
Response.Headers["Content-Disposition"] = "inline; filename=\"hqdefault.jpg\"";
return File(System.IO.File.ReadAllBytes(thumbnailPath), "image/jpeg", "hqdefault.jpg");
}
else
{
Response.Headers["Content-Disposition"] = "inline; filename=\"hqdefault.jpg\"";
return DefaultThumbnail();
}
}
private void GenerateThumbnail(string inputPath, string outputPath)
{
var ffmpegCommand = "ffmpeg -y -i " + inputPath + " -vf \"\"scale='if(gt(a,4/3),120,-1)':'if(gt(a,4/3),-1,90)',pad=120:90:(ow-iw)/2:(oh-ih)/2+2\"\" -vframes 1 " + outputPath;
ExecuteFFmpegCommand(ffmpegCommand);
var webpOutputPath = System.IO.Path.ChangeExtension(outputPath, "webp");
var webpCommand = "ffmpeg -y -i " + inputPath + " -vf \"\"scale='if(gt(a,4/3),120,-1)':'if(gt(a,4/3),-1,90)',pad=120:90:(ow-iw)/2:(oh-ih)/2+2\"\" -vframes 1 " + webpOutputPath;
ExecuteFFmpegCommand(webpCommand);
}
private void ExecuteFFmpegCommand(string command)
{
Console.WriteLine("Executing: " + command);
/* for windows, uncomment if been hosted on windows
string shell, shellArgs;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
shell = "cmd";
shellArgs = $"/c {command}";
}
else
{
shell = "/bin/bash";
shellArgs = $"-c \"{command}\"";
}
var processInfo = new ProcessStartInfo(shell, shellArgs)
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (var process = Process.Start(processInfo))
{
if (process != null)
{
process.WaitForExit();
}
}
*/
ProcessStartInfo startInfo = new ProcessStartInfo("bash", $"-c \"{command}\"")
{
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
};
Process process = Process.Start(startInfo);
process.OutputDataReceived += (sender, e) =>
{
if (e.Data != null)
{
Console.WriteLine(e.Data);
}
};
process.ErrorDataReceived += (sender, e) =>
{
if (e.Data != null)
{
Console.WriteLine($"ERROR: {e.Data}");
}
};
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
private IActionResult DefaultThumbnail()
{
var defaultThumbnailPath = Path.Combine("/mnt/d/eracast/storage/app/thumbs/", "default.jpg");
Response.Headers["Content-Disposition"] = "inline; filename=\"hqdefault.jpg\"";
return File(System.IO.File.ReadAllBytes(defaultThumbnailPath), "image/jpeg", "hqdefault.jpg");
}
}
+15
View File
@@ -0,0 +1,15 @@
// Data/AppDbContext.cs
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<Video> videos { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Video>().HasKey(v => v.Rid);
}
}
+6
View File
@@ -0,0 +1,6 @@
// Entities/Video.cs
public class Video
{
public string Rid { get; set; } // Primary key for video (matching the column in your database)
public string Thumbnail { get; set; } // Thumbnail filename or path
}
+35
View File
@@ -0,0 +1,35 @@
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<AppDbContext>(options => options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
//builder.Services.AddDbContext<AppDbContext>(options =>
// options
// .UseMySql(connectionString, ServerVersion.AutoDetect(connectionString))
// .EnableSensitiveDataLogging() // Logs connection string
// .LogTo(Console.WriteLine));
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
@@ -0,0 +1,41 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:61648",
"sslPort": 44330
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5100",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5100",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
</ItemGroup>
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>https</ActiveDebugProfile>
</PropertyGroup>
</Project>
@@ -0,0 +1,6 @@
@ThumbnailServer2016_HostAddress = http://localhost:5100
GET {{ThumbnailServer2016_HostAddress}}/weatherforecast/
Accept: application/json
###
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+12
View File
@@ -0,0 +1,12 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"eracast": "Server=localhost;Database=eracast;User=root;Password=password;"
}
}