Added external_view_count so provider totals from YouTube/Vimeo/etc are
added to the site’s total without double-counting local plays.
Updated public totals and per-video public view displays to use site
views + external views.
Changed Upkeeping action to Correct external view counts with a Correct
Views button.
Expanded provider scraping beyond YouTube with generic
page/JSON-LD/oEmbed patterns for readable Vimeo, Dailymotion, and
similar pages.
Improved Add Video:Title no longer has to be manually entered first.
External URL rows now have Fetch Info.
Metadata can fill title, description, duration, source label, and
external view count.
Save also retries metadata extraction server-side.
Added authenticated metadata endpoint:
[admin/media_info.php](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/media_info.php).
Updated docs in
[README.md](/Users/tyemeclifford/Documents/GH/mediaplayer/README.md).
Added view_count database migration/defaults and shared helpers in
[includes/db.php](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php).
Public player and embed.php now increment views.
Homepage and catalogue can display per-video views, total views, and
public stats based on admin settings.
Added Admin → Settings toggles for public view/stat display.
Added Admin → Upkeeping action to restore external view counts from
readable provider pages, with YouTube scraping support first.
Added manual per-video view-count editing in
[admin/edit.php](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/edit.php)
for older local uploads or corrections.
Updated
[README.md](/Users/tyemeclifford/Documents/GH/mediaplayer/README.md)
with the new behavior.
The bug was relative media paths like media/thumbs/... resolving under
routes such as /v/<slug>?page=2 or /search/<query>?page=2. I added
public_media_url() in
[includes/db.php](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php)
and updated public thumbnails, posters, and local player sources in
[index.php](/Users/tyemeclifford/Documents/GH/mediaplayer/index.php),
[catalogue.php](/Users/tyemeclifford/Documents/GH/mediaplayer/catalogue.php),
and [embed.php](/Users/tyemeclifford/Documents/GH/mediaplayer/embed.php)
to use root/base-aware URLs.
What changed:
Added pretty URL helpers/default setting in
[includes/db.php](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php).
Added root rewrite rules in
[.htaccess](/Users/tyemeclifford/Documents/GH/mediaplayer/.htaccess):/v/<slug>
/all
/search/<query>
Added Admin → Settings “Public URL Style” toggle in
[admin/settings.php](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/settings.php),
defaulting to pretty URLs.
Updated public/player/catalogue/embed/admin preview links to use the
configured URL style.
Added redirects from legacy ?v= and ?q= URLs to pretty routes when
rewriting is enabled.
Documented deployment and fallback behavior in
[README.md](/Users/tyemeclifford/Documents/GH/mediaplayer/README.md).
Changed:
[includes/db.php (line
43)](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php:43)
adds source_type and source_url, with an automatic migration for
existing SQLite databases.
[admin/add.php (line
260)](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/add.php:260)
and [admin/edit.php (line
383)](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/edit.php:383)
now let each source be an upload or an external URL.
[index.php (line
226)](/Users/tyemeclifford/Documents/GH/mediaplayer/index.php:226) and
[embed.php (line
193)](/Users/tyemeclifford/Documents/GH/mediaplayer/embed.php:193)
resolve playback URLs based on where the source lives.
[catalogue.php (line
79)](/Users/tyemeclifford/Documents/GH/mediaplayer/catalogue.php:79) now
has public search for published videos only.
[README.md (line
63)](/Users/tyemeclifford/Documents/GH/mediaplayer/README.md:63)
documents local vs remote sources and public search.