fix: resume from homepage not correctly handling source_id

This commit is contained in:
Trevor Mears
2026-01-22 18:23:48 -08:00
parent e83b173755
commit ac6c82e3fc
3 changed files with 15 additions and 3 deletions
+1
View File
@@ -1387,6 +1387,7 @@ class WatchPage {
await window.API.request('POST', '/history', { await window.API.request('POST', '/history', {
id: this.content.id, id: this.content.id,
type: this.content.type === 'movie' ? 'movie' : 'episode', type: this.content.type === 'movie' ? 'movie' : 'episode',
sourceId: this.content.sourceId, // Add sourceId at top level for resume
progress, progress,
duration, duration,
data data
+9
View File
@@ -122,6 +122,7 @@ function initSchema() {
CREATE TABLE IF NOT EXISTS watch_history ( CREATE TABLE IF NOT EXISTS watch_history (
id TEXT PRIMARY KEY, -- Composite key: user_id:item_id id TEXT PRIMARY KEY, -- Composite key: user_id:item_id
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
source_id INTEGER, -- Source ID for Xtream/M3U
item_type TEXT NOT NULL, -- 'movie', 'episode' item_type TEXT NOT NULL, -- 'movie', 'episode'
item_id TEXT NOT NULL, -- The original item ID (stream_id or composite) item_id TEXT NOT NULL, -- The original item ID (stream_id or composite)
parent_id TEXT, -- For episodes (series ID) parent_id TEXT, -- For episodes (series ID)
@@ -134,6 +135,14 @@ function initSchema() {
CREATE INDEX IF NOT EXISTS idx_history_user_item ON watch_history(user_id, item_id); CREATE INDEX IF NOT EXISTS idx_history_user_item ON watch_history(user_id, item_id);
`); `);
// Migration: Add source_id column if missing (for existing databases)
try {
db.exec(`ALTER TABLE watch_history ADD COLUMN source_id INTEGER`);
console.log('[SQLite] Added source_id column to watch_history');
} catch (e) {
// Column already exists, ignore
}
console.log('[SQLite] Schema initialized'); console.log('[SQLite] Schema initialized');
} }
+5 -3
View File
@@ -43,7 +43,7 @@ router.post('/', (req, res) => {
try { try {
const db = getDb(); const db = getDb();
const userId = req.user.id; const userId = req.user.id;
const { id, type, parentId, progress, duration, data } = req.body; const { id, type, parentId, progress, duration, data, sourceId } = req.body;
if (!id || !type) { if (!id || !type) {
return res.status(400).json({ error: 'Missing required fields (id, type)' }); return res.status(400).json({ error: 'Missing required fields (id, type)' });
@@ -53,9 +53,10 @@ router.post('/', (req, res) => {
const timestamp = Date.now(); const timestamp = Date.now();
const stmt = db.prepare(` const stmt = db.prepare(`
INSERT INTO watch_history (id, user_id, item_type, item_id, parent_id, progress, duration, updated_at, data) INSERT INTO watch_history (id, user_id, source_id, item_type, item_id, parent_id, progress, duration, updated_at, data)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(id) DO UPDATE SET ON CONFLICT(id) DO UPDATE SET
source_id = excluded.source_id,
progress = excluded.progress, progress = excluded.progress,
duration = excluded.duration, duration = excluded.duration,
updated_at = excluded.updated_at, updated_at = excluded.updated_at,
@@ -65,6 +66,7 @@ router.post('/', (req, res) => {
stmt.run( stmt.run(
compositeId, compositeId,
userId, userId,
sourceId || null,
type, type,
id.toString(), id.toString(),
parentId ? parentId.toString() : null, parentId ? parentId.toString() : null,