Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
-
e726baf5
by wurstsalat at 2022-12-09T23:06:57+01:00
-
d409b47b
by wurstsalat at 2022-12-09T23:34:18+01:00
-
60cf91b8
by wurstsalat at 2022-12-09T23:36:17+01:00
16 changed files:
- gajim/gtk/add_contact.py
- gajim/gtk/assistant.py
- gajim/gtk/change_password.py
- gajim/gtk/component_search.py
- gajim/gtk/history_export.py
- gajim/gtk/history_sync.py
- gajim/gtk/remove_account.py
- + test/gtk/__init__.py
- test/gtk/assistant.py
- test/gtk/certificate_dialog.py
- test/gtk/change_password.py
- test/gtk/dataform.py
- test/gtk/fake_dataform.py
- test/gtk/groupchat_info.py
- test/gtk/ssl_error_dialog.py
- test/no_gui/__init__.py
Changes:
| ... | ... | @@ -40,7 +40,6 @@ |
| 40 | 40 | from .assistant import Assistant
|
| 41 | 41 | from .assistant import Page
|
| 42 | 42 | from .assistant import ErrorPage
|
| 43 | -from .assistant import ProgressPage
|
|
| 44 | 43 | from .groupchat_info import GroupChatInfoScrolled
|
| 45 | 44 | from .builder import get_builder
|
| 46 | 45 | from .util import open_window
|
| ... | ... | @@ -76,7 +75,7 @@ def __init__(self, |
| 76 | 75 | 'gateway': Gateway(),
|
| 77 | 76 | })
|
| 78 | 77 | |
| 79 | - progress = cast(ProgressPage, self.add_default_page('progress'))
|
|
| 78 | + progress = self.add_default_page('progress')
|
|
| 80 | 79 | progress.set_title(_('Gathering information…'))
|
| 81 | 80 | progress.set_text(_('Trying to gather information on this address…'))
|
| 82 | 81 |
| ... | ... | @@ -16,8 +16,10 @@ |
| 16 | 16 | |
| 17 | 17 | from typing import Any
|
| 18 | 18 | from typing import Callable
|
| 19 | -from typing import Optional
|
|
| 20 | 19 | from typing import cast
|
| 20 | +from typing import Literal
|
|
| 21 | +from typing import Optional
|
|
| 22 | +from typing import overload
|
|
| 21 | 23 | |
| 22 | 24 | from gi.repository import Gdk
|
| 23 | 25 | from gi.repository import Gtk
|
| ... | ... | @@ -149,6 +151,15 @@ def add_pages(self, pages: dict[str, Page]): |
| 149 | 151 | widget.connect('update-page-complete', self._update_page_complete)
|
| 150 | 152 | self._ui.stack.add_named(widget, name)
|
| 151 | 153 | |
| 154 | + @overload
|
|
| 155 | + def add_default_page(self, name: Literal['success']) -> SuccessPage: ...
|
|
| 156 | + |
|
| 157 | + @overload
|
|
| 158 | + def add_default_page(self, name: Literal['error']) -> ErrorPage: ...
|
|
| 159 | + |
|
| 160 | + @overload
|
|
| 161 | + def add_default_page(self, name: Literal['progress']) -> ProgressPage: ...
|
|
| 162 | + |
|
| 152 | 163 | def add_default_page(self, name: str) -> Page:
|
| 153 | 164 | if name == 'success':
|
| 154 | 165 | page = SuccessPage()
|
| ... | ... | @@ -12,8 +12,12 @@ |
| 12 | 12 | # You should have received a copy of the GNU General Public License
|
| 13 | 13 | # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
| 14 | 14 | |
| 15 | +from __future__ import annotations
|
|
| 16 | + |
|
| 15 | 17 | from typing import Any
|
| 16 | 18 | from typing import cast
|
| 19 | +from typing import Literal
|
|
| 20 | +from typing import overload
|
|
| 17 | 21 | |
| 18 | 22 | import logging
|
| 19 | 23 | |
| ... | ... | @@ -32,7 +36,6 @@ |
| 32 | 36 | from .assistant import Assistant
|
| 33 | 37 | from .assistant import Page
|
| 34 | 38 | from .assistant import ErrorPage
|
| 35 | -from .assistant import ProgressPage
|
|
| 36 | 39 | from .assistant import SuccessPage
|
| 37 | 40 | from .dataform import DataFormWidget
|
| 38 | 41 | from .util import ensure_not_destroyed
|
| ... | ... | @@ -58,7 +61,7 @@ def __init__(self, account: str) -> None: |
| 58 | 61 | 'error': Error(),
|
| 59 | 62 | 'success': Success()})
|
| 60 | 63 | |
| 61 | - progress = cast(ProgressPage, self.add_default_page('progress'))
|
|
| 64 | + progress = self.add_default_page('progress')
|
|
| 62 | 65 | progress.set_title(_('Changing Password...'))
|
| 63 | 66 | progress.set_text(_('Trying to change password...'))
|
| 64 | 67 | |
| ... | ... | @@ -67,6 +70,21 @@ def __init__(self, account: str) -> None: |
| 67 | 70 | |
| 68 | 71 | self.show_all()
|
| 69 | 72 | |
| 73 | + @overload
|
|
| 74 | + def get_page(self, name: Literal['password']) -> EnterPassword: ...
|
|
| 75 | + |
|
| 76 | + @overload
|
|
| 77 | + def get_page(self, name: Literal['next_stage']) -> NextStage: ...
|
|
| 78 | + |
|
| 79 | + @overload
|
|
| 80 | + def get_page(self, name: Literal['error']) -> Error: ...
|
|
| 81 | + |
|
| 82 | + @overload
|
|
| 83 | + def get_page(self, name: Literal['success']) -> Success: ...
|
|
| 84 | + |
|
| 85 | + def get_page(self, name: str) -> Page:
|
|
| 86 | + return self._pages[name]
|
|
| 87 | + |
|
| 70 | 88 | def _on_button_clicked(self,
|
| 71 | 89 | _assistant: Assistant,
|
| 72 | 90 | button_name: str
|
| ... | ... | @@ -84,13 +102,11 @@ def _on_button_clicked(self, |
| 84 | 102 | |
| 85 | 103 | def _on_apply(self, next_stage: bool = False) -> None:
|
| 86 | 104 | if next_stage:
|
| 87 | - next_stage_page = cast(NextStage, self.get_page('next_stage'))
|
|
| 88 | - form = next_stage_page.get_submit_form()
|
|
| 105 | + form = self.get_page('next_stage').get_submit_form()
|
|
| 89 | 106 | self._client.get_module('Register').change_password_with_form(
|
| 90 | 107 | form, callback=self._on_change_password)
|
| 91 | 108 | else:
|
| 92 | - password_page = cast(EnterPassword, self.get_page('password'))
|
|
| 93 | - password = password_page.get_password()
|
|
| 109 | + password = self.get_page('password').get_password()
|
|
| 94 | 110 | self._client.get_module('Register').change_password(
|
| 95 | 111 | password, callback=self._on_change_password)
|
| 96 | 112 | |
| ... | ... | @@ -99,20 +115,17 @@ def _on_change_password(self, task: Task) -> None: |
| 99 | 115 | try:
|
| 100 | 116 | task.finish()
|
| 101 | 117 | except ChangePasswordStanzaError as error:
|
| 102 | - next_stage_page = cast(NextStage, self.get_page('next_stage'))
|
|
| 103 | 118 | form = cast(SimpleDataForm, error.get_form())
|
| 104 | - next_stage_page.set_form(form)
|
|
| 119 | + self.get_page('next_stage').set_form(form)
|
|
| 105 | 120 | self.show_page('next_stage', Gtk.StackTransitionType.SLIDE_LEFT)
|
| 106 | 121 | |
| 107 | 122 | except StanzaError as error:
|
| 108 | 123 | error_text = to_user_string(error)
|
| 109 | - error_page = cast(Error, self.get_page('error'))
|
|
| 110 | - error_page.set_text(error_text)
|
|
| 124 | + self.get_page('error').set_text(error_text)
|
|
| 111 | 125 | self.show_page('error', Gtk.StackTransitionType.SLIDE_LEFT)
|
| 112 | 126 | |
| 113 | 127 | else:
|
| 114 | - password_page = cast(EnterPassword, self.get_page('password'))
|
|
| 115 | - password = password_page.get_password()
|
|
| 128 | + password = self.get_page('password').get_password()
|
|
| 116 | 129 | passwords.save_password(self.account, password)
|
| 117 | 130 | self.show_page('success')
|
| 118 | 131 |
| ... | ... | @@ -14,9 +14,13 @@ |
| 14 | 14 | # You should have received a copy of the GNU General Public License
|
| 15 | 15 | # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
| 16 | 16 | |
| 17 | +from __future__ import annotations
|
|
| 18 | + |
|
| 17 | 19 | from typing import cast
|
| 18 | 20 | from typing import Any
|
| 21 | +from typing import Literal
|
|
| 19 | 22 | from typing import Optional
|
| 23 | +from typing import overload
|
|
| 20 | 24 | from typing import Union
|
| 21 | 25 | |
| 22 | 26 | import logging
|
| ... | ... | @@ -75,7 +79,7 @@ def __init__(self, |
| 75 | 79 | 'error': Error()
|
| 76 | 80 | })
|
| 77 | 81 | |
| 78 | - progress = cast(ProgressPage, self.add_default_page('progress'))
|
|
| 82 | + progress = self.add_default_page('progress')
|
|
| 79 | 83 | progress.set_title(_('Searching'))
|
| 80 | 84 | progress.set_text(_('Searching…'))
|
| 81 | 85 | |
| ... | ... | @@ -91,13 +95,28 @@ def __init__(self, |
| 91 | 95 | |
| 92 | 96 | self.show_all()
|
| 93 | 97 | |
| 98 | + @overload
|
|
| 99 | + def get_page(self, name: Literal['prepare']) -> RequestForm: ...
|
|
| 100 | + |
|
| 101 | + @overload
|
|
| 102 | + def get_page(self, name: Literal['form']) -> SearchForm: ...
|
|
| 103 | + |
|
| 104 | + @overload
|
|
| 105 | + def get_page(self, name: Literal['result']) -> Result: ...
|
|
| 106 | + |
|
| 107 | + @overload
|
|
| 108 | + def get_page(self, name: Literal['error']) -> Error: ...
|
|
| 109 | + |
|
| 110 | + def get_page(self, name: str) -> Page:
|
|
| 111 | + return self._pages[name]
|
|
| 112 | + |
|
| 94 | 113 | def _on_button_clicked(self,
|
| 95 | 114 | _assistant: Assistant,
|
| 96 | 115 | button_name: str
|
| 97 | 116 | ) -> None:
|
| 98 | 117 | if button_name == 'search':
|
| 99 | 118 | self.show_page('progress', Gtk.StackTransitionType.SLIDE_LEFT)
|
| 100 | - form = cast(SearchForm, self.get_page('form')).get_submit_form()
|
|
| 119 | + form = self.get_page('form').get_submit_form()
|
|
| 101 | 120 | self._client.get_module('Search').send_search_form(
|
| 102 | 121 | self._jid, form, True)
|
| 103 | 122 | return
|
| ... | ... | @@ -112,13 +131,12 @@ def _on_button_clicked(self, |
| 112 | 131 | @ensure_not_destroyed
|
| 113 | 132 | def _search_form_received(self, event: SearchFormReceivedEvent) -> None:
|
| 114 | 133 | if not event.is_dataform:
|
| 115 | - error_page = cast(Error, self.get_page('error'))
|
|
| 116 | - error_page.set_text(_('Error while retrieving search form.'))
|
|
| 134 | + self.get_page('error').set_text(
|
|
| 135 | + _('Error while retrieving search form.'))
|
|
| 117 | 136 | self.show_page('error')
|
| 118 | 137 | return
|
| 119 | 138 | |
| 120 | - form_page = cast(SearchForm, self.get_page('form'))
|
|
| 121 | - form_page.process_search_form(event.data)
|
|
| 139 | + self.get_page('form').process_search_form(event.data)
|
|
| 122 | 140 | self.show_page('form')
|
| 123 | 141 | |
| 124 | 142 | @ensure_not_destroyed
|
| ... | ... | @@ -131,8 +149,7 @@ def _search_result_received(self, |
| 131 | 149 | self.show_page('error')
|
| 132 | 150 | return
|
| 133 | 151 | |
| 134 | - result_page = cast(Result, self.get_page('result'))
|
|
| 135 | - result_page.process_result(event.data)
|
|
| 152 | + self.get_page('result').process_result(event.data)
|
|
| 136 | 153 | self.show_page('result')
|
| 137 | 154 | |
| 138 | 155 | def _on_destroy(self, *args: Any) -> None:
|
| ... | ... | @@ -15,7 +15,9 @@ |
| 15 | 15 | from __future__ import annotations
|
| 16 | 16 | |
| 17 | 17 | from typing import cast
|
| 18 | +from typing import Literal
|
|
| 18 | 19 | from typing import Optional
|
| 20 | +from typing import overload
|
|
| 19 | 21 | |
| 20 | 22 | import logging
|
| 21 | 23 | import time
|
| ... | ... | @@ -33,10 +35,8 @@ |
| 33 | 35 | from gajim.common.storage.archive import MessageExportRow
|
| 34 | 36 | |
| 35 | 37 | from .assistant import Assistant
|
| 36 | -from .assistant import Page
|
|
| 37 | 38 | from .assistant import ErrorPage
|
| 38 | -from .assistant import SuccessPage
|
|
| 39 | -from .assistant import ProgressPage
|
|
| 39 | +from .assistant import Page
|
|
| 40 | 40 | from .builder import get_builder
|
| 41 | 41 | |
| 42 | 42 | log = logging.getLogger('gajim.gui.history_export')
|
| ... | ... | @@ -58,16 +58,16 @@ def __init__(self, account: Optional[str] = None) -> None: |
| 58 | 58 | |
| 59 | 59 | self.add_pages({'start': SelectAccountDir(account)})
|
| 60 | 60 | |
| 61 | - progress_page = cast(ProgressPage, self.add_default_page('progress'))
|
|
| 61 | + progress_page = self.add_default_page('progress')
|
|
| 62 | 62 | progress_page.set_title(_('Exporting History...'))
|
| 63 | 63 | progress_page.set_text(_('Exporting your messages...'))
|
| 64 | 64 | |
| 65 | - success_page = cast(SuccessPage, self.add_default_page('success'))
|
|
| 65 | + success_page = self.add_default_page('success')
|
|
| 66 | 66 | success_page.set_title(_('Export Finished'))
|
| 67 | 67 | success_page.set_text(
|
| 68 | 68 | _('Your messages have been exported successfully'))
|
| 69 | 69 | |
| 70 | - error_page = cast(ErrorPage, self.add_default_page('error'))
|
|
| 70 | + error_page = self.add_default_page('error')
|
|
| 71 | 71 | error_page.set_title(_('Error while Exporting'))
|
| 72 | 72 | error_page.set_text(
|
| 73 | 73 | _('An error occurred while exporting your messages'))
|
| ... | ... | @@ -75,6 +75,15 @@ def __init__(self, account: Optional[str] = None) -> None: |
| 75 | 75 | self.connect('button-clicked', self._on_button_clicked)
|
| 76 | 76 | self.show_all()
|
| 77 | 77 | |
| 78 | + @overload
|
|
| 79 | + def get_page(self, name: Literal['error']) -> ErrorPage: ...
|
|
| 80 | + |
|
| 81 | + @overload
|
|
| 82 | + def get_page(self, name: Literal['start']) -> SelectAccountDir: ...
|
|
| 83 | + |
|
| 84 | + def get_page(self, name: str) -> Page:
|
|
| 85 | + return self._pages[name]
|
|
| 86 | + |
|
| 78 | 87 | @staticmethod
|
| 79 | 88 | def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
|
| 80 | 89 | if page_name == 'start':
|
| ... | ... | @@ -105,7 +114,7 @@ def _on_button_clicked(self, |
| 105 | 114 | self.destroy()
|
| 106 | 115 | |
| 107 | 116 | def _on_export(self) -> None:
|
| 108 | - start_page = cast(SelectAccountDir, self.get_page('start'))
|
|
| 117 | + start_page = self.get_page('start')
|
|
| 109 | 118 | account, directory = start_page.get_account_and_directory()
|
| 110 | 119 | |
| 111 | 120 | current_time = datetime.now()
|
| ... | ... | @@ -123,8 +132,7 @@ def _on_export(self) -> None: |
| 123 | 132 | try:
|
| 124 | 133 | file_path.mkdir(parents=True, exist_ok=True)
|
| 125 | 134 | except OSError as err:
|
| 126 | - error_page = cast(ErrorPage, self.get_page('error'))
|
|
| 127 | - error_page.set_text(
|
|
| 135 | + self.get_page('error').set_text(
|
|
| 128 | 136 | _('An error occurred while trying to create a '
|
| 129 | 137 | 'file at %(path)s: %(error)s') % {
|
| 130 | 138 | 'path': file_path,
|
| ... | ... | @@ -15,7 +15,9 @@ |
| 15 | 15 | from __future__ import annotations
|
| 16 | 16 | |
| 17 | 17 | from typing import cast
|
| 18 | +from typing import Literal
|
|
| 18 | 19 | from typing import Optional
|
| 20 | +from typing import overload
|
|
| 19 | 21 | |
| 20 | 22 | import logging
|
| 21 | 23 | from datetime import datetime
|
| ... | ... | @@ -85,7 +87,7 @@ def __init__(self, account: str) -> None: |
| 85 | 87 | })
|
| 86 | 88 | |
| 87 | 89 | self.add_default_page('success')
|
| 88 | - success_page = cast(SuccessPage, self.get_page('success'))
|
|
| 90 | + success_page = self.get_page('success')
|
|
| 89 | 91 | success_page.set_title(_('Synchronize Chat History'))
|
| 90 | 92 | success_page.set_heading(_('Finished'))
|
| 91 | 93 | |
| ... | ... | @@ -108,6 +110,18 @@ def __init__(self, account: str) -> None: |
| 108 | 110 | |
| 109 | 111 | self.show_all()
|
| 110 | 112 | |
| 113 | + @overload
|
|
| 114 | + def get_page(self, name: Literal['select']) -> SelectTime: ...
|
|
| 115 | + |
|
| 116 | + @overload
|
|
| 117 | + def get_page(self, name: Literal['progress']) -> Progress: ...
|
|
| 118 | + |
|
| 119 | + @overload
|
|
| 120 | + def get_page(self, name: Literal['success']) -> SuccessPage: ...
|
|
| 121 | + |
|
| 122 | + def get_page(self, name: str) -> Page:
|
|
| 123 | + return self._pages[name]
|
|
| 124 | + |
|
| 111 | 125 | @staticmethod
|
| 112 | 126 | def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
|
| 113 | 127 | if page_name == 'select':
|
| ... | ... | @@ -134,7 +148,7 @@ def _on_button_clicked(self, |
| 134 | 148 | self.destroy()
|
| 135 | 149 | |
| 136 | 150 | def _prepare_query(self) -> None:
|
| 137 | - select_time_page = cast(SelectTime, self.get_page('select'))
|
|
| 151 | + select_time_page = self.get_page('select')
|
|
| 138 | 152 | self._timedelta = select_time_page.get_timedelta()
|
| 139 | 153 | if self._timedelta is not None:
|
| 140 | 154 | self._start = self._now - self._timedelta
|
| ... | ... | @@ -159,8 +173,7 @@ def _received_count(self, task: Task) -> None: |
| 159 | 173 | return
|
| 160 | 174 | |
| 161 | 175 | if result.rsm.count is not None:
|
| 162 | - progress_page = cast(Progress, self.get_page('progress'))
|
|
| 163 | - progress_page.set_count(int(result.rsm.count))
|
|
| 176 | + self.get_page('progress').set_count(int(result.rsm.count))
|
|
| 164 | 177 | mam_module = self._client.get_module('MAM')
|
| 165 | 178 | self._query_id = mam_module.request_archive_interval(
|
| 166 | 179 | self._start, self._end)
|
| ... | ... | @@ -171,10 +184,10 @@ def _received_finished(self, event: ArchivingIntervalFinished) -> None: |
| 171 | 184 | return
|
| 172 | 185 | self._query_id = None
|
| 173 | 186 | log.info('Query finished')
|
| 174 | - progress_page = cast(Progress, self.get_page('progress'))
|
|
| 187 | + progress_page = self.get_page('progress')
|
|
| 175 | 188 | GLib.idle_add(progress_page.set_finished)
|
| 176 | 189 | received_count = progress_page.get_received_count()
|
| 177 | - success_page = cast(SuccessPage, self.get_page('success'))
|
|
| 190 | + success_page = self.get_page('success')
|
|
| 178 | 191 | success_page.set_text(_('Finished synchronising chat history:\n'
|
| 179 | 192 | '%s messages downloaded') % received_count)
|
| 180 | 193 | self.show_page('success')
|
| ... | ... | @@ -185,7 +198,7 @@ def _mam_message_received(self, event: RawMamMessageReceived) -> None: |
| 185 | 198 | return
|
| 186 | 199 | |
| 187 | 200 | log.debug('Received message')
|
| 188 | - progress_page = cast(Progress, self.get_page('progress'))
|
|
| 201 | + progress_page = self.get_page('progress')
|
|
| 189 | 202 | GLib.idle_add(progress_page.set_fraction)
|
| 190 | 203 | |
| 191 | 204 |
| ... | ... | @@ -12,8 +12,11 @@ |
| 12 | 12 | # You should have received a copy of the GNU General Public License
|
| 13 | 13 | # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
| 14 | 14 | |
| 15 | +from __future__ import annotations
|
|
| 16 | + |
|
| 15 | 17 | from typing import Any
|
| 16 | -from typing import cast
|
|
| 18 | +from typing import Literal
|
|
| 19 | +from typing import overload
|
|
| 17 | 20 | |
| 18 | 21 | import logging
|
| 19 | 22 | |
| ... | ... | @@ -32,7 +35,6 @@ |
| 32 | 35 | |
| 33 | 36 | from .assistant import Assistant
|
| 34 | 37 | from .assistant import Page
|
| 35 | -from .assistant import ProgressPage
|
|
| 36 | 38 | from .assistant import ErrorPage
|
| 37 | 39 | from .assistant import SuccessPage
|
| 38 | 40 | |
| ... | ... | @@ -61,7 +63,7 @@ def __init__(self, account: str) -> None: |
| 61 | 63 | 'error': Error(),
|
| 62 | 64 | 'success': Success()})
|
| 63 | 65 | |
| 64 | - progress = cast(ProgressPage, self.add_default_page('progress'))
|
|
| 66 | + progress = self.add_default_page('progress')
|
|
| 65 | 67 | progress.set_title(_('Removing Account...'))
|
| 66 | 68 | progress.set_text(_('Trying to remove account...'))
|
| 67 | 69 | |
| ... | ... | @@ -78,6 +80,18 @@ def __init__(self, account: str) -> None: |
| 78 | 80 | |
| 79 | 81 | self.show_all()
|
| 80 | 82 | |
| 83 | + @overload
|
|
| 84 | + def get_page(self, name: Literal['remove_choice']) -> RemoveChoice: ...
|
|
| 85 | + |
|
| 86 | + @overload
|
|
| 87 | + def get_page(self, name: Literal['error']) -> Error: ...
|
|
| 88 | + |
|
| 89 | + @overload
|
|
| 90 | + def get_page(self, name: Literal['success']) -> Success: ...
|
|
| 91 | + |
|
| 92 | + def get_page(self, name: str) -> Page:
|
|
| 93 | + return self._pages[name]
|
|
| 94 | + |
|
| 81 | 95 | @event_filter(['account'])
|
| 82 | 96 | def _on_account_connected(self, _event: AccountConnected) -> None:
|
| 83 | 97 | self._client = app.get_client(self.account)
|
| ... | ... | @@ -93,8 +107,7 @@ def _on_account_disconnected(self, _event: AccountDisconnected) -> None: |
| 93 | 107 | |
| 94 | 108 | def _set_remove_from_server_checkbox(self) -> None:
|
| 95 | 109 | enabled = self._client is not None and self._client.state.is_available
|
| 96 | - remove_choice_page = cast(RemoveChoice, self.get_page('remove_choice'))
|
|
| 97 | - remove_choice_page.set_remove_from_server(enabled)
|
|
| 110 | + self.get_page('remove_choice').set_remove_from_server(enabled)
|
|
| 98 | 111 | |
| 99 | 112 | def _on_button_clicked(self,
|
| 100 | 113 | _assistant: Assistant,
|
| ... | ... | @@ -117,7 +130,7 @@ def _on_button_clicked(self, |
| 117 | 130 | self.destroy()
|
| 118 | 131 | |
| 119 | 132 | def _on_remove(self, *args: Any) -> None:
|
| 120 | - remove_choice_page = cast(RemoveChoice, self.get_page('remove_choice'))
|
|
| 133 | + remove_choice_page = self.get_page('remove_choice')
|
|
| 121 | 134 | if remove_choice_page.remove_from_server:
|
| 122 | 135 | assert self._client is not None
|
| 123 | 136 | self._client.set_remove_account(True)
|
| ... | ... | @@ -141,8 +154,7 @@ def _on_remove_response(self, task: Task) -> None: |
| 141 | 154 | self._client.set_remove_account(False)
|
| 142 | 155 | |
| 143 | 156 | error_text = to_user_string(error)
|
| 144 | - error_page = cast(Error, self.get_page('error'))
|
|
| 145 | - error_page.set_text(error_text)
|
|
| 157 | + self.get_page('error').set_text(error_text)
|
|
| 146 | 158 | self.show_page('error')
|
| 147 | 159 | return
|
| 148 | 160 |
| 1 | +import gi
|
|
| 2 | + |
|
| 3 | + |
|
| 4 | +def require_versions():
|
|
| 5 | + gi.require_versions({'Gdk': '3.0',
|
|
| 6 | + 'GLib': '2.0',
|
|
| 7 | + 'Gio': '2.0',
|
|
| 8 | + 'Gtk': '3.0',
|
|
| 9 | + 'GtkSource': '4',
|
|
| 10 | + 'GObject': '2.0',
|
|
| 11 | + 'Pango': '1.0'})
|
|
| 12 | + |
|
| 13 | + |
|
| 14 | +require_versions() |
| 1 | -import gi
|
|
| 2 | -gi.require_version('Gtk', '3.0')
|
|
| 3 | 1 | from gi.repository import Gtk
|
| 4 | 2 | |
| 5 | 3 | from gajim.common.const import CSSPriority
|
| ... | ... | @@ -10,7 +8,8 @@ |
| 10 | 8 | from gajim.gui.assistant import Assistant
|
| 11 | 9 | from gajim.gui.assistant import Page
|
| 12 | 10 | |
| 13 | -from test.gtk import util
|
|
| 11 | +from . import util
|
|
| 12 | + |
|
| 14 | 13 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 15 | 14 | |
| 16 | 15 | |
| ... | ... | @@ -46,7 +45,7 @@ def __init__(self): |
| 46 | 45 | self.show_all()
|
| 47 | 46 | |
| 48 | 47 | @staticmethod
|
| 49 | - def _visible_func(_assistant, page_name):
|
|
| 48 | + def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
|
|
| 50 | 49 | if page_name == 'start':
|
| 51 | 50 | return ['forward']
|
| 52 | 51 | |
| ... | ... | @@ -60,7 +59,11 @@ def _visible_func(_assistant, page_name): |
| 60 | 59 | return ['back', 'close']
|
| 61 | 60 | raise ValueError('page %s unknown' % page_name)
|
| 62 | 61 | |
| 63 | - def _on_button_clicked(self, _assistant, button_name):
|
|
| 62 | + def _on_button_clicked(self,
|
|
| 63 | + _assistant: Assistant,
|
|
| 64 | + button_name: str
|
|
| 65 | + ) -> None:
|
|
| 66 | + |
|
| 64 | 67 | page = self.get_current_page()
|
| 65 | 68 | if button_name == 'forward':
|
| 66 | 69 | if page == 'start':
|
| ... | ... | @@ -83,7 +86,7 @@ def _on_button_clicked(self, _assistant, button_name): |
| 83 | 86 | if button_name == 'close':
|
| 84 | 87 | self.destroy()
|
| 85 | 88 | |
| 86 | - def _on_page_changed(self, _assistant, page_name):
|
|
| 89 | + def _on_page_changed(self, _assistant: Assistant, page_name: str) -> None:
|
|
| 87 | 90 | if page_name == 'start':
|
| 88 | 91 | self.set_default_button('forward')
|
| 89 | 92 | |
| ... | ... | @@ -114,7 +117,8 @@ def __init__(self): |
| 114 | 117 | label1.set_justify(Gtk.Justification.CENTER)
|
| 115 | 118 | label1.set_margin_bottom(24)
|
| 116 | 119 | |
| 117 | - entry = Gtk.Entry(activates_default=True)
|
|
| 120 | + entry = Gtk.Entry()
|
|
| 121 | + entry.set_activates_default(True)
|
|
| 118 | 122 | entry.connect('changed', self._on_changed)
|
| 119 | 123 | |
| 120 | 124 | self._server = Gtk.CheckButton.new_with_mnemonic('A fancy checkbox')
|
| ... | ... | @@ -126,7 +130,7 @@ def __init__(self): |
| 126 | 130 | self.pack_start(self._server, False, True, 0)
|
| 127 | 131 | self.show_all()
|
| 128 | 132 | |
| 129 | - def _on_changed(self, entry):
|
|
| 133 | + def _on_changed(self, entry: Gtk.Entry) -> None:
|
|
| 130 | 134 | self.complete = bool(entry.get_text())
|
| 131 | 135 | self.update_page_complete()
|
| 132 | 136 |
| 1 | -import gi
|
|
| 2 | -gi.require_version('Gio', '2.0')
|
|
| 3 | -gi.require_version('Gtk', '3.0')
|
|
| 4 | 1 | from gi.repository import Gio
|
| 5 | 2 | from gi.repository import Gtk
|
| 6 | 3 | |
| 4 | +from gajim.common.const import CSSPriority
|
|
| 5 | + |
|
| 7 | 6 | from gajim import gui
|
| 8 | 7 | gui.init('gtk')
|
| 9 | 8 | |
| 10 | -from test.gtk import util
|
|
| 11 | -from gajim.common.const import CSSPriority
|
|
| 12 | 9 | from gajim.gui.certificate_dialog import CertificateDialog
|
| 13 | 10 | |
| 11 | +from . import util
|
|
| 12 | + |
|
| 14 | 13 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 15 | 14 | |
| 16 | 15 | cert = '''
|
| ... | ... | @@ -2,23 +2,21 @@ |
| 2 | 2 | |
| 3 | 3 | from functools import partial
|
| 4 | 4 | |
| 5 | -import gi
|
|
| 6 | -gi.require_version('Gtk', '3.0')
|
|
| 7 | -from gi.repository import Gtk
|
|
| 8 | - |
|
| 9 | 5 | from nbxmpp.modules.dataforms import create_field
|
| 10 | 6 | from nbxmpp.modules.dataforms import SimpleDataForm
|
| 11 | 7 | |
| 8 | +from gi.repository import Gtk
|
|
| 9 | + |
|
| 10 | +from gajim.common import app
|
|
| 12 | 11 | from gajim.common.const import CSSPriority
|
| 13 | 12 | |
| 14 | 13 | from gajim import gui
|
| 15 | 14 | gui.init('gtk')
|
| 16 | 15 | |
| 17 | -from gajim.common import app
|
|
| 18 | - |
|
| 19 | 16 | from gajim.gui.change_password import ChangePassword
|
| 20 | 17 | |
| 21 | -from test.gtk import util
|
|
| 18 | +from . import util
|
|
| 19 | + |
|
| 22 | 20 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 23 | 21 | |
| 24 | 22 | app.get_client = MagicMock()
|
| ... | ... | @@ -32,14 +30,16 @@ |
| 32 | 30 | |
| 33 | 31 | form = SimpleDataForm(type_='form', fields=fields)
|
| 34 | 32 | |
| 35 | -def _apply(self, next_stage=False):
|
|
| 33 | + |
|
| 34 | +def _apply(self: ChangePassword, next_stage: bool = False) -> None:
|
|
| 36 | 35 | if next_stage:
|
| 37 | 36 | self.get_page('next_stage').get_submit_form()
|
| 38 | 37 | else:
|
| 39 | 38 | self.get_page('next_stage').set_form(form)
|
| 40 | 39 | self.show_page('next_stage', Gtk.StackTransitionType.SLIDE_LEFT)
|
| 41 | 40 | |
| 42 | -win = ChangePassword(None)
|
|
| 41 | + |
|
| 42 | +win = ChangePassword('')
|
|
| 43 | 43 | win._on_apply = partial(_apply, win)
|
| 44 | 44 | |
| 45 | 45 | win.connect('destroy', Gtk.main_quit)
|
| ... | ... | @@ -2,21 +2,21 @@ |
| 2 | 2 | |
| 3 | 3 | from base64 import b64decode
|
| 4 | 4 | |
| 5 | -import gi
|
|
| 6 | -gi.require_version('Gtk', '3.0')
|
|
| 5 | +from nbxmpp.modules.dataforms import extend_form
|
|
| 6 | +from nbxmpp.simplexml import Node
|
|
| 7 | + |
|
| 7 | 8 | from gi.repository import Gtk
|
| 8 | 9 | |
| 9 | -import nbxmpp
|
|
| 10 | -from nbxmpp.modules.dataforms import extend_form
|
|
| 10 | +from gajim.common import app
|
|
| 11 | +from gajim.common.const import CSSPriority
|
|
| 11 | 12 | |
| 12 | 13 | from gajim import gui
|
| 13 | 14 | gui.init('gtk')
|
| 14 | 15 | |
| 15 | 16 | from gajim.gui.dataform import DataFormWidget
|
| 16 | -from gajim.common.const import CSSPriority
|
|
| 17 | -from gajim.common import app
|
|
| 18 | 17 | |
| 19 | -from test.gtk import util
|
|
| 18 | +from . import util
|
|
| 19 | + |
|
| 20 | 20 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 21 | 21 | |
| 22 | 22 | image = '''iVBORw0KGgoAAAANSUhEUgAAAIwAAAA8CAAAAACRYQ2XAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCwQXMiypK
|
| ... | ... | @@ -130,10 +130,11 @@ def __init__(self): |
| 130 | 130 | 'form-width': 435,
|
| 131 | 131 | }
|
| 132 | 132 | self._widget = DataFormWidget(
|
| 133 | - extend_form(node=nbxmpp.Node(node=FORM)), options)
|
|
| 133 | + extend_form(node=Node(node=FORM)), options)
|
|
| 134 | 134 | self.add(self._widget)
|
| 135 | 135 | self.show()
|
| 136 | 136 | |
| 137 | + |
|
| 137 | 138 | win = DataFormWindow()
|
| 138 | 139 | win.connect('destroy', Gtk.main_quit)
|
| 139 | 140 | win.show_all()
|
| 1 | -import gi
|
|
| 2 | -gi.require_version('Gtk', '3.0')
|
|
| 3 | 1 | from gi.repository import Gtk
|
| 4 | 2 | |
| 5 | 3 | from gajim import gui
|
| ... | ... | @@ -9,7 +7,8 @@ |
| 9 | 7 | |
| 10 | 8 | from gajim.gui.dataform import FakeDataFormWidget
|
| 11 | 9 | |
| 12 | -from test.gtk import util
|
|
| 10 | +from . import util
|
|
| 11 | + |
|
| 13 | 12 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 14 | 13 | |
| 15 | 14 | |
| ... | ... | @@ -40,6 +39,7 @@ |
| 40 | 39 | 'redirect-url': 'https://jabber.at/account/register/'
|
| 41 | 40 | }
|
| 42 | 41 | |
| 42 | + |
|
| 43 | 43 | class DataFormWindow(Gtk.Window):
|
| 44 | 44 | def __init__(self):
|
| 45 | 45 | Gtk.Window.__init__(self, title='Data Form Test')
|
| ... | ... | @@ -48,6 +48,7 @@ def __init__(self): |
| 48 | 48 | self.add(self._widget)
|
| 49 | 49 | self.show()
|
| 50 | 50 | |
| 51 | + |
|
| 51 | 52 | win = DataFormWindow()
|
| 52 | 53 | win.connect('destroy', Gtk.main_quit)
|
| 53 | 54 | win.show_all()
|
| 1 | 1 | from unittest.mock import MagicMock
|
| 2 | 2 | |
| 3 | -import gi
|
|
| 4 | -gi.require_version('Gtk', '3.0')
|
|
| 5 | -from gi.repository import Gtk
|
|
| 6 | - |
|
| 7 | 3 | from nbxmpp.protocol import Iq
|
| 8 | 4 | from nbxmpp.modules.discovery import parse_disco_info
|
| 9 | 5 | from nbxmpp.structs import MucSubject
|
| 10 | 6 | |
| 7 | +from gi.repository import Gtk
|
|
| 8 | + |
|
| 11 | 9 | from gajim.common import app
|
| 12 | 10 | from gajim.common.const import CSSPriority
|
| 13 | 11 | |
| 14 | 12 | from gajim import gui
|
| 15 | 13 | gui.init('gtk')
|
| 16 | 14 | |
| 17 | -from test.gtk import util
|
|
| 18 | 15 | from gajim.gui.groupchat_info import GroupChatInfoScrolled
|
| 19 | 16 | |
| 17 | +from . import util
|
|
| 18 | + |
|
| 20 | 19 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 21 | 20 | |
| 22 | 21 | stanza = Iq(node='''
|
| ... | ... | @@ -97,6 +96,7 @@ |
| 97 | 96 | app.css_config = MagicMock()
|
| 98 | 97 | app.css_config.get_value = MagicMock(return_value='rgb(100, 100, 255)')
|
| 99 | 98 | |
| 99 | + |
|
| 100 | 100 | class GroupchatInfo(Gtk.ApplicationWindow):
|
| 101 | 101 | def __init__(self):
|
| 102 | 102 | Gtk.ApplicationWindow.__init__(self)
|
| 1 | 1 | from unittest.mock import MagicMock
|
| 2 | 2 | |
| 3 | -import gi
|
|
| 4 | -gi.require_version('Gio', '2.0')
|
|
| 5 | -gi.require_version('Gtk', '3.0')
|
|
| 6 | 3 | from gi.repository import Gio
|
| 7 | 4 | from gi.repository import Gtk
|
| 8 | 5 | |
| 9 | 6 | from gajim import gui
|
| 10 | 7 | gui.init('gtk')
|
| 11 | - |
|
| 12 | -from test.gtk import util
|
|
| 13 | - |
|
| 14 | 8 | from gajim.common import app
|
| 15 | 9 | from gajim.common.const import CSSPriority
|
| 10 | + |
|
| 16 | 11 | from gajim.gui.ssl_error_dialog import SSLErrorDialog
|
| 17 | 12 | |
| 13 | +from . import util
|
|
| 14 | + |
|
| 18 | 15 | util.load_style('gajim.css', CSSPriority.APPLICATION)
|
| 19 | 16 | |
| 20 | 17 | cert = '''
|
| 1 | 1 | import gi
|
| 2 | 2 | |
| 3 | + |
|
| 3 | 4 | def require_versions():
|
| 4 | 5 | gi.require_versions({'Gdk': '3.0',
|
| 5 | 6 | 'GLib': '2.0',
|
| ... | ... | @@ -9,4 +10,5 @@ def require_versions(): |
| 9 | 10 | 'GObject': '2.0',
|
| 10 | 11 | 'Pango': '1.0'})
|
| 11 | 12 | |
| 13 | + |
|
| 12 | 14 | require_versions() |