Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
57924ca8 by wurstsalat at 2022-04-23T18:16:27+02:00
feat: Preview: Make download cancellable
- - - - -
4 changed files:
- gajim/common/preview.py
- gajim/data/gui/preview.ui
- gajim/gtk/builder.pyi
- gajim/gtk/preview.py
Changes:
=====================================
gajim/common/preview.py
=====================================
@@ -80,6 +80,8 @@ def __init__(self,
self.file_size: int = 0
self._received_size: int = 0
+ self._soup_message: Optional[Soup.Message] = None
+
self.key: Optional[bytes] = None
self.iv: Optional[bytes] = None
if self.is_aes_encrypted and urlparts is not None:
@@ -114,6 +116,10 @@ def context(self) -> Optional[str]:
def filename(self) -> str:
return self._filename
+ @property
+ def soup_message(self) -> Soup.Message:
+ return self._soup_message
+
@property
def request_uri(self) -> Optional[str]:
if self._urlparts is None:
@@ -150,7 +156,8 @@ def create_thumbnail(self, data: bytes) -> bool:
def update_widget(self, data: Optional[GdkPixbufType] = None) -> None:
self._widget.update(self, data)
- def update_progress(self, size: int) -> None:
+ def update_progress(self, size: int, message: Soup.Message) -> None:
+ self._soup_message = message
self._received_size += size
if self.file_size == 0 or self._received_size == 0:
return
@@ -420,11 +427,11 @@ def _on_content_sniffed(self,
preview.update_widget()
def _on_got_chunk(self,
- _message: Soup.Message,
+ message: Soup.Message,
chunk: Soup.Buffer,
preview: Preview
) -> None:
- preview.update_progress(len(chunk.get_data()))
+ preview.update_progress(len(chunk.get_data()), message)
def _on_finished(self,
_session: Soup.Session,
@@ -507,3 +514,7 @@ def _on_thumb_write_finished(_result: bool,
return
preview.update_widget(data=pixbuf)
+
+ def cancel_download(self, preview: Preview) -> None:
+ session = self._get_session(preview.account)
+ session.cancel_message(preview.soup_message, Soup.Status.CANCELLED)
=====================================
gajim/data/gui/preview.ui
=====================================
@@ -72,10 +72,43 @@
</packing>
</child>
<child>
- <object class="GtkProgressBar" id="progressbar">
+ <object class="GtkBox" id="progress_box">
<property name="can-focus">False</property>
<property name="no-show-all">True</property>
- <property name="show-text">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkProgressBar" id="progressbar">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="show-text">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <property name="tooltip-text"
translatable="yes">Cancel</property>
+ <signal name="clicked" handler="_on_cancel_download_clicked"
swapped="no"/>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="icon-name">process-stop-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
=====================================
gajim/gtk/builder.pyi
=====================================
@@ -718,6 +718,7 @@ class PreviewBuilder(Builder):
right_box: Gtk.Box
image_event_box: Gtk.EventBox
image_button: Gtk.Button
+ progress_box: Gtk.Box
progressbar: Gtk.ProgressBar
button_box: Gtk.Box
download_button: Gtk.Button
=====================================
gajim/gtk/preview.py
=====================================
@@ -67,12 +67,12 @@ def get_text(self) -> str:
return self._preview.uri
def update_progress(self, _preview: Preview, progress: float) -> None:
- self._ui.progressbar.show()
+ self._ui.progress_box.show()
self._ui.progressbar.set_fraction(progress)
def update(self, preview: Preview, data: Optional[GdkPixbufType]) -> None:
self._preview = preview
- self._ui.progressbar.hide()
+ self._ui.progress_box.hide()
if preview.is_geo_uri:
data = load_icon_pixbuf('map', size=preview.size)
@@ -274,6 +274,10 @@ def _on_button_press_event(self,
menu = self._get_context_menu()
menu.popup_at_pointer(event)
+ def _on_cancel_download_clicked(self, _button: Gtk.Button) -> None:
+ assert self._preview is not None
+ app.interface.preview_manager.cancel_download(self._preview)
+
@staticmethod
def _on_realize(event_box: Gtk.EventBox) -> None:
window = event_box.get_window()
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/57924ca86061d60634bfa3ff0253b9d481f0f906
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/57924ca86061d60634bfa3ff0253b9d481f0f906
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits