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

Reply via email to