From f0ac9435c4a36f150c1d988cafe1dcf14841d513 Mon Sep 17 00:00:00 2001 From: Shane Israel Date: Thu, 30 Apr 2026 19:33:32 -0600 Subject: [PATCH 1/4] mover video player controls tint to only cover the control pane area keeping the majority of the video clear --- app/client/src/components/player/VideoJSPlayer.js | 1 + app/client/src/components/player/videoSkinOverrides.css | 4 ++++ app/client/src/index.css | 5 ----- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 app/client/src/components/player/videoSkinOverrides.css diff --git a/app/client/src/components/player/VideoJSPlayer.js b/app/client/src/components/player/VideoJSPlayer.js index 51d6e995..ddc03717 100644 --- a/app/client/src/components/player/VideoJSPlayer.js +++ b/app/client/src/components/player/VideoJSPlayer.js @@ -1,5 +1,6 @@ import React, { useEffect, useRef, useState, useMemo } from 'react' import '@videojs/react/video/skin.css' +import './videoSkinOverrides.css' import { createPlayer, useMedia, Poster } from '@videojs/react' import { Video, videoFeatures } from '@videojs/react/video' import CustomVideoSkin from './CustomVideoSkin' diff --git a/app/client/src/components/player/videoSkinOverrides.css b/app/client/src/components/player/videoSkinOverrides.css new file mode 100644 index 00000000..ca4a8971 --- /dev/null +++ b/app/client/src/components/player/videoSkinOverrides.css @@ -0,0 +1,4 @@ +/* Constrain the controls scrim to the bottom ~25% of the video instead of the full frame */ +.media-default-skin .media-overlay { + background-image: linear-gradient(to top, oklch(0 0 0 / 0.55) 0px, oklch(0 0 0 / 0.35) 40px, oklch(0 0 0 / 0) 80px); +} diff --git a/app/client/src/index.css b/app/client/src/index.css index 28ffa160..68c42268 100644 --- a/app/client/src/index.css +++ b/app/client/src/index.css @@ -78,8 +78,3 @@ code { color: rgba(0, 219, 255, 1); } } - -/* Remove the gradient/scrim overlay that darkens the video when controls appear */ -/* .media-default-skin .media-overlay { - display: none; -} */ From 0fbee9ed15346762d2bec1227ebfa073208f5218 Mon Sep 17 00:00:00 2001 From: Shane Israel Date: Fri, 1 May 2026 14:49:10 -0600 Subject: [PATCH 2/4] add guard to not allow duplicate game links --- app/server/fireshare/cli.py | 6 ++- app/server/fireshare/models.py | 1 + .../n9i0j1k2l3m4_unique_video_game_link.py | 43 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py diff --git a/app/server/fireshare/cli.py b/app/server/fireshare/cli.py index 94436def..23f24f18 100755 --- a/app/server/fireshare/cli.py +++ b/app/server/fireshare/cli.py @@ -323,8 +323,10 @@ def scan_videos(root): folder = parts[0] if folder in folder_rules: game_id = folder_rules[folder] - link = VideoGameLink(video_id=nv.video_id, game_id=game_id, created_at=datetime.utcnow()) - db.session.add(link) + existing = VideoGameLink.query.filter_by(video_id=nv.video_id, game_id=game_id).first() + if not existing: + link = VideoGameLink(video_id=nv.video_id, game_id=game_id, created_at=datetime.utcnow()) + db.session.add(link) auto_tagged.add(nv.video_id) logger.info(f"[Folder Rule] Auto-tagged {nv.video_id} to game {game_id} (folder: {folder})") if auto_tagged: diff --git a/app/server/fireshare/models.py b/app/server/fireshare/models.py index 7acb7e2a..e0af51ab 100644 --- a/app/server/fireshare/models.py +++ b/app/server/fireshare/models.py @@ -155,6 +155,7 @@ def __repr__(self): class VideoGameLink(db.Model): __tablename__ = "video_game_link" + __table_args__ = (db.UniqueConstraint("video_id", "game_id"),) id = db.Column(db.Integer, primary_key=True) video_id = db.Column(db.String(32), db.ForeignKey("video.video_id"), nullable=False) diff --git a/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py b/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py new file mode 100644 index 00000000..7a27cc72 --- /dev/null +++ b/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py @@ -0,0 +1,43 @@ +"""add unique constraint to video_game_link and remove existing duplicates + +Revision ID: n9i0j1k2l3m4 +Revises: m8h9i0j1k2l3 +Create Date: 2026-05-01 00:00:00.000000 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy import text + +revision = 'n9i0j1k2l3m4' +down_revision = 'm8h9i0j1k2l3' +branch_labels = None +depends_on = None + + +def upgrade(): + conn = op.get_bind() + + # Remove duplicate rows, keeping the lowest id for each (video_id, game_id) pair + conn.execute(text(""" + DELETE FROM video_game_link + WHERE id NOT IN ( + SELECT MIN(id) + FROM video_game_link + GROUP BY video_id, game_id + ) + """)) + + op.create_unique_constraint( + 'uq_video_game_link_video_id_game_id', + 'video_game_link', + ['video_id', 'game_id'] + ) + + +def downgrade(): + op.drop_constraint( + 'uq_video_game_link_video_id_game_id', + 'video_game_link', + type_='unique' + ) From 0fffcc4fe009a38ddda9084c877e40a06a771a93 Mon Sep 17 00:00:00 2001 From: Shane Israel Date: Fri, 1 May 2026 15:03:12 -0600 Subject: [PATCH 3/4] fix alter constraint not available in sqlite --- .../n9i0j1k2l3m4_unique_video_game_link.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py b/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py index 7a27cc72..f258923c 100644 --- a/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py +++ b/migrations/versions/n9i0j1k2l3m4_unique_video_game_link.py @@ -28,16 +28,16 @@ def upgrade(): ) """)) - op.create_unique_constraint( - 'uq_video_game_link_video_id_game_id', - 'video_game_link', - ['video_id', 'game_id'] - ) + with op.batch_alter_table('video_game_link', schema=None) as batch_op: + batch_op.create_unique_constraint( + 'uq_video_game_link_video_id_game_id', + ['video_id', 'game_id'] + ) def downgrade(): - op.drop_constraint( - 'uq_video_game_link_video_id_game_id', - 'video_game_link', - type_='unique' - ) + with op.batch_alter_table('video_game_link', schema=None) as batch_op: + batch_op.drop_constraint( + 'uq_video_game_link_video_id_game_id', + type_='unique' + ) From 7d8f02fefda6f06acf6484ba2ff5eeff2693fcfd Mon Sep 17 00:00:00 2001 From: Shane Israel Date: Sat, 2 May 2026 11:31:13 -0600 Subject: [PATCH 4/4] bump version --- app/client/package-lock.json | 2 +- app/client/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/client/package-lock.json b/app/client/package-lock.json index 53fcda53..21b3fbf2 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "fireshare", - "version": "1.6.8", + "version": "1.6.9", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/app/client/package.json b/app/client/package.json index 2445c802..3a078c27 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -1,6 +1,6 @@ { "name": "fireshare", - "version": "1.6.8", + "version": "1.6.9", "private": true, "dependencies": { "@emotion/react": "^11.9.0",