OpenRewind/openrewind/utils.py
2024-08-10 17:38:57 +08:00

149 lines
4.1 KiB
Python

import sys
def human_readable_time(timestamp):
import datetime
now = datetime.datetime.now()
dt_object = datetime.datetime.fromtimestamp(timestamp)
diff = now - dt_object
if diff.days > 0:
return f"{diff.days} days ago"
elif diff.seconds < 60:
return f"{diff.seconds} seconds ago"
elif diff.seconds < 3600:
return f"{diff.seconds // 60} minutes ago"
else:
return f"{diff.seconds // 3600} hours ago"
def timestamp_to_human_readable(timestamp):
import datetime
try:
dt_object = datetime.datetime.fromtimestamp(timestamp)
return dt_object.strftime("%Y-%m-%d %H:%M:%S")
except:
return ""
def get_active_app_name_osx():
from AppKit import NSWorkspace
try:
active_app = NSWorkspace.sharedWorkspace().activeApplication()
return active_app["NSApplicationName"]
except:
return ""
def get_active_window_title_osx():
from Quartz import (
CGWindowListCopyWindowInfo,
kCGNullWindowID,
kCGWindowListOptionOnScreenOnly,
)
try:
app_name = get_active_app_name_osx()
windows = CGWindowListCopyWindowInfo(
kCGWindowListOptionOnScreenOnly, kCGNullWindowID
)
for window in windows:
if window["kCGWindowOwnerName"] == app_name:
return window.get("kCGWindowName", "Unknown")
except:
return ""
return ""
def get_active_app_name_windows():
import psutil
import win32gui
import win32process
try:
hwnd = win32gui.GetForegroundWindow()
_, pid = win32process.GetWindowThreadProcessId(hwnd)
exe = psutil.Process(pid).name()
return exe
except:
return ""
def get_active_window_title_windows():
import win32gui
try:
hwnd = win32gui.GetForegroundWindow()
return win32gui.GetWindowText(hwnd)
except:
return ""
def get_active_app_name_linux():
return ''
def get_active_window_title_linux():
return ''
def get_active_app_name():
if sys.platform == "win32":
return get_active_app_name_windows()
elif sys.platform == "darwin":
return get_active_app_name_osx()
elif sys.platform.startswith("linux"):
return get_active_app_name_linux()
else:
raise NotImplementedError("This platform is not supported")
def get_active_window_title():
if sys.platform == "win32":
return get_active_window_title_windows()
elif sys.platform == "darwin":
return get_active_window_title_osx()
elif sys.platform.startswith("linux"):
return get_active_window_title_linux()
else:
raise NotImplementedError("This platform is not supported")
def is_user_active_osx():
import subprocess
try:
# Run the 'ioreg' command to get idle time information
output = subprocess.check_output(["ioreg", "-c", "IOHIDSystem"]).decode()
# Find the line containing "HIDIdleTime"
for line in output.split('\n'):
if "HIDIdleTime" in line:
# Extract the idle time value
idle_time = int(line.split('=')[-1].strip())
# Convert idle time from nanoseconds to seconds
idle_seconds = idle_time / 1000000000
# If idle time is less than 5 seconds, consider the user not idle
return idle_seconds < 5
# If "HIDIdleTime" is not found, assume the user is not idle
return True
except subprocess.CalledProcessError:
# If there's an error running the command, assume the user is not idle
return True
except Exception as e:
print(f"An error occurred: {e}")
# If there's any other error, assume the user is not idle
return True
def is_user_active():
if sys.platform == "win32":
return True
elif sys.platform == "darwin":
return is_user_active_osx()
elif sys.platform.startswith("linux"):
return True
else:
raise NotImplementedError("This platform is not supported")