60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import json
|
|
import os
|
|
import uuid
|
|
from datetime import datetime
|
|
from platform import uname
|
|
|
|
from screeninfo import get_monitors
|
|
|
|
|
|
class MetadataManager:
|
|
"""
|
|
Handles various system metadata collection.
|
|
"""
|
|
|
|
def __init__(self, recording_path: str, natural_scrolling: bool):
|
|
self.recording_path = recording_path
|
|
|
|
self.metadata = uname()._asdict()
|
|
|
|
self.metadata["id"] = uuid.getnode()
|
|
|
|
main_monitor = get_monitors()[0]
|
|
self.metadata["screen_width"] = main_monitor.width
|
|
self.metadata["screen_height"] = main_monitor.height
|
|
|
|
try:
|
|
match self.metadata["system"]:
|
|
case "Windows":
|
|
import wmi
|
|
for item in wmi.WMI().Win32_ComputerSystem():
|
|
self.metadata["model"] = item.Model
|
|
break
|
|
case "Darwin":
|
|
import subprocess
|
|
model = subprocess.check_output(["sysctl", "-n", "hw.model"]).decode().strip()
|
|
self.metadata["model"] = model
|
|
case "Linux":
|
|
with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
|
|
self.metadata["model"] = f.read().strip()
|
|
except:
|
|
self.metadata["model"] = "Unknown"
|
|
|
|
self.metadata["scroll_direction"] = -1 if natural_scrolling else 1
|
|
|
|
def save_metadata(self):
|
|
metadata_path = os.path.join(self.recording_path, "metadata.json")
|
|
with open(metadata_path, "w") as f:
|
|
json.dump(self.metadata, f, indent=4)
|
|
|
|
def collect(self):
|
|
self.metadata["start_time"] = self._get_time_stamp()
|
|
|
|
def end_collect(self):
|
|
self.metadata["stop_time"] = self._get_time_stamp()
|
|
|
|
def add_obs_record_state_timings(self, record_state_events: dict[str, float]):
|
|
self.metadata["obs_record_state_timings"] = record_state_events
|
|
|
|
def _get_time_stamp(self):
|
|
return datetime.now().strftime("%Y-%m-%d %H:%M:%S") |