From 11b3e79234747f51dcbb161baa113c9f6132c254 Mon Sep 17 00:00:00 2001 From: 0xMRTT <0xMRTT@proton.me> Date: Mon, 1 May 2023 11:22:43 +0200 Subject: [PATCH] provider: add about to openai --- src/main.py | 3 +-- src/preferences.py | 2 +- src/provider/base.py | 24 +++++++++++++++++++++--- src/provider/openai.py | 20 ++++++++++++++++---- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/main.py b/src/main.py index 6c16894..14cf182 100644 --- a/src/main.py +++ b/src/main.py @@ -39,7 +39,6 @@ from tempfile import NamedTemporaryFile from .provider import PROVIDERS - class BavarderApplication(Adw.Application): """The main application singleton class.""" @@ -153,7 +152,7 @@ class BavarderApplication(Adw.Application): ) about.add_acknowledgement_section( - _("Special thanks to"), + "Special thanks to", [ "Telegraph https://apps.gnome.org/app/io.github.fkinoshita.Telegraph", ], diff --git a/src/preferences.py b/src/preferences.py index 086157a..c362a68 100644 --- a/src/preferences.py +++ b/src/preferences.py @@ -34,6 +34,6 @@ class Preferences(Adw.PreferencesWindow): def setup_providers(self): for provider in self.app.providers.values(): try: - self.provider_group.add(provider.preferences()) + self.provider_group.add(provider.preferences(self)) except TypeError: # no prefs pass diff --git a/src/provider/base.py b/src/provider/base.py index da0990a..fdfdccf 100644 --- a/src/provider/base.py +++ b/src/provider/base.py @@ -1,5 +1,7 @@ from gettext import gettext as _ +from gi.repository import Gtk, Adw + class BavarderProvider: name = None slug = None @@ -47,11 +49,27 @@ class BavarderProvider: def hide_banner(self): self.win.banner.set_revealed(False) - def about(self): + def about(self, *args): raise NotImplementedError() - def no_preferences(self): - pass + def no_preferences(self, win): + self.pref_win = win + + self.expander = Adw.ExpanderRow() + self.expander.props.title = self.name + + about_button = Gtk.Button() + about_button.set_label("About") + about_button.connect("clicked", self.about) + about_button.set_valign(Gtk.Align.CENTER) + self.expander.add_action(about_button) # TODO: in Adw 1.4, use add_suffix + + + self.no_pref_row = Adw.ActionRow() + self.no_pref_row.props.title = "No preferences available" + self.expander.add_row(self.no_pref_row) + + return self.expander def save(self): raise NotImplementedError() diff --git a/src/provider/openai.py b/src/provider/openai.py index ed31281..dad6725 100644 --- a/src/provider/openai.py +++ b/src/provider/openai.py @@ -10,10 +10,12 @@ class BaseOpenAIProvider(BavarderProvider): name = None slug = None model = None + version = "0.1.0" def __init__(self, win, app, *args, **kwargs): super().__init__(win, app, *args, **kwargs) self.chat = openai.ChatCompletion + self.pref_win = None def ask(self, prompt): try: @@ -41,10 +43,19 @@ class BaseOpenAIProvider(BavarderProvider): def require_api_key(self): return True - def preferences(self): + def preferences(self, win): + self.pref_win = win + self.expander = Adw.ExpanderRow() self.expander.props.title = self.name + about_button = Gtk.Button() + about_button.set_label("About") + about_button.connect("clicked", self.about) + about_button.set_valign(Gtk.Align.CENTER) + self.expander.add_action(about_button) # TODO: in Adw 1.4, use add_suffix + + self.api_row = Adw.PasswordEntryRow() self.api_row.connect("apply", self.on_apply) self.api_row.props.title = "API Key" @@ -59,16 +70,17 @@ class BaseOpenAIProvider(BavarderProvider): print(api_key) openai.api_key = api_key - def about(self): + def about(self, *args): about = Adw.AboutWindow( - transient_for=self.props.active_window, + transient_for=self.pref_win, application_name=self.name, developer_name="OpenAI", developers=["0xMRTT https://github.com/0xMRTT"], license_type=Gtk.License.GPL_3_0, - version=version, + version=self.version, copyright="© 2023 0xMRTT", ) + about.present() def save(self): return {"api_key": openai.api_key}