From 1be7a8beef5c65fc988aa0c1acb92dd40a2a6898 Mon Sep 17 00:00:00 2001 From: Emil Dudev Date: Mon, 16 Dec 2013 04:01:18 +0000 Subject: Save to journal tool button Fixes #2637 --- diff --git a/browser.py b/browser.py index 35c7437..f571c13 100644 --- a/browser.py +++ b/browser.py @@ -570,6 +570,8 @@ class Browser(WebKit.WebView): # presses Enter on the URL Entry self.loading_uri = None + self._mimetype = None + self.security_status = None # Reference to the global history and callbacks to handle it: @@ -661,6 +663,9 @@ class Browser(WebKit.WebView): file_handle.close() async_cb(file_path) + def get_mimetype(self): + return self._mimetype + def open_new_tab(self, url): self.emit('new-tab', url) @@ -711,11 +716,16 @@ class Browser(WebKit.WebView): def __mime_type_policy_cb(self, webview, frame, request, mimetype, policy_decision): """Handle downloads and PDF files.""" + self._mimetype = mimetype + if mimetype == 'application/pdf': self.emit('open-pdf', request.get_uri()) policy_decision.ignore() return True + elif request.get_uri().endswith(('.ta', '.tb')): + self._mimetype = 'application/x-turtle-art' + elif mimetype == 'audio/x-vorbis+ogg': self._inject_media_style = True diff --git a/webtoolbar.py b/webtoolbar.py index 2fb98f5..a027e6f 100644 --- a/webtoolbar.py +++ b/webtoolbar.py @@ -17,6 +17,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import os +import tempfile from gettext import gettext as _ from gi.repository import GObject @@ -32,6 +33,8 @@ from sugar3.graphics.toolbarbox import ToolbarBox as ToolbarBase from sugar3.graphics.palettemenu import PaletteMenuItem from sugar3.graphics.palettemenu import PaletteMenuBox from sugar3.graphics import style +from sugar3.datastore import datastore +from sugar3.activity import activity from sugar3.activity.widgets import ActivityToolbarButton from sugar3.activity.widgets import StopButton @@ -393,6 +396,13 @@ class PrimaryToolbar(ToolbarBase): toolbar.insert(self._link_add, -1) self._link_add.show() + self._save_to_journal_button = ToolButton('save-to-journal') + self._save_to_journal_button.set_tooltip(_('Save to journal')) + self._save_to_journal_button.connect('clicked', + self._save_to_journal_button_clicked_cb) + toolbar.insert(self._save_to_journal_button, -1) + self._save_to_journal_button.show() + self._toolbar_separator = Gtk.SeparatorToolItem() self._toolbar_separator.props.draw = False self._toolbar_separator.set_expand(True) @@ -402,6 +412,7 @@ class PrimaryToolbar(ToolbarBase): self._progress_listener = None self._browser = None + self._journal_temp_file_path = None self._loading_changed_hid = None self._progress_changed_hid = None @@ -690,3 +701,49 @@ class PrimaryToolbar(ToolbarBase): def _link_add_clicked_cb(self, button): self.emit('add-link') + + def _save_to_journal_button_clicked_cb(self, button): + temp_path = os.path.join(activity.get_activity_root(), 'instance') + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + fd, self._journal_temp_file_path = tempfile.mkstemp(dir=temp_path) + + #if not self._tabbed_view.current_browser. \ + # get_main_frame().get_data_source().is_loading(): + # source_code = self._tabbed_view.current_browser. \ + # get_main_frame().get_data_source().get_data().str + # with os.fdopen(fd, "w") as text_file: + # text_file.write( source_code ) + # + # self._save_to_journal() + #else: + + network_request = WebKit.NetworkRequest.new( + self._tabbed_view.current_browser.get_uri()) + # seems like a referance to the WebKit.Download instance must be kept + # otherwise the process is terminated with a segfault + self._download = WebKit.Download.new(network_request) + self._download.set_destination_uri('file://' + \ + self._journal_temp_file_path) + self._download.connect('notify::status', self._download_status_cb) + self._download.start() + + def _download_status_cb(self, download, data): + status = download.get_status() + if status == WebKit.DownloadStatus.FINISHED: + self._save_to_journal() + + def _save_to_journal(self): + uri = self._tabbed_view.current_browser.get_uri() + mimetype = self._tabbed_view.current_browser.get_mimetype() + + jobject = datastore.create() + + jobject.metadata['title'] = os.path.basename( uri ) + jobject.metadata['description'] = _('From: %s') % uri + jobject.metadata['mime_type'] = mimetype + jobject.file_path = self._journal_temp_file_path + + datastore.write(jobject) + -- cgit v0.9.1