Daniel Brötzmann pushed to branch master at gajim / gajim
Commits: a1dacac5 by wurstsalat at 2022-06-16T14:43:59+02:00 fix: NotificationManager: Make displaying an invitation more robust
- - - - - 61fae3de by wurstsalat at 2022-06-16T15:13:17+02:00 fix: Preview: Catch PIL errors while generating preview
Fixes #10989
- - - - -
4 changed files:
- gajim/common/preview.py - gajim/common/preview_helpers.py - gajim/gtk/notification_manager.py - gajim/gtk/preview.py
Changes:
===================================== gajim/common/preview.py ===================================== @@ -150,6 +150,7 @@ def orig_exists(self) -> bool: def create_thumbnail(self, data: bytes) -> bool: self.thumbnail = create_thumbnail(data, self.size) if self.thumbnail is None: + self.info_message = _('Creating thumbnail failed') log.warning('Creating thumbnail failed for: %s', self.orig_path) return False return True @@ -342,8 +343,7 @@ def _on_orig_load_finished(self, preview.thumbnail, self._on_thumb_write_finished, preview) - else: - preview.update_widget() + preview.update_widget()
@staticmethod def _on_thumb_load_finished(data: Optional[bytes], @@ -426,7 +426,7 @@ def _on_content_sniffed(self, return
if file_size == 0: - log.info('File size is unknown (zero) for URL: '%s'', uri) + log.info('File size is unknown (zero) for URL: '%s'', uri) session.cancel_message(message, Soup.Status.CANCELLED) return
@@ -434,7 +434,9 @@ def _on_content_sniffed(self, log.info( 'File size (%s) too big for URL: '%s'', file_size, uri) - if not force: + if force: + preview.info_message = None + else: session.cancel_message(message, Soup.Status.CANCELLED) preview.info_message = _('Automatic preview disabled ' '(file too big)') @@ -463,6 +465,8 @@ def _on_finished(self, preview.update_widget() return
+ preview.info_message = None + data = message.props.response_body_data.get_data() if data is None: return @@ -486,6 +490,8 @@ def _on_finished(self, preview.thumbnail, self._on_thumb_write_finished, preview) + else: + preview.update_widget()
@staticmethod def _on_orig_write_finished(_result: bool,
===================================== gajim/common/preview_helpers.py ===================================== @@ -146,7 +146,7 @@ def extract_and_resize_frames(image: Image.Image, return frames, result
-def create_thumbnail(data: bytes, size:int) -> Optional[bytes]: +def create_thumbnail(data: bytes, size: int) -> Optional[bytes]: thumbnail = create_thumbnail_with_pil(data, size) if thumbnail is not None: return thumbnail @@ -191,7 +191,7 @@ def create_thumbnail_with_pil(data: bytes, size: int) -> Optional[bytes]: output_file = BytesIO() try: image = Image.open(input_file) - except OSError as error: + except Exception as error: log.warning('making pil thumbnail failed: %s', error) log.warning('fallback to pixbuf') input_file.close()
===================================== gajim/gtk/notification_manager.py ===================================== @@ -236,21 +236,23 @@ def add_invitation_received(self, event: MucInvitation) -> None: self.add(new_row) self.update_unread_count()
- if get_muc_context(event.muc) == 'public': - jid = event.from_ + jid = event.from_.bare + muc_context = get_muc_context(event.muc) + if (muc_context == 'private' and + not event.muc.bare_match(event.from_)): + contact = self._client.get_module('Contacts').get_contact(jid) + text = _('%(contact)s invited you to %(chat)s') % { + 'contact': contact.name, + 'chat': event.info.muc_name} else: - jid = event.from_.bare - contact = self._client.get_module('Contacts').get_contact(jid) - text = _('%(contact)s invited you to %(chat)s') % { - 'contact': contact.name, - 'chat': event.info.muc_name} + text = _('You have been invited to %s') % event.info.muc_name
app.ged.raise_event( Notification(account=self._account, - jid=jid, - type='group-chat-invitation', - title=_('Group Chat Invitation'), - text=text)) + jid=jid, + type='group-chat-invitation', + title=_('Group Chat Invitation'), + text=text))
def add_invitation_declined(self, event: MucDecline) -> None: row = self._get_notification_row(str(event.muc)) @@ -394,10 +396,7 @@ def __init__(self, account: str, event: MucInvitation) -> None:
self._event = event
- if get_muc_context(event.muc) == 'public': - jid = event.from_ - else: - jid = event.from_.bare + jid = event.from_.bare image = self._generate_avatar_image(jid) self.grid.attach(image, 1, 1, 1, 2)
@@ -406,10 +405,16 @@ def __init__(self, account: str, event: MucInvitation) -> None: title_label.get_style_context().add_class('bold') self.grid.attach(title_label, 2, 1, 1, 1)
- contact = self._client.get_module('Contacts').get_contact(jid) - invitation_text = _('%(contact)s invited you to %(chat)s') % { - 'contact': contact.name, - 'chat': event.info.muc_name} + muc_context = get_muc_context(event.muc) + if (muc_context == 'private' and + not event.muc.bare_match(event.from_)): + contact = self._client.get_module('Contacts').get_contact(jid) + invitation_text = _('%(contact)s invited you to %(chat)s') % { + 'contact': contact.name, + 'chat': event.info.muc_name} + else: + invitation_text = _('You have been invited ' + 'to %s') % event.info.muc_name text_label = self._generate_label() text_label.set_text(invitation_text) text_label.set_tooltip_text(invitation_text)
===================================== gajim/gtk/preview.py ===================================== @@ -142,6 +142,11 @@ def update(self, preview: Preview, data: Optional[GdkPixbufType]) -> None: label.set_ellipsize(Pango.EllipsizeMode.END) label.set_max_width_chars(32)
+ if preview.info_message is not None: + self._ui.info_message.set_text(preview.info_message) + self._ui.info_message.set_tooltip_text(preview.info_message) + self._ui.info_message.show() + if preview.orig_exists(): self._ui.download_button.hide() self._ui.open_folder_button.show() @@ -155,11 +160,6 @@ def update(self, preview: Preview, data: Optional[GdkPixbufType]) -> None: self._ui.right_box.pack_end(audio_widget, False, True, 0) self._ui.right_box.reorder_child(audio_widget, 1) else: - if preview.info_message is not None: - self._ui.info_message.set_text(preview.info_message) - self._ui.info_message.set_tooltip_text(preview.info_message) - self._ui.info_message.show() - if preview.file_size == 0: self._ui.download_button.hide() self._ui.link_button.show()
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/e093e6566848d7a688aa7a4aafcd9304...