WIP: storage-fix-local-nas work before playlist controls feature
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
1 parent
6b3ab5b65e
commit
c160242dbc
46 files changed
+5365
-815
No files matched your search
@@ -159,9 +159,8 @@ class PlaylistController extends Controller
|
||||
// Handle thumbnail upload
|
||||
if ($request->hasFile('thumbnail')) {
|
||||
$file = $request->file('thumbnail');
|
||||
$filename = self::generateFilename($file->getClientOriginalExtension());
|
||||
$file->storeAs('public/thumbnails', $filename);
|
||||
$playlist->update(['thumbnail' => $filename]);
|
||||
$nasPath = self::pushPlaylistThumbnailToNas($file, $playlist);
|
||||
$playlist->update(['thumbnail' => $nasPath]);
|
||||
}
|
||||
|
||||
// Reload playlist with thumbnail
|
||||
@@ -228,28 +227,19 @@ class PlaylistController extends Controller
|
||||
|
||||
// Handle thumbnail upload
|
||||
if ($request->hasFile('thumbnail')) {
|
||||
// Delete old thumbnail if exists
|
||||
// Delete old thumbnail from NAS if exists
|
||||
if ($playlist->thumbnail) {
|
||||
$oldPath = storage_path('app/public/thumbnails/'.$playlist->thumbnail);
|
||||
if (file_exists($oldPath)) {
|
||||
unlink($oldPath);
|
||||
}
|
||||
self::deletePlaylistThumbnailFromNas($playlist->thumbnail);
|
||||
}
|
||||
|
||||
// Upload new thumbnail
|
||||
$file = $request->file('thumbnail');
|
||||
$filename = self::generateFilename($file->getClientOriginalExtension());
|
||||
$file->storeAs('public/thumbnails', $filename);
|
||||
$updateData['thumbnail'] = $filename;
|
||||
$updateData['thumbnail'] = self::pushPlaylistThumbnailToNas($file, $playlist);
|
||||
}
|
||||
|
||||
// Handle thumbnail removal
|
||||
if ($request->input('remove_thumbnail') == '1') {
|
||||
if ($playlist->thumbnail) {
|
||||
$oldPath = storage_path('app/public/thumbnails/'.$playlist->thumbnail);
|
||||
if (file_exists($oldPath)) {
|
||||
unlink($oldPath);
|
||||
}
|
||||
self::deletePlaylistThumbnailFromNas($playlist->thumbnail);
|
||||
$updateData['thumbnail'] = null;
|
||||
}
|
||||
}
|
||||
@@ -472,4 +462,37 @@ class PlaylistController extends Controller
|
||||
|
||||
return redirect(route('videos.show', $randomVideo) . '?playlist=' . $playlist->share_token);
|
||||
}
|
||||
|
||||
// ── NAS thumbnail helpers ─────────────────────────────────────────────────
|
||||
|
||||
private static function nasPlaylistThumbPath(Playlist $playlist, string $ext): string
|
||||
{
|
||||
$nas = app(\App\Services\NasSyncService::class);
|
||||
$playlist->loadMissing('user');
|
||||
$userSlug = $nas->userSlug($playlist->user);
|
||||
return "users/{$userSlug}/playlists/{$playlist->id}/thumb.{$ext}";
|
||||
}
|
||||
|
||||
private static function pushPlaylistThumbnailToNas(\Illuminate\Http\UploadedFile $file, Playlist $playlist): string
|
||||
{
|
||||
$nas = app(\App\Services\NasSyncService::class);
|
||||
$ext = $file->getClientOriginalExtension() ?: 'jpg';
|
||||
$tmpName = self::generateFilename($ext);
|
||||
$file->storeAs('public/thumbnails', $tmpName);
|
||||
$tempAbs = storage_path('app/public/thumbnails/' . $tmpName);
|
||||
$nasPath = self::nasPlaylistThumbPath($playlist, $ext);
|
||||
$dir = dirname($nasPath);
|
||||
$nas->mkdirp($dir);
|
||||
$nas->putFile($tempAbs, $nasPath);
|
||||
@unlink($tempAbs);
|
||||
return $nasPath;
|
||||
}
|
||||
|
||||
private static function deletePlaylistThumbnailFromNas(?string $nasPath): void
|
||||
{
|
||||
if (! $nasPath || ! str_starts_with($nasPath, 'users/')) return;
|
||||
try {
|
||||
app(\App\Services\NasSyncService::class)->deleteFile($nasPath);
|
||||
} catch (\Throwable) {}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user