Merge lp:~submarine/unity-scope-virtualbox/previews into lp:unity-scope-virtualbox

Proposed by David Callé
Status: Merged
Approved by: Michal Hruby
Approved revision: 23
Merged at revision: 21
Proposed branch: lp:~submarine/unity-scope-virtualbox/previews
Merge into: lp:unity-scope-virtualbox
Diff against target: 131 lines (+71/-18)
2 files modified
data/virtualbox.scope.in (+1/-1)
src/unity_virtualbox_daemon.py (+70/-17)
To merge this branch: bzr merge lp:~submarine/unity-scope-virtualbox/previews
Reviewer Review Type Date Requested Status
Michal Hruby (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+160328@code.launchpad.net

Commit message

Add previews, displaying the same info as virtualbox details

Description of the change

Add previews, displaying the same info as virtualbox details

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Michal Hruby (mhr3) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'data/virtualbox.scope.in'
--- data/virtualbox.scope.in 2013-03-20 16:43:39 +0000
+++ data/virtualbox.scope.in 2013-04-23 10:45:34 +0000
@@ -1,5 +1,5 @@
1[Scope]1[Scope]
2DBusName=com.canonical.Unity.Scope.Boxes.VirtualBox2DBusName=com.canonical.Unity.Scope.Boxes.Virtualbox
3DBusPath=/com/canonical/unity/scope/boxes/virtualbox3DBusPath=/com/canonical/unity/scope/boxes/virtualbox
4Icon=4Icon=
5QueryBinary=virtualbox5QueryBinary=virtualbox
66
=== modified file 'src/unity_virtualbox_daemon.py'
--- src/unity_virtualbox_daemon.py 2013-03-19 22:30:15 +0000
+++ src/unity_virtualbox_daemon.py 2013-04-23 10:45:34 +0000
@@ -21,6 +21,7 @@
21import re21import re
22import shlex22import shlex
23import gettext23import gettext
24import datetime
2425
25APP_NAME = 'unity-scope-virtualbox'26APP_NAME = 'unity-scope-virtualbox'
26LOCAL_PATH = '/usr/share/locale/'27LOCAL_PATH = '/usr/share/locale/'
@@ -72,10 +73,15 @@
72 else:73 else:
73 vboxlist = EXTRA_DATA74 vboxlist = EXTRA_DATA
74 for vbox in vboxlist.splitlines():75 for vbox in vboxlist.splitlines():
75 vbox = re.sub('\{.*\}', '', vbox.decode('utf-8'))76 vbox_name = re.sub('\{.*\}', '', vbox.decode('utf-8'))
76 if search.lower() in vbox.lower():77 uuid = re.match(r'.*\{(.*)\}', vbox.decode('utf-8'))
77 results.append({'uri':shlex.split(vbox)[0],78 if uuid:
78 'title':shlex.split(vbox)[0]})79 uuid = uuid.group(1)
80 else:
81 uuid = shlex.split(vbox_name)[0]
82 if search.lower() in vbox_name.lower():
83 results.append({'uri':uuid,
84 'title':shlex.split(vbox_name)[0]})
79 except Exception as error:85 except Exception as error:
80 print (error)86 print (error)
81 return results87 return results
@@ -114,22 +120,59 @@
114 i['comment'] = ''120 i['comment'] = ''
115 if not 'dnd_uri' in i or not i['dnd_uri'] or i['dnd_uri'] == '':121 if not 'dnd_uri' in i or not i['dnd_uri'] or i['dnd_uri'] == '':
116 i['dnd_uri'] = i['uri']122 i['dnd_uri'] = i['uri']
117 i['metadata'] = {}123 i['provider_credits'] = GLib.Variant('s', PROVIDER_CREDITS)
118 if EXTRA_METADATA:124 result_set.add_result(**i)
119 for e in i:
120 for m in EXTRA_METADATA:
121 if m['id'] == e:
122 i['metadata'][e] = i[e]
123 i['metadata']['provider_credits'] = GLib.Variant('s', PROVIDER_CREDITS)
124 result = Unity.ScopeResult.create(str(i['uri']), str(i['icon']),
125 i['category'], i['result_type'],
126 str(i['mimetype']), str(i['title']),
127 str(i['comment']), str(i['dnd_uri']),
128 i['metadata'])
129 result_set.add_result(result)
130 except Exception as error:125 except Exception as error:
131 print (error)126 print (error)
132127
128class Preview (Unity.ResultPreviewer):
129
130 def do_run(self):
131 preview = Unity.GenericPreview.new(self.result.title, self.result.comment, None)
132 preview.props.image_source_uri = self.result.icon_hint
133 vboxinfo = subprocess.check_output(['vboxmanage', 'showvminfo', self.result.uri])
134 description_line = False
135 for line in vboxinfo.splitlines():
136 line = line.decode('utf-8')
137 if line.startswith('Guest OS:'):
138 os = re.match(r'.*:\s+([^\s].*)',line)
139 if os:
140 os_text = os.group(1)
141 preview.add_info(Unity.InfoHint.new("os", _("Operating System"), None, os_text))
142 if line.startswith('Memory size:'):
143 memsize = re.match(r'.*:\s+([^\s].*)',line)
144 if memsize:
145 memsize_text = memsize.group(1)
146 preview.add_info(Unity.InfoHint.new("memsize", _("Base Memory"), None, memsize_text))
147 if line.startswith('VRAM size:'):
148 vramsize = re.match(r'.*:\s+([^\s].*)',line)
149 if vramsize:
150 vramsize_text = vramsize.group(1)
151 preview.add_info(Unity.InfoHint.new("vramsize", _("Video Memory"), None, vramsize_text))
152 if line.startswith('Number of CPUs:'):
153 numcpu = re.match(r'.*:\s+([^\s].*)',line)
154 if numcpu:
155 numcpu_text = numcpu.group(1)
156 preview.add_info(Unity.InfoHint.new("numcpu", _("Processors"), None, numcpu_text))
157 if line.startswith('State:'):
158 state = re.match(r'.*:\s+([^\s].*)\(since\s(.*)\)',line)
159 if state:
160 state_text = state.group(1)
161 date = state.group(2)
162 translated_date = datetime.datetime.strptime(date[:-3], '%Y-%m-%dT%H:%M:%S.%f')
163 preview.props.subtitle = state_text.title() + "(%s)" % translated_date.strftime('%c')
164 if line.startswith('Description:'):
165 description_line = True
166 continue
167 if description_line:
168 preview.props.description_markup = line
169 description_line = False
170
171 icon = Gio.FileIcon.new (Gio.file_new_for_path(PROVIDER_ICON))
172 view_action = Unity.PreviewAction.new("launch", _("Launch"), icon)
173 preview.add_action(view_action)
174 return preview
175
133class Scope (Unity.AbstractScope):176class Scope (Unity.AbstractScope):
134 def __init__(self):177 def __init__(self):
135 Unity.AbstractScope.__init__(self)178 Unity.AbstractScope.__init__(self)
@@ -181,5 +224,15 @@
181 se = MySearch (search_context)224 se = MySearch (search_context)
182 return se225 return se
183226
227 def do_create_previewer(self, result, metadata):
228 rp = Preview()
229 rp.set_scope_result(result)
230 rp.set_search_metadata(metadata)
231 return rp
232
233 def do_activate(self, result, metadata, id):
234 GLib.spawn_async(["/usr/bin/vboxmanage", "startvm", result.uri])
235 return Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH, goto_uri=None)
236
184def load_scope():237def load_scope():
185 return Scope()238 return Scope()

Subscribers

People subscribed via source and target branches

to all changes: