Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 36 additions & 3 deletions openadapt/db/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@

from loguru import logger
from sqlalchemy.orm import Session as SaSession
from sqlalchemy.orm import joinedload, subqueryload
import psutil
import sqlalchemy as sa


from openadapt import utils
from openadapt.config import DATABASE_LOCK_FILE_PATH, config
from openadapt.db.db import Session, get_read_only_session_maker
Expand Down Expand Up @@ -391,7 +393,19 @@ def get_action_events(
list[ActionEvent]: A list of action events for the recording.
"""
assert recording, "Invalid recording."
action_events = _get(session, ActionEvent, recording.id)
action_events = (
session.query(ActionEvent)
.filter(ActionEvent.recording_id == recording.id)
.options(
joinedload(ActionEvent.recording),
joinedload(ActionEvent.screenshot),
subqueryload(ActionEvent.window_event).joinedload(
WindowEvent.action_events
),
)
.order_by(ActionEvent.timestamp)
.all()
)
action_events = filter_disabled_action_events(action_events)
# filter out stop sequences listed in STOP_SEQUENCES and Ctrl + C
filter_stop_sequences(action_events)
Expand Down Expand Up @@ -530,7 +544,17 @@ def get_screenshots(
Returns:
list[Screenshot]: A list of screenshots for the recording.
"""
screenshots = _get(session, Screenshot, recording.id)
screenshots = (
session.query(Screenshot)
.filter(Screenshot.recording_id == recording.id)
.options(
joinedload(Screenshot.action_event).joinedload(ActionEvent.recording),
subqueryload(Screenshot.action_event).joinedload(ActionEvent.screenshot),
subqueryload(Screenshot.recording),
)
.order_by(Screenshot.timestamp)
.all()
)

for prev, cur in zip(screenshots, screenshots[1:]):
cur.prev = prev
Expand All @@ -555,7 +579,16 @@ def get_window_events(
Returns:
list[WindowEvent]: A list of window events for the recording.
"""
return _get(session, WindowEvent, recording.id)
return (
session.query(WindowEvent)
.filter(WindowEvent.recording_id == recording.id)
.options(
joinedload(WindowEvent.recording),
subqueryload(WindowEvent.action_events).joinedload(ActionEvent.screenshot),
)
.order_by(WindowEvent.timestamp)
.all()
)


def disable_action_event(session: SaSession, event_id: int) -> None:
Expand Down
2 changes: 1 addition & 1 deletion openadapt/window/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def get_active_window_data(
"""
state = get_active_window_state(include_window_data)
if not state:
return None
return {}
title = state["title"]
left = state["left"]
top = state["top"]
Expand Down