From f0f87f2a0450dded7b8af43ef397b398cb60a847 Mon Sep 17 00:00:00 2001
From: floppydiskette <floppydisk@hyprcat.net>
Date: Sat, 7 Dec 2024 01:11:00 +0000
Subject: rosco :3

---
 app/Http/Controllers/RoscoController.php        |  48 ++++++++
 composer.json                                   |   4 +-
 composer.lock                                   | 150 +++++++++++++++++++++++-
 config/app.php                                  |   2 +-
 public/css/master.css                           |  66 +++++++----
 public/images/rosco/filters.jpg                 | Bin 0 -> 551395 bytes
 public/images/rosco/gel-drawer.jpg              | Bin 0 -> 600658 bytes
 public/images/rosco/lxdesk.jpg                  | Bin 0 -> 764019 bytes
 public/images/rosco/projectionist.jpg           | Bin 0 -> 431758 bytes
 public/images/rosco/technician.jpeg             | Bin 0 -> 2066996 bytes
 resources/views/components/navigation.blade.php |   3 +-
 resources/views/rosco.blade.php                 |  13 ++
 routes/web.php                                  |   3 +-
 13 files changed, 261 insertions(+), 28 deletions(-)
 create mode 100644 app/Http/Controllers/RoscoController.php
 create mode 100644 public/images/rosco/filters.jpg
 create mode 100644 public/images/rosco/gel-drawer.jpg
 create mode 100644 public/images/rosco/lxdesk.jpg
 create mode 100644 public/images/rosco/projectionist.jpg
 create mode 100644 public/images/rosco/technician.jpeg
 create mode 100644 resources/views/rosco.blade.php

diff --git a/app/Http/Controllers/RoscoController.php b/app/Http/Controllers/RoscoController.php
new file mode 100644
index 0000000..9986831
--- /dev/null
+++ b/app/Http/Controllers/RoscoController.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Support\Facades\File;
+use Illuminate\View\View;
+
+class RoscoController extends Controller {
+    public function getImages(): array {
+        $images = [];
+        foreach (File::glob(public_path('images/rosco').'/*') as $path) {
+            $image_data = [];
+            try {
+                $exif = exif_read_data($path);
+            } catch (Exception $ex) {
+
+            }
+            $image_data["path"] = str_replace(public_path(), '', $path);
+            if (isset($exif)) {
+                if (isset($exif["ImageDescription"])) {
+                    $image_data["description"] = $exif["ImageDescription"];
+                }
+                if (isset($exif["DateTime"])) {
+                    $image_data["date"] = strtotime($exif["DateTime"]);
+                }
+            }
+            array_push($images, $image_data);
+        }
+
+        usort($images, function ($a, $b) {
+            $dateA = $a['date'] ?? PHP_INT_MIN;
+            $dateB = $b['date'] ?? PHP_INT_MIN;
+            return $dateB <=> $dateA;
+        });
+
+        return $images;
+    }
+
+    /**
+     * Shows the page
+     * @return View
+     */
+    public function show(): View {
+        return view('rosco', [
+            'images' => $this->getImages(),
+        ]);
+    }
+}
diff --git a/composer.json b/composer.json
index 7c71732..70d6a36 100644
--- a/composer.json
+++ b/composer.json
@@ -8,13 +8,15 @@
         "php": "^8.1",
         "gecche/laravel-multidomain": "^10.2",
         "guzzlehttp/guzzle": "^7.2",
+        "intervention/image": "^3.9",
         "laravel/framework": "^10.10",
         "laravel/tinker": "^2.8",
         "scrivo/highlight.php": "v9.18.1.10",
         "sentry/sentry-laravel": "^4.1",
         "spatie/laravel-honeypot": "^4.3",
         "spatie/laravel-html": "^3.4",
-        "ua-parser/uap-php": "^3.9.14"
+        "ua-parser/uap-php": "^3.9.14",
+        "ext-exif": "*"
     },
     "require-dev": {
         "fakerphp/faker": "^1.9.1",
diff --git a/composer.lock b/composer.lock
index 5e98536..ec949cf 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "9ebfe85d188a66c9ab775b795cc6c06c",
+    "content-hash": "9bdf6eb9bee36a39d65606daa89e30ee",
     "packages": [
         {
             "name": "brick/math",
@@ -1191,6 +1191,150 @@
             ],
             "time": "2023-12-03T19:50:20+00:00"
         },
+        {
+            "name": "intervention/gif",
+            "version": "4.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Intervention/gif.git",
+                "reference": "42c131a31b93c440ad49061b599fa218f06f93be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Intervention/gif/zipball/42c131a31b93c440ad49061b599fa218f06f93be",
+                "reference": "42c131a31b93c440ad49061b599fa218f06f93be",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1",
+                "phpunit/phpunit": "^10.0",
+                "slevomat/coding-standard": "~8.0",
+                "squizlabs/php_codesniffer": "^3.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Intervention\\Gif\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Oliver Vogel",
+                    "email": "oliver@intervention.io",
+                    "homepage": "https://intervention.io/"
+                }
+            ],
+            "description": "Native PHP GIF Encoder/Decoder",
+            "homepage": "https://github.com/intervention/gif",
+            "keywords": [
+                "animation",
+                "gd",
+                "gif",
+                "image"
+            ],
+            "support": {
+                "issues": "https://github.com/Intervention/gif/issues",
+                "source": "https://github.com/Intervention/gif/tree/4.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://paypal.me/interventionio",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
+                    "type": "github"
+                },
+                {
+                    "url": "https://ko-fi.com/interventionphp",
+                    "type": "ko_fi"
+                }
+            ],
+            "time": "2024-09-20T13:35:02+00:00"
+        },
+        {
+            "name": "intervention/image",
+            "version": "3.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Intervention/image.git",
+                "reference": "b496d1f6b9f812f96166623358dfcafb8c3b1683"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/b496d1f6b9f812f96166623358dfcafb8c3b1683",
+                "reference": "b496d1f6b9f812f96166623358dfcafb8c3b1683",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "intervention/gif": "^4.2",
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.6",
+                "phpstan/phpstan": "^1",
+                "phpunit/phpunit": "^10.0",
+                "slevomat/coding-standard": "~8.0",
+                "squizlabs/php_codesniffer": "^3.8"
+            },
+            "suggest": {
+                "ext-exif": "Recommended to be able to read EXIF data properly."
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Intervention\\Image\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Oliver Vogel",
+                    "email": "oliver@intervention.io",
+                    "homepage": "https://intervention.io/"
+                }
+            ],
+            "description": "PHP image manipulation",
+            "homepage": "https://image.intervention.io/",
+            "keywords": [
+                "gd",
+                "image",
+                "imagick",
+                "resize",
+                "thumbnail",
+                "watermark"
+            ],
+            "support": {
+                "issues": "https://github.com/Intervention/image/issues",
+                "source": "https://github.com/Intervention/image/tree/3.9.1"
+            },
+            "funding": [
+                {
+                    "url": "https://paypal.me/interventionio",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
+                    "type": "github"
+                },
+                {
+                    "url": "https://ko-fi.com/interventionphp",
+                    "type": "ko_fi"
+                }
+            ],
+            "time": "2024-10-27T10:15:54+00:00"
+        },
         {
             "name": "jean85/pretty-package-versions",
             "version": "2.0.6",
@@ -9087,12 +9231,12 @@
     ],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": [],
+    "stability-flags": {},
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
         "php": "^8.1"
     },
-    "platform-dev": [],
+    "platform-dev": {},
     "plugin-api-version": "2.6.0"
 }
diff --git a/config/app.php b/config/app.php
index 72e11a5..2e67289 100644
--- a/config/app.php
+++ b/config/app.php
@@ -5,7 +5,7 @@ use Illuminate\Support\ServiceProvider;
 
 return [
     'name' => env('APP_NAME', 'diskfloppy.me'),
-    'version' => '2024.08.30',
+    'version' => '2024.12.07',
     'env' => env('APP_ENV', 'production'),
     'debug' => (bool) env('APP_DEBUG', false),
     'url' => env('APP_URL', 'http://localhost'),
diff --git a/public/css/master.css b/public/css/master.css
index 51b6bbd..9bd583b 100644
--- a/public/css/master.css
+++ b/public/css/master.css
@@ -21,6 +21,7 @@ body {
     min-height: 100%;
     background-color: hsla(0, 0%, 0%, 0);
     padding: 10px;
+    font-family: serif;
 }
 
 /*noinspection CssUnknownTarget*/
@@ -111,6 +112,28 @@ div#content::after {
     clear: both;
 }
 
+div#footer {
+    display: grid;
+    grid-template-columns: auto 1fr;
+    grid-template-rows: 1fr;
+    grid-column-gap: 0px;
+    grid-row-gap: 0px;
+    align-items: center;
+}
+
+div#footer div:last-child {
+    text-align: right;
+}
+
+div#footer div:last-child img {
+    image-rendering: pixelated;
+    margin: 0;
+    padding: 0;
+    width: 88px;
+    height: 31px;
+}
+
+/** Wah! **/
 div.wah {
     float: right;
     border: var(--border);
@@ -138,27 +161,6 @@ div.wah img {
     width: 250px;
 }
 
-div#footer {
-    display: grid;
-    grid-template-columns: auto 1fr;
-    grid-template-rows: 1fr;
-    grid-column-gap: 0px;
-    grid-row-gap: 0px;
-    align-items: center;
-}
-
-div#footer div:last-child {
-    text-align: right;
-}
-
-div#footer div:last-child img {
-    image-rendering: pixelated;
-    margin: 0;
-    padding: 0;
-    width: 88px;
-    height: 31px;
-}
-
 /** Guestbook **/
 table.form input,
 table.form textarea,
@@ -235,3 +237,25 @@ table.music-top10 tr td:first-child {
 div.bookmark-category:first-child h2 {
     margin: 0;
 }
+
+
+/** Rosco **/
+div.rosco-gallery {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: flex-start;
+}
+
+div.rosco {
+    border: var(--border);
+    padding: 5px;
+    filter: var(--shadow-small);
+    background-color: var(--background);
+    margin: 10px;
+    height: auto;
+}
+
+div.rosco,
+div.rosco img {
+    max-width: 220px;
+}
diff --git a/public/images/rosco/filters.jpg b/public/images/rosco/filters.jpg
new file mode 100644
index 0000000..a19d958
Binary files /dev/null and b/public/images/rosco/filters.jpg differ
diff --git a/public/images/rosco/gel-drawer.jpg b/public/images/rosco/gel-drawer.jpg
new file mode 100644
index 0000000..abdcc51
Binary files /dev/null and b/public/images/rosco/gel-drawer.jpg differ
diff --git a/public/images/rosco/lxdesk.jpg b/public/images/rosco/lxdesk.jpg
new file mode 100644
index 0000000..c85da3d
Binary files /dev/null and b/public/images/rosco/lxdesk.jpg differ
diff --git a/public/images/rosco/projectionist.jpg b/public/images/rosco/projectionist.jpg
new file mode 100644
index 0000000..dcb1186
Binary files /dev/null and b/public/images/rosco/projectionist.jpg differ
diff --git a/public/images/rosco/technician.jpeg b/public/images/rosco/technician.jpeg
new file mode 100644
index 0000000..29b9e92
Binary files /dev/null and b/public/images/rosco/technician.jpeg differ
diff --git a/resources/views/components/navigation.blade.php b/resources/views/components/navigation.blade.php
index 502dd35..52d97b4 100644
--- a/resources/views/components/navigation.blade.php
+++ b/resources/views/components/navigation.blade.php
@@ -5,5 +5,6 @@
     <a href="/pub">files</a> |
     <a href="/bookmarks">bookmarks</a> |
     <a href="/guestbook">guestbook</a> |
-    <a href="/music">music</a>
+    <a href="/music">music</a> |
+    <a href="/rosco">rosco</a>
 </nav>
diff --git a/resources/views/rosco.blade.php b/resources/views/rosco.blade.php
new file mode 100644
index 0000000..c834b67
--- /dev/null
+++ b/resources/views/rosco.blade.php
@@ -0,0 +1,13 @@
+<x-layout>
+    <x-slot:title>Rosco</x-slot:title>
+    <div class="rosco-gallery">
+        @foreach($images as $image)
+            <div class="rosco">
+                <img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif>
+                @if(isset($image["description"]))
+                    <p>{{$image["description"]}}</p>
+                @endif
+            </div>
+        @endforeach
+    </div>
+</x-layout>
diff --git a/routes/web.php b/routes/web.php
index 89c3ddd..8af223c 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -5,6 +5,7 @@ use App\Http\Controllers\GuestbookController;
 use App\Http\Controllers\HomeController;
 use App\Http\Controllers\MusicController;
 use App\Http\Controllers\PrivacyController;
+use App\Http\Controllers\RoscoController;
 use Illuminate\Support\Facades\Route;
 
 /*
@@ -22,6 +23,6 @@ Route::get('/', [HomeController::class, 'show']);
 Route::get('/bookmarks', [BookmarksController::class, 'show']);
 Route::get('/guestbook', [GuestbookController::class, 'show']);
 Route::get('/music', [MusicController::class, 'show']);
-Route::get('/privacy', [PrivacyController::class, 'show']);
+Route::get('/rosco', [RoscoController::class, 'show']);
 Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
     ->middleware('rate_limit');
-- 
cgit v1.2.3-54-g00ecf