Files
axis_timelapse-webapp/database.py
T
2026-08-30 04:34:16 +00:00

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()