Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Dudev <emildudev@gmail.com>2013-12-16 04:01:18 (GMT)
committer Emil Dudev <emildudev@gmail.com>2013-12-16 04:01:18 (GMT)
commit1be7a8beef5c65fc988aa0c1acb92dd40a2a6898 (patch)
tree9635be15cdc6e01b2f4ff390ec088c07272c57cf
parent3e9563b38e4ed56f080a1ed186a7a330995ce2d6 (diff)
Save to journal tool buttonticket2637
Fixes #2637
-rw-r--r--browser.py10
-rw-r--r--webtoolbar.py57
2 files changed, 67 insertions, 0 deletions
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)
+