143 lines
3.8 KiB
Python
143 lines
3.8 KiB
Python
import sqlite3
|
|
from datetime import datetime
|
|
|
|
DATABASE = 'axis_timelapse.db'
|
|
|
|
|
|
def get_connection():
|
|
conn = sqlite3.connect(DATABASE)
|
|
conn.row_factory = sqlite3.Row
|
|
return conn
|
|
|
|
|
|
def init_db():
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
|
|
# Cameras table
|
|
cursor.execute('''
|
|
CREATE TABLE IF NOT EXISTS cameras (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
ip TEXT NOT NULL,
|
|
port INTEGER DEFAULT 80,
|
|
username TEXT NOT NULL,
|
|
password TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
''')
|
|
|
|
# Recordings table
|
|
cursor.execute('''
|
|
CREATE TABLE IF NOT EXISTS recordings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
camera_id INTEGER NOT NULL,
|
|
recording_id TEXT,
|
|
duration_minutes INTEGER,
|
|
scheduled_stop TIMESTAMP,
|
|
actual_stop TIMESTAMP,
|
|
status TEXT DEFAULT 'recording',
|
|
file_path TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (camera_id) REFERENCES cameras (id)
|
|
)
|
|
''')
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def add_camera(name, ip, port, username, password):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
'INSERT INTO cameras (name, ip, port, username, password) VALUES (?, ?, ?, ?, ?)',
|
|
(name, ip, port, username, password)
|
|
)
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def get_cameras():
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('SELECT * FROM cameras ORDER BY id DESC')
|
|
cameras = [dict(row) for row in cursor.fetchall()]
|
|
conn.close()
|
|
return cameras
|
|
|
|
|
|
def get_camera_by_id(camera_id):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('SELECT * FROM cameras WHERE id = ?', (camera_id,))
|
|
camera = cursor.fetchone()
|
|
conn.close()
|
|
return dict(camera) if camera else None
|
|
|
|
|
|
def delete_camera(camera_id):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('DELETE FROM cameras WHERE id = ?', (camera_id,))
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def add_recording(camera_id, recording_id, duration_minutes, scheduled_stop):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
'''INSERT INTO recordings (camera_id, recording_id, duration_minutes, scheduled_stop, status)
|
|
VALUES (?, ?, ?, ?, 'recording')''',
|
|
(camera_id, recording_id, duration_minutes, scheduled_stop)
|
|
)
|
|
recording_id = cursor.lastrowid
|
|
conn.commit()
|
|
conn.close()
|
|
return recording_id
|
|
|
|
|
|
def get_recordings():
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('''
|
|
SELECT r.*, c.name as camera_name, c.ip as camera_ip
|
|
FROM recordings r
|
|
JOIN cameras c ON r.camera_id = c.id
|
|
ORDER BY r.created_at DESC
|
|
''')
|
|
recordings = [dict(row) for row in cursor.fetchall()]
|
|
conn.close()
|
|
return recordings
|
|
|
|
|
|
def get_recording_by_id(recording_id):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('SELECT * FROM recordings WHERE id = ?', (recording_id,))
|
|
recording = cursor.fetchone()
|
|
conn.close()
|
|
return dict(recording) if recording else None
|
|
|
|
|
|
def update_recording_status(recording_id, status, file_path=None):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
'''UPDATE recordings
|
|
SET status = ?, actual_stop = CURRENT_TIMESTAMP, file_path = ?
|
|
WHERE id = ?''',
|
|
(status, file_path, recording_id)
|
|
)
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def delete_recording(recording_id):
|
|
conn = get_connection()
|
|
cursor = conn.cursor()
|
|
cursor.execute('DELETE FROM recordings WHERE id = ?', (recording_id,))
|
|
conn.commit()
|
|
conn.close()
|