Files
Modus/modules/launcher/plugins/screencapture.py
T

129 lines
4.6 KiB
Python

"""
Screencapture plugin for the launcher.
Provides screenshot and screen recording functionality.
"""
from typing import List
from modules.launcher.plugin_base import PluginBase
from modules.launcher.result import Result
from services.screencapture import ScreenCapture
from utils.icons import screenrecord, screenshots, ssfull, ssregion, stop
class ScreencapturePlugin(PluginBase):
"""
Plugin for taking screenshots and screen recordings.
"""
def __init__(self):
super().__init__()
self.display_name = "Screencapture"
self.description = "Take screenshots and screen recordings"
self.screencapture = ScreenCapture()
def initialize(self):
"""Initialize the screencapture plugin."""
self.set_triggers(["sc", "sc "])
def cleanup(self):
"""Cleanup the screencapture plugin."""
pass
def query(self, query_string: str) -> List[Result]:
"""Search for screencapture actions based on query."""
# Remove the trigger word from the query
query = query_string.replace("screencapture", "").strip().lower()
results = []
# If recording is active, show stop button first
if self.screencapture.is_recording:
results.append(
Result(
title="Stop Recording",
subtitle="Stop the current screen recording",
icon_markup=stop,
action=self.screencapture.screencast_stop,
relevance=1.0,
plugin_name=self.display_name,
)
)
return results
# Screenshot actions
results.extend(
[
Result(
title="Take Screenshot",
subtitle="Capture the entire screen",
icon_markup=ssfull,
action=lambda: self.screencapture.screenshot(fullscreen=True),
relevance=1.0,
plugin_name=self.display_name,
),
Result(
title="Take Region Screenshot",
subtitle="Capture a selected region",
icon_markup=ssregion,
action=lambda: self.screencapture.screenshot(fullscreen=False),
relevance=0.9,
plugin_name=self.display_name,
),
Result(
title="Take Screenshot (Clipboard Only)",
subtitle="Capture and copy to clipboard",
icon_markup=screenshots,
action=lambda: self.screencapture.screenshot(save_copy=False),
relevance=0.8,
plugin_name=self.display_name,
),
]
)
# Screen recording actions
results.extend(
[
Result(
title="Start Fullscreen Recording",
subtitle="Record the entire screen",
icon_markup=screenrecord,
action=lambda: self.screencapture.screencast_start(fullscreen=True),
relevance=0.7,
plugin_name=self.display_name,
),
Result(
title="Start Region Recording",
subtitle="Record a selected region",
icon_markup=screenrecord,
action=lambda: self.screencapture.screencast_start(
fullscreen=False
),
relevance=0.6,
plugin_name=self.display_name,
),
Result(
title="Start Fullscreen Recording with Audio",
subtitle="Record entire screen with system audio",
icon_markup=screenrecord,
action=lambda: self.screencapture.screencast_start(
fullscreen=True, audio=True
),
relevance=0.5,
plugin_name=self.display_name,
),
Result(
title="Start Region Recording with Audio",
subtitle="Record selected region with system audio",
icon_markup=screenrecord,
action=lambda: self.screencapture.screencast_start(
fullscreen=False, audio=True
),
relevance=0.4,
plugin_name=self.display_name,
),
]
)
return results