From 874af6469607b5cafd45e424d2e27d0efd66231b Mon Sep 17 00:00:00 2001 From: Oskar Haarklou Veileborg Date: Tue, 27 Jun 2023 12:13:00 +0200 Subject: [PATCH 1/5] [stub ]Add missing imports to stub file --- albert.pyi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/albert.pyi b/albert.pyi index 12845d24..3b9e4f99 100644 --- a/albert.pyi +++ b/albert.pyi @@ -41,12 +41,14 @@ md_credits: [str|List(str)] Third party credit(s) and license notes """ +from abc import abstractmethod from enum import Enum from typing import Any from typing import Callable from typing import List from typing import Optional from typing import Union +from typing import overload class Action: """Action object for items.""" From d7869690ee349cd17364930deedc80d76090a5ac Mon Sep 17 00:00:00 2001 From: Manuel Schneider Date: Sat, 8 Jul 2023 09:09:30 +0200 Subject: [PATCH 2/5] Fix wiki returning temp extension --- wikipedia/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wikipedia/__init__.py b/wikipedia/__init__.py index 58c468ce..e7ec00bd 100644 --- a/wikipedia/__init__.py +++ b/wikipedia/__init__.py @@ -43,7 +43,7 @@ class Plugin(TriggerQueryHandler): limit = 20 def extensions(self): - return [self, FallbackProvider()] + return [self, self.fb] def id(self): return md_id @@ -58,6 +58,8 @@ def defaultTrigger(self): return "wiki " def initialize(self): + self.fb = FallbackProvider() + params = { 'action': 'query', 'meta': 'siteinfo', @@ -138,4 +140,4 @@ def createFallbackItem(query_string): Action("wiki_search", "Search on Wikipedia", lambda url=Plugin.searchUrl % (Plugin.local_lang_code, query_string): openUrl(url)) ] - ) \ No newline at end of file + ) From 069f1033063ed58cfed29ae41cc27c9032eefd39 Mon Sep 17 00:00:00 2001 From: Manuel Schneider Date: Sat, 8 Jul 2023 09:09:48 +0200 Subject: [PATCH 3/5] Update stub --- albert.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/albert.pyi b/albert.pyi index 3b9e4f99..0c12fee1 100644 --- a/albert.pyi +++ b/albert.pyi @@ -36,6 +36,7 @@ md_credits: [str|List(str)] Third party credit(s) and license notes Due to the differences in type systems multiple inheritance of extensions is not supported. If the Plugin class inherits an extension it will be automatically registered. * Define an "extensions() -> List[Extension]" instance function if you want to provide multiple extensions. + Note: Do not return temporary objects. No ownership taken/refcount increased. * Define initialize() and/or finalize() instance functions if needed. Do not use the constructor, since PyBind11 imposes some inconvenient boilerplate on them. """ From 15279c8c1b35474fd8c5423c53a0357fbaa5d0cc Mon Sep 17 00:00:00 2001 From: Manuel Schneider Date: Sat, 22 Jul 2023 15:08:26 +0200 Subject: [PATCH 4/5] Proper extension ids --- dice_roll/__init__.py | 2 +- emoji/__init__.py | 2 +- goldendict/__init__.py | 2 +- unit_converter/__init__.py | 2 +- youtube/__init__.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dice_roll/__init__.py b/dice_roll/__init__.py index 944e054c..5be00b60 100644 --- a/dice_roll/__init__.py +++ b/dice_roll/__init__.py @@ -132,7 +132,7 @@ class Plugin(albert.TriggerQueryHandler): """A plugin to roll dice""" def id(self) -> str: - return __name__ + return md_id def name(self) -> str: return md_name diff --git a/emoji/__init__.py b/emoji/__init__.py index 12943ff4..0522e772 100644 --- a/emoji/__init__.py +++ b/emoji/__init__.py @@ -49,7 +49,7 @@ def schedule_create_missing_icons(emojis, icon_dir_path: Path): class Plugin(TriggerQueryHandler): def id(self): - return __name__ + return md_id def name(self): return md_name diff --git a/goldendict/__init__.py b/goldendict/__init__.py index c1bbd3db..1409cc16 100644 --- a/goldendict/__init__.py +++ b/goldendict/__init__.py @@ -14,7 +14,7 @@ class Plugin(TriggerQueryHandler): def id(self) -> str: - return __name__ + return md_id def name(self) -> str: return md_name diff --git a/unit_converter/__init__.py b/unit_converter/__init__.py index d25f547f..64797385 100644 --- a/unit_converter/__init__.py +++ b/unit_converter/__init__.py @@ -356,7 +356,7 @@ def initialize(self): self.currency_converter = CurrencyConverter() def id(self) -> str: - return __name__ + return md_id def name(self) -> str: return md_name diff --git a/youtube/__init__.py b/youtube/__init__.py index 17f5bc9e..fb578145 100644 --- a/youtube/__init__.py +++ b/youtube/__init__.py @@ -115,7 +115,7 @@ class Plugin(TriggerQueryHandler): temp_dir = None def id(self) -> str: - return __name__ + return md_id def name(self) -> str: return md_name From e3db841832ca791961c32b86d4a7367c017f1d34 Mon Sep 17 00:00:00 2001 From: Manuel Schneider Date: Sun, 23 Jul 2023 21:26:38 +0200 Subject: [PATCH 5/5] [ddg:1.0] Add inline ddg extension --- duckduckgo/__init__.py | 61 ++++++++++++++++++++ duckduckgo/duckduckgo.svg | 118 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 duckduckgo/__init__.py create mode 100644 duckduckgo/duckduckgo.svg diff --git a/duckduckgo/__init__.py b/duckduckgo/__init__.py new file mode 100644 index 00000000..9a9627dc --- /dev/null +++ b/duckduckgo/__init__.py @@ -0,0 +1,61 @@ +""" +Inline DuckDuckGo web search using the 'duckduckgo-search' library. +""" + +from subprocess import run +from albert import * +from pathlib import Path +from duckduckgo_search import DDGS +from itertools import islice +from time import sleep + +md_iid = '1.0' +md_version = '1.0' +md_name = 'DuckDuckGo' +md_description = 'Inline DuckDuckGo web search' +md_url = 'https://github.com/albertlauncher/python/duckduckgo' +md_lib_dependencies = "duckduckgo-search" + + +class Plugin(TriggerQueryHandler): + iconUrl = f"file:{Path(__file__).parent}/duckduckgo.svg" + + def initialize(self): + self.ddg = DDGS() + + def id(self): + return md_id + + def name(self): + return md_name + + def description(self): + return md_description + + def synopsis(self): + return "" + + def defaultTrigger(self): + return 'ddg ' + + def handleTriggerQuery(self, query): + + stripped = query.string.strip() + if stripped: + + # dont flood + for number in range(25): + sleep(0.01) + if not query.isValid: + return + + for r in islice(self.ddg.text(stripped, safesearch='off'), 10): + query.add( + Item( + id=md_id, + text=r['title'], + subtext=r['body'], + icon=[Plugin.iconUrl], + actions=[Action("open", "Open link", lambda u=r['href']: openUrl(u))] + ) + ) diff --git a/duckduckgo/duckduckgo.svg b/duckduckgo/duckduckgo.svg new file mode 100644 index 00000000..87f27951 --- /dev/null +++ b/duckduckgo/duckduckgo.svg @@ -0,0 +1,118 @@ + +