Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Lewis <jtl1728@rit.edu>2010-01-18 23:35:05 (GMT)
committer Justin Lewis <jtl1728@rit.edu>2010-01-18 23:35:05 (GMT)
commit1e6766ba01267475ea5e599cadb14e90a1e26788 (patch)
treee3313371b2cd7d1d1bfc5542b232268b566e2c4a
parent852aaad83bab7b110eb3da37b53515bf58aff298 (diff)
Lots of gui and procedural changes
* Button Changes * Sugar toolbar with svg icons instead of buttons * Instead of "File", now using "Object" terminology * Deactivate buttons that require selection when no files are selected * Throbber Changes * Mouse now turns into watch when throbber invoked * Disables window while working * Connects to server after start up. * Scrollbars disappear when not needed. NEW BUGS: * Add files from normal mode, switch to server, try to upload file * Press toolbar button when in admin screen
-rw-r--r--FileShare.activity/FileShareActivity.py117
-rw-r--r--FileShare.activity/GuiView.py154
-rw-r--r--FileShare.activity/TubeSpeak.py6
-rw-r--r--FileShare.activity/icons/epiphany-download.svg144
-rw-r--r--FileShare.activity/icons/fs_gtk-add.svg129
-rw-r--r--FileShare.activity/icons/fs_gtk-remove.svg99
-rw-r--r--FileShare.activity/icons/gaim-link.svg311
-rw-r--r--FileShare.activity/icons/gtk-network.svg141
8 files changed, 1006 insertions, 95 deletions
diff --git a/FileShare.activity/FileShareActivity.py b/FileShare.activity/FileShareActivity.py
index de2ae7f..b19381c 100644
--- a/FileShare.activity/FileShareActivity.py
+++ b/FileShare.activity/FileShareActivity.py
@@ -27,7 +27,8 @@ import zipfile
from hashlib import sha1
from gettext import gettext as _
-from sugar.activity.activity import Activity, ActivityToolbox
+from sugar.activity.activity import Activity
+
from sugar.presence.tubeconn import TubeConnection
from sugar import network
from sugar import profile
@@ -101,7 +102,6 @@ class FileShareActivity(Activity):
self._mode = "P2P"
prof = profile.get_profile()
-
self._user_key_hash = sha1(prof.pubkey).hexdigest()
self._user_nick = profile.get_nick_name()
self._user_permissions = 0
@@ -110,15 +110,25 @@ class FileShareActivity(Activity):
################
self.set_title('File Share')
- # Create Toolbox
- toolbox = ActivityToolbox(self)
- self.set_toolbox(toolbox)
- toolbox.show()
-
# Set gui display object
self.disp = GuiView(self)
+ # Set Toolbars
+ self.disp.build_toolbars()
+
+ # Build table and display the gui
+ self.disp.build_table()
+
+ # Connect to shared and join calls
+ self._sh_hnd = self.connect('shared', self._shared_cb)
+ self._jo_hnd = self.connect('joined', self._joined_cb)
+
+ self.set_canvas(self.disp)
+ self.show_all()
+
+ def switch_to_server(self):
jabber_serv = None
+ prof = profile.get_profile()
#Need to check if on 82 or higher
if hasattr(prof, 'jabber_server'):
jabber_serv = prof.jabber_server
@@ -133,41 +143,56 @@ class FileShareActivity(Activity):
self.server_port= 14623
self.s_version = 0
-
self.disp.guiHandler.show_throbber(True, _("Please Wait... Searching for Server"))
- if self.isServer and self.check_for_server() and self._server_mode():
+ if self.isServer and self.check_for_server():
self._mode = "SERVER"
self.isServer = False
- if self._mode == 'P2P':
- # Connect to shared and join calls
- self.connect('shared', self._shared_cb)
- self.connect('joined', self._joined_cb)
+ # Remove shared mode
+ # Disable handlers incase not shared yet
+ self.disconnect( self._sh_hnd )
+ self.disconnect( self._jo_hnd )
- else:
- #IN SERVER MODE, GET SERVER FILE LIST
- def call():
- try:
- conn = httplib.HTTPConnection( self.server_ip, self.server_port)
- conn.request("GET", "/filelist")
- r1 = conn.getresponse()
- if r1.status == 200:
- data = r1.read()
- conn.close()
- self.incomingRequest('filelist',data)
- else:
- self.disp.guiHandler._alert("Error getting file list")
- except:
- self.disp.guiHandler._alert("Error getting file list")
- self.disp.guiHandler.show_throbber(False)
-
- self.disp.guiHandler.show_throbber(True, _("Please Wait... Requesting file list from server"))
- threading.Thread(target=call).start()
+ # Disable notify the tube of changes
+ self.initiating = False
- # Build table and display the gui
- self.disp.build_table()
- self.set_canvas(self.disp)
- self.show_all()
+ # Disable greeting people joining tube
+ if self.controlTube:
+ self.controlTube.switch_to_server_mode()
+
+ # Set activity to private mode if shared
+ if self._shared_activity:
+ ##TODO:
+ pass
+
+ # Clear file List (can't go to server mode after sharing, clear list)
+ # Will not delete files so connected people can still download files.
+ self.disp.clear_files(False)
+
+ # Rebuild gui, now we are in server mode
+ self.disp.build_toolbars()
+
+ #self.set_canvas(self.disp)
+ #self.show_all()
+
+ #IN SERVER MODE, GET SERVER FILE LIST
+ def call():
+ try:
+ conn = httplib.HTTPConnection( self.server_ip, self.server_port)
+ conn.request("GET", "/filelist")
+ r1 = conn.getresponse()
+ if r1.status == 200:
+ data = r1.read()
+ conn.close()
+ self.incomingRequest('filelist',data)
+ else:
+ self.disp.guiHandler._alert(str(r1.status), _("Error getting file list") )
+ except:
+ self.disp.guiHandler._alert(_("Error getting file list"))
+ self.disp.guiHandler.show_throbber(False)
+
+ self.disp.guiHandler.show_throbber(True, _("Requesting file list from server"))
+ threading.Thread(target=call).start()
def check_for_server(self):
@@ -219,8 +244,9 @@ class FileShareActivity(Activity):
try:
opener = urllib2.build_opener( MultipartPostHandler.MultipartPostHandler)
f = opener.open("http://%s:%d/user_list"%(self.server_ip, self.server_port), params)
- return simplejson.loads(f.read())
- except:
+ response = f.read()
+ return simplejson.loads(response)
+ except Exception:
raise ServerRequestFailure
def change_server_user(self, userId, level):
@@ -345,21 +371,6 @@ class FileShareActivity(Activity):
else:
_logger.debug("INVALID PATH",path[1:])
- def _server_mode(self):
- dialog = gtk.Dialog(_("Please Select Share Mode"), self, 0,
- (_("Share with others"), gtk.RESPONSE_CANCEL, _("Connect to Server"), gtk.RESPONSE_OK))
-
- dialog.vbox.pack_start(gtk.Label(_("Share with others or connect to server?")), False, False, 0)
-
- dialog.show_all()
- response = dialog.run()
- dialog.destroy()
-
- if response == gtk.RESPONSE_OK:
- return True
- else:
- return False
-
def _shared_cb(self, activity):
_logger.debug('Activity is now shared')
self.initiating = True
diff --git a/FileShare.activity/GuiView.py b/FileShare.activity/GuiView.py
index 49199ad..91536d1 100644
--- a/FileShare.activity/GuiView.py
+++ b/FileShare.activity/GuiView.py
@@ -19,20 +19,21 @@ import FileInfo
import threading
from gettext import gettext as _
+
+from sugar.activity.activity import ActivityToolbox
+from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.objectchooser import ObjectChooser
-from sugar.graphics.alert import NotifyAlert
+from sugar.graphics.alert import NotifyAlert, Alert
from MyExceptions import InShareException, FileUploadFailure, ServerRequestFailure, NoFreeTubes
import logging
_logger = logging.getLogger('fileshare-activity')
-
-
-
class GuiHandler():
def __init__(self, activity, tree):
self.activity = activity
self.treeview = tree
+ self.tb_alert = None
def requestAddFile(self, widget, data=None):
_logger.info('Requesting to add file')
@@ -173,10 +174,17 @@ class GuiHandler():
self.activity.set_canvas(throbber)
self.activity.show_all()
+
+ self.activity.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
+ self.activity.set_sensitive(False)
+
else:
self.activity.set_canvas(self.activity.disp)
self.activity.show_all()
+ self.activity.window.set_cursor(None)
+ self.activity.set_sensitive(True)
+
while gtk.events_pending():
gtk.main_iteration()
@@ -191,15 +199,18 @@ class GuiHandler():
def _alert_cancel_cb(self, alert, response_id):
self.activity.remove_alert(alert)
+ def switch_to_server(self, widget, data=None):
+ self.activity.switch_to_server()
+
def showAdmin(self, widget, data=None):
def call():
try:
userList = self.activity.get_server_user_list()
-
except ServerRequestFailure:
- self._alert(_("Failed to get user list from server"))
- self.show_throbber( False )
+ self._alert(_("Failed to get user list from server"))
+ self.show_throbber( False )
else:
+ self.show_throbber( False )
level = [_("Download Only"), _("Upload/Remove"), _("Admin")]
myTable = gtk.Table(10, 1, False)
@@ -236,10 +247,11 @@ class GuiHandler():
myTable.attach(hbbox,0,1,0,1)
myTable.attach(window,0,1,1,10)
+ #self.activity.disp.build_toolbars( False )
self.activity.set_canvas(myTable)
self.activity.show_all()
- self.show_throbber(True, _("Please Wait... Requesting user list from server"))
+ self.show_throbber(True, _("Requesting user list from server"))
threading.Thread(target=call).start()
@@ -260,57 +272,102 @@ class GuiHandler():
threading.Thread(target=change).start()
def restore_view(self, widget, data = None):
- self.show_throbber( False )
+ #self.....build_toolbars()
+ self.activity.set_canvas(self.activity.disp)
+ #self.show_throbber( False )
-class GuiView(gtk.Table):
+class GuiView(gtk.ScrolledWindow):
"""
This class is used to just remove the table setup from the main file
"""
def __init__(self, activity):
- gtk.Table.__init__(self, rows=10, columns=1, homogeneous=False)
+ gtk.ScrolledWindow.__init__(self)
+ self.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC )
self.activity = activity
self.treeview = gtk.TreeView(gtk.TreeStore(str,object))
self.guiHandler = GuiHandler( activity, self.treeview )
#self.build_table(activity)
- def build_table(self):
- # Create button bar
- ###################
- hbbox = gtk.HButtonBox()
+ def build_toolbars(self, custom = True):
+ self.action_buttons = {}
- if self.activity.isServer:
- addFileButton = gtk.Button(_("Add File"))
- addFileButton.connect("clicked", self.guiHandler.requestAddFile, None)
- hbbox.add(addFileButton)
+ # BUILD CUSTOM TOOLBAR
+ action_bar = gtk.Toolbar()
+ self.action_buttons['add'] = ToolButton('fs_gtk-add')
+ self.action_buttons['add'].set_tooltip(_("Add Object"))
+
+ self.action_buttons['rem'] = ToolButton('fs_gtk-remove')
+ self.action_buttons['rem'].set_tooltip(_("Remove Object(s)"))
+
+ self.action_buttons['save'] = ToolButton('filesave')
+ self.action_buttons['save'].set_tooltip( _("Copy Object(s) to Journal") )
- insFileButton = gtk.Button(_("Copy to Journal"))
- insFileButton.connect("clicked", self.guiHandler.requestInsFile, None)
- hbbox.add(insFileButton)
- remFileButton = gtk.Button(_("Remove Selected File"))
- remFileButton.connect("clicked", self.guiHandler.requestRemFile, None)
- hbbox.add(remFileButton)
+ self.action_buttons['down'] = ToolButton('epiphany-download')
+ self.action_buttons['down'].set_tooltip( _('Download Object(s)') )
+
+ self.action_buttons['admin'] = ToolButton('gtk-network')
+ self.action_buttons['admin'].set_tooltip( _('Server Permissions') )
+
+ self.action_buttons['server'] = ToolButton('gaim-link')
+ self.action_buttons['server'].set_tooltip( _('Connect to Server') )
+
+
+ if self.activity.isServer:
+ self.action_buttons['add'].connect("clicked", self.guiHandler.requestAddFile, None)
+ self.action_buttons['save'].connect("clicked", self.guiHandler.requestInsFile, None)
+ self.action_buttons['rem'].connect("clicked", self.guiHandler.requestRemFile, None)
+ self.action_buttons['server'].connect("clicked", self.guiHandler.switch_to_server, None)
+
+ action_bar.insert(self.action_buttons['add'], -1)
+ action_bar.insert(self.action_buttons['save'], -1)
+ action_bar.insert(self.action_buttons['rem'], -1)
+ action_bar.insert(self.action_buttons['server'], -1)
else:
+ self.action_buttons['down'].connect("clicked", self.guiHandler.requestDownloadFile, None)
+ action_bar.insert(self.action_buttons['down'], -1)
+
if self.activity._mode == 'SERVER' and self.activity._user_permissions != 0:
- addFileButton = gtk.Button(_("Upload A File"))
- addFileButton.connect("clicked", self.guiHandler.requestAddFile, {'upload':True})
- hbbox.add(addFileButton)
+ self.action_buttons['add'].connect("clicked", self.guiHandler.requestAddFile, {'upload':True})
+ self.action_buttons['rem'].connect("clicked", self.guiHandler.requestRemFile, {'remove':True})
- remFileButton = gtk.Button(_("Remove From Server"))
- remFileButton.connect("clicked", self.guiHandler.requestRemFile, {'remove':True})
- hbbox.add(remFileButton)
+ action_bar.insert(self.action_buttons['add'], -1)
+ action_bar.insert(self.action_buttons['rem'], -1)
if self.activity._user_permissions == 2:
- adminButton = gtk.Button(_("Server Settings"))
- adminButton.connect("clicked", self.guiHandler.showAdmin, None)
- hbbox.add(adminButton)
+ self.action_buttons['admin'].connect("clicked", self.guiHandler.showAdmin, None)
+ action_bar.insert(self.action_buttons['admin'], -1)
+
+ action_bar.show_all()
+
+ self.toolbar_set_selection( False )
+
+ # Create Toolbox
+ toolbox = ActivityToolbox(self.activity)
- downloadFileButton = gtk.Button(_("Download File"))
- downloadFileButton.connect("clicked", self.guiHandler.requestDownloadFile, None)
- hbbox.add(downloadFileButton)
+ if custom:
+ toolbox.add_toolbar(_("Actions"), action_bar)
+
+ self.activity.set_toolbox(toolbox)
+ toolbox.show()
+
+ def on_selection_changed(self, selection):
+ if selection.count_selected_rows() == 0:
+ self.toolbar_set_selection(False)
+ else:
+ self.toolbar_set_selection(True)
+
+ def toolbar_set_selection(self, selected):
+ require_selection = ['save', 'rem', 'down']
+ for key in require_selection:
+ if selected:
+ self.action_buttons[key].set_sensitive( True )
+ else:
+ self.action_buttons[key].set_sensitive( False )
+ def build_table(self):
# Create File Tree
##################
@@ -354,13 +411,28 @@ class GuiView(gtk.Table):
# Allow Multiple Selections
self.treeview.get_selection().set_mode( gtk.SELECTION_MULTIPLE )
+ self.treeview.get_selection().connect('changed', self.on_selection_changed )
# Put table into scroll window to allow it to scroll
- window = gtk.ScrolledWindow()
- window.add_with_viewport(self.treeview)
+ self.add_with_viewport(self.treeview)
+
+ def clear_files(self, deleteFile = True):
+ model = self.treeview.get_model()
+ iter = model.get_iter_root()
+ while iter:
+ key = model.get_value(iter, 0)
+
+ # Remove file from UI
+ self.guiHandler._remFileFromUIList(key)
+
+ # UnRegister File with activity share list
+ self.activity._unregisterShareFile( key )
+
+ # Attempt to remove file from system
+ if deleteFile:
+ self.activity.delete_file( key )
- self.attach(hbbox,0,1,0,1)
- self.attach(window,0,1,1,10)
+ iter = model.iter_next(iter)
def update_progress(self, id, bytes ):
model = self.treeview.get_model()
diff --git a/FileShare.activity/TubeSpeak.py b/FileShare.activity/TubeSpeak.py
index f2923dd..a5c9f89 100644
--- a/FileShare.activity/TubeSpeak.py
+++ b/FileShare.activity/TubeSpeak.py
@@ -31,8 +31,12 @@ class TubeSpeak(ExportedGObject):
self.text_received_cb = text_received_cb
self.entered = False # Have we set up the tube?
self.getFileList = get_fileList
+ self.still_serving = True
self.tube.watch_participants(self.participant_change_cb)
+ def switch_to_server_mode(self):
+ self.still_serving = False
+
def participant_change_cb(self, added, removed):
if not self.entered:
if self.is_initiator:
@@ -85,7 +89,7 @@ class TubeSpeak(ExportedGObject):
# Callbacks
def announceJoin_cb(self, sender=None):
"""Somebody joined."""
- if sender == self.tube.get_unique_name():
+ if sender == self.tube.get_unique_name() or not self.still_serving:
# sender is my bus name, so ignore my own signal
return
self._logger.debug('Welcoming %s and sending them data', sender)
diff --git a/FileShare.activity/icons/epiphany-download.svg b/FileShare.activity/icons/epiphany-download.svg
new file mode 100644
index 0000000..3b2cc90
--- /dev/null
+++ b/FileShare.activity/icons/epiphany-download.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ version="1.0"
+ x="0"
+ y="0"
+ width="48pt"
+ height="48pt"
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.37"
+ sodipodi:docname="stock_ephy_download.svg"
+ sodipodi:docbase="/home/dan/Projects/Lila-gtk/gtk-2.0"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <sodipodi:namedview
+ id="base"
+ inkscape:zoom="6.99187184"
+ inkscape:cx="26.6988392"
+ inkscape:cy="22.4514457"
+ inkscape:window-width="535"
+ inkscape:window-height="532"
+ inkscape:window-x="207"
+ inkscape:window-y="82" />
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop571" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop572" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient563">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop564" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop565" />
+ </linearGradient>
+ <linearGradient
+ x1="0.00980392"
+ y1="0.01562500"
+ x2="0.98529410"
+ y2="0.97656250"
+ id="linearGradient566"
+ xlink:href="#linearGradient563" />
+ <linearGradient
+ x1="0.007273"
+ y1="-0.030301"
+ x2="0.985455"
+ y2="1.045454"
+ id="linearGradient569"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.007273"
+ y1="0.013158"
+ x2="0.978182"
+ y2="0.973684"
+ id="linearGradient573"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.006712"
+ y1="0.046874"
+ x2="1.020134"
+ y2="0.984375"
+ id="linearGradient575"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ id="linearGradient578"
+ xlink:href="#linearGradient563"
+ x1="0.00000000"
+ y1="0.00000000"
+ x2="0.97709924"
+ y2="0.99218750" />
+ <linearGradient
+ xlink:href="#linearGradient570"
+ id="linearGradient892"
+ x1="-0.00000000"
+ y1="-0.00000000"
+ x2="1.00000000"
+ y2="1.00781250" />
+ </defs>
+ <path
+ d="M 2.1976212 52.113058 C 3.1625552 52.698083 31.077707 59.727551 32.851323 59.385625 C 34.645931 59.064385 58.074943 39.453822 58.989057 37.733387 C 59.765015 36.438123 59.907345 29.176459 58.989057 28.477624 C 57.784877 27.726431 31.679645 22.336601 29.977448 22.857946 C 28.220845 23.354129 2.6924369 40.116181 1.7870744 41.369671 C 0.91908407 42.551235 1.4447099 51.527732 2.1976212 52.113058 z "
+ style="font-size:12;opacity:0.302675;fill-rule:evenodd;stroke-width:12.5;"
+ id="path776" />
+ <path
+ d="M 2.6932141 49.561307 C 3.6126394 50.118736 30.211247 56.816676 31.901216 56.490781 C 33.611184 56.18488 55.935229 37.499111 56.806233 35.859815 C 57.545594 34.625638 57.681213 27.706348 56.806233 27.040482 C 55.658842 26.324804 30.784795 21.189074 29.162879 21.685929 C 27.48912 22.158713 3.164693 38.130222 2.3020298 39.324506 C 1.474976 40.450342 1.9758121 49.003486 2.6932141 49.561307 z "
+ style="font-size:12;fill:url(#linearGradient566);fill-rule:evenodd;stroke:#261933;stroke-width:1.875;stroke-dasharray:none;"
+ id="path679" />
+ <path
+ d="M 3.6059609 48.143936 C 3.346097 47.610289 2.4458833 40.451992 3.3451745 40.426942 C 4.7222744 40.38481 29.721379 46.370281 29.945247 46.82996 C 30.156007 47.262743 12.342011 42.698522 4.8335089 43.326918 C 3.5623132 43.433416 3.780744 48.502841 3.6059609 48.143936 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient569);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path680" />
+ <path
+ d="M 4.7795034 39.481964 C 4.8237913 39.107529 28.085777 23.405896 29.68449 23.260763 C 31.338928 23.122421 54.632998 27.93303 54.589602 28.300386 C 54.546111 28.66803 35.645303 24.82618 29.608088 26.133852 C 24.112482 27.3524 4.736866 39.842424 4.7795034 39.481964 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient573);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path682" />
+ <path
+ d="M 31.901216 53.970874 C 31.570269 53.685459 30.674513 47.855897 31.433582 46.395717 C 32.318272 44.787098 54.149731 29.29332 54.459225 29.560292 C 54.75823 29.818229 39.093004 40.56703 33.074622 47.079748 C 31.573765 48.703992 32.17877 54.210566 31.901216 53.970874 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient575);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path683" />
+ <ellipse
+ cx="410.204895"
+ cy="422.408997"
+ rx="11.720139"
+ ry="11.720139"
+ transform="matrix(0.141210,0.000000,0.000000,0.170551,-31.26207,-21.40817)"
+ style="font-size:12;fill:#80ff80;fill-rule:evenodd;stroke:#003f00;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;"
+ id="path722" />
+ <path
+ style="font-size:12;fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:14.8479;fill-opacity:1;opacity:0.302675;"
+ d="M 39.692313 3.450084 C 38.951141 2.2647565 20.997285 2.7054962 20.00552 3.450084 C 18.875703 4.3355888 20.741974 18.748418 20.00552 19.927074 C 19.438944 20.950257 10.498027 18.926753 10.804084 19.927074 C 11.122486 20.857048 25.262594 39.951129 29.206956 40.041841 C 32.920278 40.000954 48.390157 21.234801 48.679763 19.927074 C 48.908519 18.774595 39.930811 20.624791 39.264339 19.713087 C 38.38121 18.565131 40.586228 4.7283742 39.692313 3.450084 z "
+ id="path617"
+ sodipodi:nodetypes="csssssss" />
+ <path
+ style="font-size:12;fill-rule:evenodd;stroke:#261933;stroke-width:1.875;stroke-dasharray:none;fill:url(#linearGradient578);"
+ d="M 37.845469 4.4919709 C 37.181871 3.4307055 21.107141 3.8253153 20.219178 4.4919709 C 19.207613 5.2847961 20.878551 18.189119 20.219178 19.244411 C 19.711902 20.160503 11.706777 18.348788 11.9808 19.244411 C 12.265878 20.07705 24.68582 37.172665 28.457553 37.253881 C 31.902332 37.217199 45.632961 20.415265 45.892256 19.244411 C 46.097069 18.212555 38.059005 19.869102 37.462289 19.05282 C 36.671592 18.025013 38.645822 5.6364699 37.845469 4.4919709 z "
+ id="path589"
+ sodipodi:nodetypes="csssssss" />
+ <path
+ style="fill:#261e2e;fill-rule:evenodd;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;opacity:0.201783;"
+ d="M 28.837047 3.9704823 C 28.68536 5.3183035 27.836424 36.108546 28.752121 37.091277 C 29.424038 37.903526 43.472324 23.530698 45.482369 19.426853 C 46.189927 17.982256 38.114542 21.081748 37.244634 19.341928 C 35.680023 16.212706 39.011021 8.4071048 37.584334 4.8197333 C 37.317256 4.0574148 28.946618 3.0818048 28.837047 3.9704823 z "
+ id="path644"
+ sodipodi:nodetypes="csssss" />
+ <path
+ style="fill:url(#linearGradient892);fill-rule:evenodd;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;"
+ d="M 15.93541 22.368667 C 15.596649 22.214684 13.995636 20.486083 14.525236 20.394421 C 16.43994 20.06303 21.387316 21.487885 21.842624 20.154217 C 22.550587 16.832372 20.703627 6.800277 21.717132 6.0106304 C 22.494446 5.1326982 36.790831 5.6886495 37.088046 6.0106304 C 37.354901 6.2997264 24.845935 6.4206222 23.409342 7.8438584 C 22.320199 9.0297848 24.494574 18.348951 22.949848 21.14134 C 22.050271 22.7675 18.524461 21.058709 16.076428 21.09951 C 15.704109 21.105715 16.113713 22.449713 15.93541 22.368667 z "
+ id="path613"
+ sodipodi:nodetypes="cssssssss" />
+</svg>
diff --git a/FileShare.activity/icons/fs_gtk-add.svg b/FileShare.activity/icons/fs_gtk-add.svg
new file mode 100644
index 0000000..d375f0e
--- /dev/null
+++ b/FileShare.activity/icons/fs_gtk-add.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.39"
+ width="48pt"
+ height="48pt"
+ sodipodi:docbase="/home/scaba/files/pre-release/lila-gnome"
+ sodipodi:docname="gtk-add2.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop585" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1.00000000"
+ id="stop586" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient578">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop579" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop580" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient578"
+ id="linearGradient581"
+ x1="0.00757576"
+ y1="0.03100775"
+ x2="0.99242425"
+ y2="0.99224806" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient583"
+ x1="-0.01470588"
+ y1="0.00775194"
+ x2="0.97058821"
+ y2="0.96124029" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient654"
+ x1="0.00729927"
+ y1="0.04081633"
+ x2="0.98175180"
+ y2="0.91836733" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient655"
+ x1="-0.06250000"
+ y1="0.00775194"
+ x2="0.93750000"
+ y2="0.98449612" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="33.548423"
+ inkscape:cy="23.844747"
+ inkscape:window-width="1022"
+ inkscape:window-height="695"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata926">
+ <rdf:RDF
+ id="RDF927">
+ <cc:Work
+ rdf:about=""
+ id="Work928">
+ <dc:format
+ id="format929">image/svg+xml</dc:format>
+ <dc:type
+ id="type931"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ style="font-size:12.000000;opacity:0.29636899;fill:#000000;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:18.750000;"
+ d="M 27.266060,8.4561476 C 25.914000,10.467244 28.801700,25.036081 27.389340,26.551916 C 26.169560,28.063592 10.592270,25.318211 8.6020096,26.460388 C 6.4734896,27.884276 6.4115056,36.715566 8.6795256,37.829078 C 10.830716,38.978138 25.992545,36.353268 27.278855,37.985330 C 28.627825,39.267581 25.794842,53.351998 27.329562,55.770435 C 28.760502,57.934901 37.280085,58.077211 38.745245,55.861352 C 40.200615,53.471077 37.821935,39.386569 39.058975,37.953582 C 40.342575,36.655870 55.287485,39.044192 56.809255,37.686846 C 58.869955,36.052078 58.963435,27.891585 56.783065,26.478731 C 54.854305,25.106310 40.662685,27.761609 39.201205,26.583664 C 37.647285,25.367929 40.129665,10.291532 38.777605,8.3640056 C 37.419195,6.2373256 28.607000,6.2739266 27.266060,8.4561476 z "
+ id="path656"
+ sodipodi:nodetypes="cssssssssssss" />
+ <path
+ style="font-size:12.000000;fill:url(#linearGradient581);fill-rule:evenodd;stroke:#261933;stroke-width:1.8800200;"
+ d="M 24.836728,6.1112780 C 23.602698,7.9468000 26.212248,22.928051 24.923188,24.311550 C 23.809898,25.691252 7.9189589,23.379289 6.1024549,24.421752 C 4.1597649,25.721331 3.9702209,34.507751 6.0402369,35.524050 C 8.0036269,36.572792 23.638978,33.923990 24.812988,35.413566 C 26.044188,36.583875 23.460798,51.474002 24.861538,53.681305 C 26.167558,55.656808 34.860668,55.641491 36.197908,53.619088 C 37.526218,51.437489 35.193028,37.003501 36.322058,35.695618 C 37.493598,34.511201 52.952578,36.714060 54.341498,35.475216 C 56.222288,33.983168 56.172768,25.649611 54.182748,24.360102 C 52.422378,23.107496 37.594018,25.325007 36.260128,24.249901 C 34.841868,23.140301 37.470408,7.8998370 36.236388,6.1405880 C 34.996578,4.1995720 26.060598,4.1195720 24.836728,6.1112780 z "
+ id="path650"
+ sodipodi:nodetypes="cssssssssssss" />
+ <path
+ style="fill:url(#linearGradient583);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 6.7984249,33.790168 C 6.4454259,33.372986 5.5395709,26.332371 7.0145459,25.916046 C 12.348357,24.410535 22.757308,28.647460 26.176478,25.370755 C 29.346458,22.332857 25.015288,11.759136 26.392028,6.9196970 C 26.827308,5.3896260 33.913528,6.3707630 34.208488,6.8132090 C 34.462618,7.1944060 28.238318,7.1936980 27.931688,8.7268720 C 26.865578,14.057395 30.477648,23.861521 27.383828,26.799353 C 23.943408,30.066303 14.696654,26.040971 8.6635479,27.229311 C 7.4485899,27.468623 7.0494309,34.086810 6.7984249,33.790168 z "
+ id="path651"
+ sodipodi:nodetypes="cssssssss" />
+ <path
+ style="opacity:0.80082798;fill:url(#linearGradient655);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 26.062218,52.564224 C 25.830478,51.160880 26.674558,38.031424 27.213598,35.623454 C 27.432058,34.647601 28.487538,40.164554 28.334728,42.412756 C 28.103738,45.811480 26.204178,53.423981 26.062218,52.564224 z "
+ id="path652"
+ sodipodi:nodetypes="csss" />
+ <path
+ style="opacity:0.80082798;fill:url(#linearGradient654);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 36.617198,26.636979 C 40.005318,25.813513 52.631848,25.317733 53.408828,25.618097 C 54.010868,25.850838 44.978498,27.528976 40.750458,27.906855 C 39.328308,28.033958 35.734168,26.851598 36.617198,26.636979 z "
+ id="path653"
+ sodipodi:nodetypes="csss" />
+</svg>
diff --git a/FileShare.activity/icons/fs_gtk-remove.svg b/FileShare.activity/icons/fs_gtk-remove.svg
new file mode 100644
index 0000000..2cbd331
--- /dev/null
+++ b/FileShare.activity/icons/fs_gtk-remove.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.37"
+ width="48pt"
+ height="48pt"
+ sodipodi:docbase="/usr/share/themes/Lila/gtk-2.0"
+ sodipodi:docname="stock_remove.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop585" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1.00000000"
+ id="stop586" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient578">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop579" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop580" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient578"
+ id="linearGradient581"
+ x1="0.00364964"
+ y1="0.04477612"
+ x2="0.99270076"
+ y2="0.95522386" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient583"
+ x1="-0.00000000"
+ y1="0.00000000"
+ x2="0.99635035"
+ y2="0.96774191" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient654"
+ x1="0.00729927"
+ y1="0.04081633"
+ x2="0.98175180"
+ y2="0.91836733" />
+ <linearGradient
+ xlink:href="#linearGradient584"
+ id="linearGradient655"
+ x1="-0.06250000"
+ y1="0.00775194"
+ x2="0.93750000"
+ y2="0.98449612" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.64233871"
+ inkscape:cx="27.6645170"
+ inkscape:cy="24.2153912"
+ inkscape:window-width="640"
+ inkscape:window-height="516"
+ inkscape:window-x="195"
+ inkscape:window-y="89" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-opacity:1;stroke-width:18.75;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;stroke-dasharray:none;opacity:0.296369;"
+ d="M 6.3770303 29.343265 C 20.129569 27.204219 43.24816 26.886382 57.064966 29.343265 C 60.15355 29.934604 60.180462 36.862092 57.064965 37.340372 C 43.043307 39.304432 19.924802 39.673659 6.3770303 37.606934 C 3.2336318 36.962222 3.2335915 30.00452 6.3770303 29.343265 z "
+ id="path659"
+ sodipodi:nodetypes="cssss" />
+ <path
+ style="font-size:12;fill:url(#linearGradient581);fill-rule:evenodd;stroke:#261933;stroke-width:1.87105;"
+ d="M 8.1694426 28.343869 C 20.548368 26.41848 41.357853 26.132389 53.794626 28.343869 C 56.574717 28.876137 56.598942 35.111703 53.794626 35.542212 C 41.17346 37.310111 20.364052 37.642458 8.1694426 35.782158 C 5.3400109 35.201827 5.3399738 28.939082 8.1694426 28.343869 z "
+ id="path657"
+ sodipodi:nodetypes="cssss" />
+ <path
+ style="fill:url(#linearGradient583);fill-rule:evenodd;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;"
+ d="M 8.2358813 33.209263 C 7.993537 32.954355 7.7513252 30.342628 8.7889435 30.155263 C 23.344304 27.357174 51.525084 29.416716 51.743323 29.646254 C 51.955243 29.869157 23.544433 29.376788 10.079417 31.512588 C 9.2335166 31.636105 8.4236961 33.406796 8.2358813 33.209263 z "
+ id="path658"
+ sodipodi:nodetypes="cssss" />
+</svg>
diff --git a/FileShare.activity/icons/gaim-link.svg b/FileShare.activity/icons/gaim-link.svg
new file mode 100644
index 0000000..d513dc4
--- /dev/null
+++ b/FileShare.activity/icons/gaim-link.svg
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
+<svg
+ version="1.0"
+ x="0"
+ y="0"
+ width="48pt"
+ height="48pt"
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.39"
+ sodipodi:docname="gaim-link.svg"
+ sodipodi:docbase="/home/stefan/software/Lila-themes/lila-gnome/Lila/scalable/stock"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.0000000"
+ inkscape:cx="35.035953"
+ inkscape:cy="20.631004"
+ inkscape:window-width="848"
+ inkscape:window-height="601"
+ inkscape:window-x="136"
+ inkscape:window-y="26" />
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient650">
+ <stop
+ style="stop-color:#3f3f7f;stop-opacity:1;"
+ offset="0"
+ id="stop651" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop652" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient711">
+ <stop
+ style="stop-color:#003300;stop-opacity:0.6;"
+ offset="0"
+ id="stop712" />
+ <stop
+ style="stop-color:#003300;stop-opacity:1;"
+ offset="1"
+ id="stop713" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient707">
+ <stop
+ style="stop-color:#3fbf3f;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop708" />
+ <stop
+ style="stop-color:#7fff7f;stop-opacity:1;"
+ offset="1"
+ id="stop709" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop571" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop572" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient563">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop564" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop565" />
+ </linearGradient>
+ <linearGradient
+ x1="0.03846154"
+ y1="0.07031250"
+ x2="0.98461539"
+ y2="0.96875000"
+ id="linearGradient566"
+ xlink:href="#linearGradient563" />
+ <linearGradient
+ x1="0.006536"
+ y1="0.015625"
+ x2="0.849673"
+ y2="0.867188"
+ id="linearGradient569"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ id="linearGradient573"
+ xlink:href="#linearGradient563"
+ x1="1.96644123e-9"
+ y1="-1.26793864e-9"
+ x2="1"
+ y2="-1.26793864e-9" />
+ <linearGradient
+ id="linearGradient575"
+ xlink:href="#linearGradient570"
+ x1="7.29962951e-3"
+ y1="3.28290298e-7"
+ x2="0.89781022"
+ y2="0.875" />
+ <linearGradient
+ id="linearGradient578"
+ xlink:href="#linearGradient570"
+ x1="1.73982717e-2"
+ y1="2.40747395e-5"
+ x2="0.88695693"
+ y2="0.82812494" />
+ <linearGradient
+ xlink:href="#linearGradient707"
+ id="linearGradient706"
+ x1="-2.05214734e-10"
+ y1="1.22491656e-7"
+ x2="1"
+ y2="1.22491656e-7" />
+ <linearGradient
+ xlink:href="#linearGradient711"
+ id="linearGradient710"
+ x1="0.13931887"
+ y1="0.21904872"
+ x2="0.75851387"
+ y2="0.38095272" />
+ <linearGradient
+ xlink:href="#linearGradient650"
+ id="linearGradient653"
+ x1="0.82031244"
+ y1="0.86718750"
+ x2="0.14843751"
+ y2="0.51562500" />
+ <sodipodi:namedview
+ id="namedview1561"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.9465337"
+ inkscape:cx="31.296452"
+ inkscape:cy="22.294062"
+ inkscape:window-width="640"
+ inkscape:window-height="526"
+ inkscape:window-x="98"
+ inkscape:window-y="205" />
+ <defs
+ id="defs1562">
+ <linearGradient
+ id="linearGradient1563">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop1564" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop1565" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient1566">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop1567" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop1568" />
+ </linearGradient>
+ <linearGradient
+ x1="0.038461540"
+ y1="0.070312500"
+ x2="0.98461539"
+ y2="0.96875000"
+ id="linearGradient1569"
+ xlink:href="#linearGradient563" />
+ <linearGradient
+ x1="0.0065359999"
+ y1="0.015625000"
+ x2="0.84967297"
+ y2="0.86718798"
+ id="linearGradient1570"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.0072800000"
+ y1="0.021274000"
+ x2="0.95999998"
+ y2="0.94680798"
+ id="linearGradient1571"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.98039198"
+ y1="0.97656202"
+ x2="0.0065359999"
+ y2="0.0078119999"
+ id="linearGradient1572"
+ xlink:href="#linearGradient563" />
+ <linearGradient
+ x1="-0.0066220001"
+ y1="0.0078130001"
+ x2="0.92053002"
+ y2="0.92187500"
+ id="linearGradient1573"
+ xlink:href="#linearGradient570" />
+ </defs>
+ <metadata
+ id="metadata1683">
+ <rdf:RDF
+ id="RDF1684">
+ <cc:Work
+ rdf:about=""
+ id="Work1685">
+ <dc:format
+ id="format1686">image/svg+xml</dc:format>
+ <dc:type
+ id="type1688"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ </defs>
+ <ellipse
+ cx="286.92639"
+ cy="278.06998"
+ rx="278.19861"
+ ry="278.19858"
+ transform="matrix(7.975571e-2,0.000000,0.000000,7.975571e-2,13.07137,9.842758)"
+ style="font-size:12.000000;opacity:0.30267498;fill-rule:evenodd;stroke-width:13.253600;"
+ id="ellipse1574"
+ d="M 565.12500 278.06998 A 278.19861 278.19858 0 1 0 8.7277832,278.06998 A 278.19861 278.19858 0 1 0 565.12500 278.06998 z"
+ sodipodi:cx="286.92639"
+ sodipodi:cy="278.06998"
+ sodipodi:rx="278.19861"
+ sodipodi:ry="278.19858" />
+ <ellipse
+ cx="286.92639"
+ cy="278.06998"
+ rx="278.19861"
+ ry="278.19858"
+ transform="matrix(7.975571e-2,0.000000,0.000000,7.975571e-2,11.13395,7.444051)"
+ style="font-size:12.000000;fill:url(#linearGradient566);fill-rule:evenodd;stroke:#261933;stroke-width:23.509289;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ id="ellipse1575"
+ d="M 565.12500 278.06998 A 278.19861 278.19858 0 1 0 8.7277832,278.06998 A 278.19861 278.19858 0 1 0 565.12500 278.06998 z"
+ sodipodi:cx="286.92639"
+ sodipodi:cy="278.06998"
+ sodipodi:rx="278.19861"
+ sodipodi:ry="278.19858" />
+ <path
+ d="M 11.295376,12.589173 C 12.250138,12.060148 13.299196,13.930215 14.590292,14.109020 C 15.743436,14.268547 18.547286,12.458415 20.053847,13.319478 C 21.052161,13.747113 20.202685,17.505625 19.898715,19.755876 C 19.516033,21.561911 18.294062,24.148798 17.529693,26.388162 C 17.132325,27.369294 14.371030,30.923927 14.258151,31.149682 C 14.145474,31.375237 15.340274,34.387559 14.596683,34.759555 C 13.821626,35.218257 12.864468,30.809252 11.212366,29.570200 C 10.499441,29.142365 8.8555206,29.340750 8.2793066,29.796056 C 7.5928025,30.168349 8.1836106,34.070005 9.1816446,35.210864 C 10.204763,36.745094 11.745485,37.925311 12.678969,39.497402 C 13.888754,41.535183 14.634244,43.859554 15.611879,46.040579 C 15.611879,46.040579 14.805056,48.824654 14.917934,48.824654 C 15.030811,48.824654 16.627176,52.019377 16.627176,52.019377 C 13.349340,49.529689 10.710611,47.100430 8.5049106,44.122772 C 6.9503316,42.023954 5.7104608,39.143784 5.3462077,36.790046 C 5.2216224,35.985121 6.7273247,35.502147 7.0383963,34.646777 C 7.6087559,33.220729 4.6178293,29.681380 4.4969618,28.525137 C 4.3485125,27.280092 5.1016534,22.299010 6.8127522,19.304668 C 8.0378596,16.965713 9.4675636,13.601772 11.295376,12.589173 z "
+ style="font-size:12.000000;opacity:0.50445902;fill:#261933;fill-rule:evenodd;stroke:#000000;stroke-width:0.11407400pt;"
+ id="path1576"
+ transform="matrix(0.846565,0.000000,0.000000,0.846565,8.524380,4.084620)" />
+ <path
+ d="M 30.728535,21.109603 C 30.118699,21.985352 29.466008,23.552945 29.825916,24.380745 C 30.218089,25.282466 31.914445,26.280278 32.984680,26.298658 C 34.095571,26.317838 35.229637,25.073393 36.368998,24.493723 C 37.373007,23.982979 38.341552,23.200229 39.414883,23.027118 C 40.673016,22.824240 42.455177,22.760308 43.363189,23.365750 C 44.034457,23.813363 44.301666,25.298448 44.152927,26.185981 C 43.837573,26.862745 42.782320,27.445412 43.137532,27.878141 C 43.448498,28.141754 45.606546,26.551684 45.957769,25.621994 C 46.245853,24.859625 44.878838,23.772807 45.055348,22.801663 C 45.197993,22.160162 47.541943,22.322384 48.326891,22.463331 C 48.974387,22.620861 49.603102,24.226614 50.244805,24.155390 C 50.832665,24.155390 52.300170,22.258455 52.459193,22.267344 C 53.071231,22.368434 53.516147,24.155390 53.516147,24.155390 C 52.463092,25.133127 51.613616,26.475167 50.357480,27.088501 C 48.379730,28.054349 46.045570,28.635916 43.814496,28.893436 C 40.179551,29.312880 35.870041,27.836786 32.759027,29.118991 C 30.304695,30.130689 27.154322,33.462166 27.118562,35.774850 C 27.079104,38.312888 28.725513,42.626298 31.677902,42.887212 C 35.252014,43.280487 38.987049,44.085307 40.274846,45.731820 C 41.280952,47.018317 40.108427,51.866043 40.270452,53.468903 C 40.331390,54.000324 41.878103,53.058846 42.799206,52.583465 C 44.209665,51.855654 45.915813,50.418420 46.408979,48.860712 C 47.344761,45.906032 47.450041,42.241416 47.086041,39.046289 C 46.773179,36.300279 44.046748,31.329588 44.378683,31.036805 C 44.685950,30.765699 47.100024,36.259523 49.003654,37.354232 C 50.108253,37.989241 52.642994,37.053160 53.403365,36.225961 C 53.921704,35.661974 52.472277,33.508615 52.839279,33.180173 C 53.186802,32.869211 55.394800,35.048639 55.546739,34.308446 C 56.757214,28.688059 55.619451,24.537974 53.640707,19.334337 C 52.021472,15.362557 47.431366,9.8950044 42.530298,7.2148983 C 41.840145,6.8341331 38.849299,8.5193184 36.541409,9.9954944 C 35.225742,10.653979 33.858628,12.636821 34.534294,13.112604 C 35.129946,13.582592 36.895626,11.997118 38.145165,11.715624 C 40.385128,11.180206 41.425897,11.470491 43.137532,12.310277 C 43.137532,12.310277 45.563497,14.317793 44.491258,15.807273 C 43.810605,16.708891 41.558251,16.709790 41.558251,16.709790 C 41.069383,16.446776 40.559338,15.820858 40.091646,15.920148 C 39.318592,16.084270 38.666000,17.127537 37.835504,17.499630 C 36.146441,18.255908 34.172388,18.410441 32.533371,19.304668 C 31.606579,19.518535 31.108321,20.532931 30.728535,21.109603 z "
+ style="font-size:12.000000;opacity:0.49999997;fill:#261933;fill-rule:evenodd;stroke:#000000;stroke-width:0.11407400pt;"
+ id="path1577"
+ transform="matrix(0.846565,0.000000,0.000000,0.846565,8.524380,4.084620)" />
+ <path
+ d="M 9.7897126,44.278397 C 9.4408926,43.232139 -3.7709049,19.569979 21.341446,7.4434802 C 32.727260,1.8927782 49.548460,12.183016 51.419628,18.341416 C 51.707810,19.273101 40.039706,5.9730305 23.412093,13.328368 C 1.7636042,22.842420 10.094783,45.193706 9.7897126,44.278397 z "
+ style="font-size:12.000000;opacity:0.69999999;fill:url(#linearGradient569);fill-rule:evenodd;stroke:none;stroke-width:0.099890900pt;"
+ id="path1578"
+ transform="matrix(0.846565,0.000000,0.000000,0.846565,8.524380,4.084620)" />
+ <path
+ style="opacity:0.69999999;fill:url(#linearGradient578);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.12500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 42.570513,46.356224 C 42.918907,44.019459 43.280234,42.265742 44.047045,41.307921 C 45.003776,39.717881 47.374820,39.792607 48.750846,39.932589 C 49.196220,39.976562 46.138832,40.900876 44.813974,42.250948 C 43.524305,43.565170 42.118404,48.650713 42.570513,46.356224 z "
+ id="path693"
+ sodipodi:nodetypes="cssss" />
+ <path
+ style="fill:#000000;fill-opacity:0.29999998;fill-rule:evenodd;stroke:#000000;stroke-width:2.0041690;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.29999998;"
+ d="M 15.196599,41.140595 L 12.546200,42.134738 C 10.589990,42.868488 9.5469609,43.808247 10.440648,44.865358 C 11.448982,46.264032 14.075739,45.757933 15.828889,45.106969 L 35.086069,37.956574 L 31.787944,33.625219 L 48.485184,33.998409 L 41.151818,45.980851 L 38.095305,42.154287 L 16.933042,50.094250 C 14.311793,51.077736 8.6950208,52.200209 5.4749465,47.395485 C 4.1252481,45.295767 3.6171000,40.464384 7.2093480,38.925033 L 13.063299,36.416507"
+ id="path704"
+ sodipodi:nodetypes="cssscccccsssc" />
+ <path
+ style="fill:url(#linearGradient706);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#003300;stroke-width:2.0041690;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1.0000000;"
+ d="M 12.061213,35.414422 L 14.194514,40.138510 L 11.544116,41.132653 C 9.5879056,41.866405 8.5448771,42.806160 9.4385624,43.863272 C 10.446897,45.261946 13.073656,44.755850 14.826805,44.104884 L 34.083984,36.954490 L 30.785858,32.623133 L 47.483100,32.996325 L 40.149732,44.978767 L 37.093219,41.152204 L 15.930959,49.092167 C 13.309710,50.075651 7.6929362,51.198125 4.4728619,46.393399 C 3.1231636,44.293682 2.6150154,39.462300 6.2072634,37.922947 L 12.061213,35.414422 z "
+ id="path654"
+ sodipodi:nodetypes="ccssscccccsssz" />
+ <metadata
+ id="metadata1019">
+ <rdf:RDF
+ id="RDF1020">
+ <cc:Work
+ rdf:about=""
+ id="Work1021">
+ <dc:format
+ id="format1022">image/svg+xml</dc:format>
+ <dc:type
+ id="type1024"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+</svg>
diff --git a/FileShare.activity/icons/gtk-network.svg b/FileShare.activity/icons/gtk-network.svg
new file mode 100644
index 0000000..cba87ab
--- /dev/null
+++ b/FileShare.activity/icons/gtk-network.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ version="1.0"
+ x="0"
+ y="0"
+ width="48pt"
+ height="48pt"
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.37"
+ sodipodi:docname="stock_network.svg"
+ sodipodi:docbase="/home/dan/Projects/Lila-gtk/gtk-2.0"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <sodipodi:namedview
+ id="base"
+ inkscape:zoom="6.99187184"
+ inkscape:cx="26.6988378"
+ inkscape:cy="22.4514457"
+ inkscape:window-width="501"
+ inkscape:window-height="533"
+ inkscape:window-x="342"
+ inkscape:window-y="287" />
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop571" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop572" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient563">
+ <stop
+ style="stop-color:#d9cce6;stop-opacity:1;"
+ offset="0.00000000"
+ id="stop564" />
+ <stop
+ style="stop-color:#73667f;stop-opacity:1;"
+ offset="1.00000000"
+ id="stop565" />
+ </linearGradient>
+ <linearGradient
+ x1="0.00980392"
+ y1="0.01562500"
+ x2="0.98529410"
+ y2="0.97656250"
+ id="linearGradient566"
+ xlink:href="#linearGradient563" />
+ <linearGradient
+ x1="0.007273"
+ y1="-0.030301"
+ x2="0.985455"
+ y2="1.045454"
+ id="linearGradient569"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.007273"
+ y1="0.013158"
+ x2="0.978182"
+ y2="0.973684"
+ id="linearGradient573"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ x1="0.006712"
+ y1="0.046874"
+ x2="1.020134"
+ y2="0.984375"
+ id="linearGradient575"
+ xlink:href="#linearGradient570" />
+ <linearGradient
+ id="linearGradient578"
+ xlink:href="#linearGradient570" />
+ </defs>
+ <path
+ d="M 2.2716739 49.584741 C 3.2366079 50.169766 31.15176 57.199234 32.925376 56.857308 C 34.719984 56.536068 58.148996 36.925505 59.06311 35.20507 C 59.839068 33.909806 59.981398 26.648142 59.06311 25.949307 C 57.85893 25.198114 31.753698 19.808284 30.051501 20.329629 C 28.294898 20.825812 2.7664896 37.587864 1.8611271 38.841354 C 0.99313677 40.022918 1.5187626 48.999415 2.2716739 49.584741 z "
+ style="font-size:12;opacity:0.302675;fill-rule:evenodd;stroke-width:12.5;"
+ id="path776" />
+ <path
+ d="M 2.7672668 47.03299 C 3.6866921 47.590419 30.2853 54.288359 31.975269 53.962464 C 33.685237 53.656563 56.009282 34.970794 56.880286 33.331498 C 57.619647 32.097321 57.755266 25.178031 56.880286 24.512165 C 55.732895 23.796487 30.858848 18.660757 29.236932 19.157612 C 27.563173 19.630396 3.2387457 35.601905 2.3760825 36.796189 C 1.5490287 37.922025 2.0498648 46.475169 2.7672668 47.03299 z "
+ style="font-size:12;fill:url(#linearGradient566);fill-rule:evenodd;stroke:#261933;stroke-width:1.875;stroke-dasharray:none;"
+ id="path679" />
+ <path
+ d="M 3.6800136 45.615619 C 3.4201497 45.081972 2.519936 37.923675 3.4192272 37.898625 C 4.7963271 37.856493 29.795432 43.841964 30.0193 44.301643 C 30.23006 44.734426 12.416064 40.170205 4.9075616 40.798601 C 3.6363659 40.905099 3.8547967 45.974524 3.6800136 45.615619 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient569);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path680" />
+ <path
+ d="M 4.8535561 36.953647 C 4.897844 36.579212 28.15983 20.877579 29.758543 20.732446 C 31.412981 20.594104 54.707051 25.404713 54.663655 25.772069 C 54.620164 26.139713 35.719356 22.297863 29.682141 23.605535 C 24.186535 24.824083 4.8109187 37.314107 4.8535561 36.953647 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient573);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path682" />
+ <path
+ d="M 31.975269 51.442557 C 31.644322 51.157142 30.748566 45.32758 31.507635 43.8674 C 32.392325 42.258781 54.223784 26.765003 54.533278 27.031975 C 54.832283 27.289912 39.167057 38.038713 33.148675 44.551431 C 31.647818 46.175675 32.252823 51.682249 31.975269 51.442557 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient575);fill-rule:evenodd;stroke:none;stroke-width:0.106691pt;"
+ id="path683" />
+ <ellipse
+ cx="410.204895"
+ cy="422.408997"
+ rx="11.720139"
+ ry="11.720139"
+ transform="matrix(0.141210,0.000000,0.000000,0.170551,-31.18802,-23.93649)"
+ style="font-size:12;fill:#80ff80;fill-rule:evenodd;stroke:#003f00;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;"
+ id="path722" />
+ <ellipse
+ cx="286.926392"
+ cy="278.069977"
+ rx="278.198608"
+ ry="278.198578"
+ transform="matrix(5.180418e-2,0.000000,0.000000,5.180418e-2,17.29701,6.787613)"
+ style="font-size:12;opacity:0.302675;fill-rule:evenodd;stroke-width:13.2536;"
+ id="path1023" />
+ <ellipse
+ cx="286.926392"
+ cy="278.069977"
+ rx="278.198608"
+ ry="278.198578"
+ transform="matrix(5.180418e-2,0.000000,0.000000,5.180418e-2,14.89717,5.355983)"
+ style="font-size:12;fill:url(#linearGradient566);fill-rule:evenodd;stroke:#261933;stroke-width:36.194;stroke-opacity:1;stroke-dasharray:none;"
+ id="path983" />
+ <path
+ d="M 19.413194 10.096374 C 19.938193 9.8054771 20.515043 10.833778 21.224983 10.932098 C 21.859068 11.019818 23.400832 10.024473 24.229251 10.49795 C 24.778197 10.733095 24.311093 12.799804 24.143948 14.037158 C 23.933521 15.030251 23.26159 16.452713 22.841284 17.684082 C 22.622782 18.22358 21.104416 20.178181 21.042347 20.302318 C 20.980389 20.426345 21.637378 22.082743 21.228497 22.287294 C 20.802313 22.539522 20.275997 20.115125 19.367549 19.433801 C 18.975529 19.198546 18.071581 19.307633 17.754736 19.557994 C 17.377245 19.762708 17.702115 21.908128 18.250907 22.535457 C 18.813494 23.379091 19.660697 24.028061 20.173996 24.892514 C 20.839225 26.013037 21.249151 27.291148 21.786728 28.490438 C 21.786728 28.490438 21.343076 30.021328 21.405145 30.021328 C 21.467213 30.021328 22.345013 31.778024 22.345013 31.778024 C 20.542616 30.409009 19.091647 29.073223 17.878789 27.435885 C 17.023966 26.281799 16.342193 24.698068 16.1419 23.403808 C 16.073394 22.961201 16.901341 22.695627 17.072391 22.225281 C 17.386017 21.441134 15.741384 19.494937 15.674922 18.859149 C 15.593293 18.174531 16.007426 15.435562 16.948315 13.789051 C 17.62197 12.50292 18.408128 10.653176 19.413194 10.096374 z "
+ style="font-size:12;opacity:0.504459;fill:#261933;fill-rule:evenodd;stroke:#000000;stroke-width:0.0627263pt;"
+ id="path565" />
+ <path
+ d="M 30.098986 14.781538 C 29.763653 15.26309 29.404755 16.125069 29.602659 16.580255 C 29.818305 17.076087 30.751087 17.624759 31.339581 17.634865 C 31.950432 17.645412 32.574025 16.961124 33.20053 16.642378 C 33.75261 16.361533 34.285187 15.931119 34.875384 15.83593 C 35.567199 15.724373 36.547163 15.689218 37.046455 16.022135 C 37.415568 16.268266 37.5625 17.084875 37.480712 17.572907 C 37.307307 17.945042 36.727051 18.265436 36.922372 18.503382 C 37.093365 18.648337 38.28002 17.773998 38.473148 17.262786 C 38.631558 16.843578 37.879872 16.245965 37.97693 15.711959 C 38.055367 15.359213 39.344245 15.448415 39.775867 15.525918 C 40.131909 15.61254 40.477622 16.495502 40.830478 16.456337 C 41.153728 16.456337 41.960671 15.413262 42.048113 15.41815 C 42.384657 15.473737 42.629305 16.456337 42.629305 16.456337 C 42.050257 16.99397 41.583152 17.731923 40.892435 18.06918 C 39.804922 18.600275 38.521428 18.920063 37.294618 19.061667 C 35.295856 19.292308 32.926167 18.480642 31.215501 19.185694 C 29.865927 19.742 28.133618 21.573894 28.113955 22.845578 C 28.092258 24.24118 28.997576 26.613013 30.621018 26.756483 C 32.58633 26.972735 34.640129 27.415284 35.348255 28.320659 C 35.901487 29.02807 35.256746 31.69371 35.34584 32.575081 C 35.379348 32.867296 36.229846 32.349601 36.736336 32.088201 C 37.511911 31.687997 38.450078 30.897699 38.721257 30.041156 C 39.235819 28.416454 39.293709 26.401376 39.093556 24.644458 C 38.921521 23.134499 37.422327 20.401244 37.604849 20.24025 C 37.773808 20.091176 39.101245 23.112088 40.148001 23.71404 C 40.755392 24.063215 42.14918 23.548488 42.567289 23.093633 C 42.85231 22.783511 42.055307 21.599435 42.257113 21.418832 C 42.448206 21.247842 43.662328 22.446254 43.745875 22.039241 C 44.411484 18.948735 43.785858 16.666711 42.697797 13.805365 C 41.807421 11.621386 39.283441 8.6149202 36.58847 7.1411991 C 36.208973 6.9318262 34.564384 7.8584661 33.295335 8.6701771 C 32.571884 9.0322611 31.820143 10.122574 32.191674 10.384195 C 32.519208 10.64263 33.49011 9.7708181 34.177199 9.6160321 C 35.408897 9.3216191 35.981189 9.4812401 36.922372 9.9430161 C 36.922372 9.9430161 38.256348 11.046897 37.666751 11.865923 C 37.292478 12.361701 36.053967 12.362195 36.053967 12.362195 C 35.785151 12.21757 35.50469 11.873394 35.247518 11.927991 C 34.822436 12.018237 34.463593 12.591903 34.006925 12.796507 C 33.078152 13.212365 31.992672 13.297339 31.091418 13.789051 C 30.581799 13.906651 30.307821 14.464441 30.098986 14.781538 z "
+ style="font-size:12;opacity:0.5;fill:#261933;fill-rule:evenodd;stroke:#000000;stroke-width:0.0627263pt;"
+ id="path566" />
+ <path
+ d="M 19.024191 27.068083 C 18.841369 26.519722 11.916846 14.117991 25.078646 7.762291 C 31.04614 4.8530758 39.862411 10.246361 40.843122 13.474081 C 40.994162 13.962392 34.878715 6.9916039 26.163906 10.846658 C 14.817573 15.833131 19.184083 27.547812 19.024191 27.068083 z "
+ style="font-size:12;opacity:0.7;fill:url(#linearGradient569);fill-rule:evenodd;stroke:none;stroke-width:0.0998909pt;"
+ id="path984" />
+</svg>