archive
This commit is contained in:
182 files changed
+18062
-277
No files matched your search
@@ -0,0 +1,73 @@
|
||||
import urllib.parse
|
||||
|
||||
from fabric.utils import exec_shell_command_async
|
||||
|
||||
from modules.launcher.base import LauncherPlugin
|
||||
|
||||
|
||||
class QueryPlugin(LauncherPlugin):
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return "query"
|
||||
|
||||
@property
|
||||
def icon(self) -> str:
|
||||
# Dynamic icon based on active keyword would be better, but for now return a default
|
||||
# The main launcher handles icon updates for now based on keyword match
|
||||
return "system-search-symbolic"
|
||||
|
||||
@property
|
||||
def keywords(self) -> list[str]:
|
||||
return ["gg", "yt", "lk"]
|
||||
|
||||
@property
|
||||
def full_viewport_clear(self) -> bool:
|
||||
return True
|
||||
|
||||
def stop(self):
|
||||
# No cleanup needed for query plugin
|
||||
pass
|
||||
|
||||
def on_search(self, text: str) -> None:
|
||||
# The actual execution happens on Enter (on_entry_accept in main.py)
|
||||
# But we can also implement live search results here if we wanted to.
|
||||
# For now, we just acknowledge the search to keep the UI responsive
|
||||
pass
|
||||
|
||||
def query_google(self, text: str) -> None:
|
||||
pass
|
||||
|
||||
def query_link(self, link: str) -> None:
|
||||
pass
|
||||
|
||||
def query_youtube(self, text: str) -> None:
|
||||
pass
|
||||
|
||||
def on_submit(self, text: str) -> None:
|
||||
if text.startswith("gg "):
|
||||
self.handle_google_search(text[2:].strip())
|
||||
elif text.startswith("yt "):
|
||||
self.handle_youtube_search(text[3:].strip())
|
||||
elif text.startswith("lk "):
|
||||
self.handle_link_open(text.split(" ", 1)[1].strip())
|
||||
|
||||
def handle_google_search(self, query: str) -> None:
|
||||
"""Handle Google search - opens browser immediately"""
|
||||
self.handler.launched()
|
||||
return exec_shell_command_async( # pyright: ignore[reportReturnType]
|
||||
f"xdg-open https://www.google.com/search?q={urllib.parse.quote(query)}"
|
||||
)
|
||||
|
||||
def handle_link_open(self, link: str) -> None:
|
||||
"""Handle link opening - opens browser immediately"""
|
||||
self.handler.launched()
|
||||
return exec_shell_command_async( # pyright: ignore[reportReturnType]
|
||||
f"xdg-open {('https://' + link) if not link.startswith('http') else link}"
|
||||
)
|
||||
|
||||
def handle_youtube_search(self, query: str) -> None:
|
||||
"""Handle YouTube search - opens browser immediately"""
|
||||
self.handler.launched()
|
||||
return exec_shell_command_async( # pyright: ignore[reportReturnType]
|
||||
f"xdg-open https://www.youtube.com/results?search_query={urllib.parse.quote(query)}"
|
||||
)
|
||||
Reference in new issue
Block a user