209
210
sources = self.builder.get_object("menuitem_software_sources")
210
211
sources.set_sensitive(False)
212
# a main iteration friendly apt cache
213
self.cache = get_pkg_info()
215
self.cache.connect("cache-broken", self._on_apt_cache_broken)
213
with ExecutionTime("opening the pkginfo"):
214
# a main iteration friendly apt cache
215
self.cache = get_pkg_info()
217
self.cache.connect("cache-broken", self._on_apt_cache_broken)
218
pathname = os.path.join(xapian_base_path, "xapian")
219
self._use_axi = not options.disable_apt_xapian_index
221
self.db = StoreDatabase(pathname, self.cache)
222
self.db.open(use_axi = self._use_axi)
223
if self.db.schema_version() != DB_SCHEMA_VERSION:
224
LOG.warn("database format '%s' expected, but got '%s'" % (
225
DB_SCHEMA_VERSION, self.db.schema_version()))
226
if os.access(pathname, os.W_OK):
219
with ExecutionTime("opening the xapiandb"):
220
pathname = os.path.join(xapian_base_path, "xapian")
221
self._use_axi = not options.disable_apt_xapian_index
223
self.db = StoreDatabase(pathname, self.cache)
224
self.db.open(use_axi = self._use_axi)
225
if self.db.schema_version() != DB_SCHEMA_VERSION:
226
LOG.warn("database format '%s' expected, but got '%s'" % (
227
DB_SCHEMA_VERSION, self.db.schema_version()))
228
if os.access(pathname, os.W_OK):
229
self._rebuild_and_reopen_local_db(pathname)
230
except xapian.DatabaseOpeningError:
231
# Couldn't use that folder as a database
232
# This may be because we are in a bzr checkout and that
233
# folder is empty. If the folder is empty, and we can find the
234
# script that does population, populate a database in it.
235
if os.path.isdir(pathname) and not os.listdir(pathname):
227
236
self._rebuild_and_reopen_local_db(pathname)
228
except xapian.DatabaseOpeningError:
229
# Couldn't use that folder as a database
230
# This may be because we are in a bzr checkout and that
231
# folder is empty. If the folder is empty, and we can find the
232
# script that does population, populate a database in it.
233
if os.path.isdir(pathname) and not os.listdir(pathname):
234
self._rebuild_and_reopen_local_db(pathname)
235
except xapian.DatabaseCorruptError:
236
LOG.exception("xapian open failed")
238
_("Sorry, can not open the software database"),
239
_("Please re-install the 'software-center' "
241
# FIXME: force rebuild by providing a dbus service for this
237
except xapian.DatabaseCorruptError:
238
LOG.exception("xapian open failed")
240
_("Sorry, can not open the software database"),
241
_("Please re-install the 'software-center' "
243
# FIXME: force rebuild by providing a dbus service for this
244
246
# additional icons come from app-install-data
245
self.icons = get_sc_icon_theme(self.datadir)
247
with ExecutionTime("building the icon cache"):
248
self.icons = get_sc_icon_theme(self.datadir)
248
self.backend = get_install_backend()
249
self.backend.ui = InstallBackendUI()
250
self.backend.connect("transaction-finished", self._on_transaction_finished)
251
self.backend.connect("channels-changed", self.on_channels_changed)
251
with ExecutionTime("creating the backend"):
252
self.backend = get_install_backend()
253
self.backend.ui = InstallBackendUI()
254
self.backend.connect("transaction-finished", self._on_transaction_finished)
255
self.backend.connect("channels-changed", self.on_channels_changed)
253
257
# high level app management
254
self.app_manager = ApplicationManager(self.db, self.backend, self.icons)
258
with ExecutionTime("get the app-manager"):
259
self.app_manager = ApplicationManager(self.db, self.backend, self.icons)
257
262
self._block_menuitem_view = False
278
283
# register view manager and create view panes/widgets
279
self.view_manager = ViewManager(self.notebook_view, options)
281
self.global_pane = GlobalPane(self.view_manager, self.datadir, self.db, self.cache, self.icons)
282
self.vbox1.pack_start(self.global_pane, False, False, 0)
283
self.vbox1.reorder_child(self.global_pane, 1)
286
self.available_pane = AvailablePane(self.cache,
284
with ExecutionTime("ViewManager"):
285
self.view_manager = ViewManager(self.notebook_view, options)
287
with ExecutionTime("building panes"):
288
self.global_pane = GlobalPane(self.view_manager, self.datadir, self.db, self.cache, self.icons)
289
self.vbox1.pack_start(self.global_pane, False, False, 0)
290
self.vbox1.reorder_child(self.global_pane, 1)
293
self.available_pane = AvailablePane(self.cache,
298
self.navhistory_back_action,
299
self.navhistory_forward_action)
300
self.available_pane.connect("available-pane-created", self.on_available_pane_created)
301
self.view_manager.register(self.available_pane, ViewPages.AVAILABLE)
303
# installed pane (view not fully initialized at this point)
304
self.installed_pane = InstalledPane(self.cache,
309
#~ self.installed_pane.connect("installed-pane-created", self.on_installed_pane_created)
310
self.view_manager.register(self.installed_pane, ViewPages.INSTALLED)
312
# history pane (not fully loaded at this point)
313
self.history_pane = HistoryPane(self.cache,
291
self.navhistory_back_action,
292
self.navhistory_forward_action)
293
self.available_pane.connect("available-pane-created", self.on_available_pane_created)
294
self.view_manager.register(self.available_pane, ViewPages.AVAILABLE)
296
# installed pane (view not fully initialized at this point)
297
self.installed_pane = InstalledPane(self.cache,
302
#~ self.installed_pane.connect("installed-pane-created", self.on_installed_pane_created)
303
self.view_manager.register(self.installed_pane, ViewPages.INSTALLED)
305
# history pane (not fully loaded at this point)
306
self.history_pane = HistoryPane(self.cache,
311
self.view_manager.register(self.history_pane, ViewPages.HISTORY)
314
self.pending_pane = PendingPane(self.icons)
315
self.view_manager.register(self.pending_pane, ViewPages.PENDING)
318
self.view_manager.register(self.history_pane, ViewPages.HISTORY)
321
self.pending_pane = PendingPane(self.icons)
322
self.view_manager.register(self.pending_pane, ViewPages.PENDING)
317
324
# TRANSLATORS: this is the help menuitem label, e.g. Ubuntu Software Center _Help
318
325
self.menuitem_help.set_label(_("%s _Help")%self.distro.get_app_name())
321
328
self.window_main.set_size_request(730, 470)
324
self.review_loader = get_review_loader(self.cache, self.db)
325
# FIXME: add some kind of throttle, I-M-S here
326
self.review_loader.refresh_review_stats(self.on_review_stats_loaded)
327
#load usefulness votes from server when app starts
328
self.useful_cache = UsefulnessCache(True)
329
self.setup_database_rebuilding_listener()
331
with ExecutionTime("create review loader"):
332
self.review_loader = get_review_loader(self.cache, self.db)
333
# FIXME: add some kind of throttle, I-M-S here
334
self.review_loader.refresh_review_stats(self.on_review_stats_loaded)
335
#load usefulness votes from server when app starts
336
self.useful_cache = UsefulnessCache(True)
337
self.setup_database_rebuilding_listener()
331
# open plugin manager and load plugins
332
self.plugin_manager = PluginManager(self, SOFTWARE_CENTER_PLUGIN_DIRS)
333
self.plugin_manager.load_plugins()
339
with ExecutionTime("create plugin manager"):
340
# open plugin manager and load plugins
341
self.plugin_manager = PluginManager(self, SOFTWARE_CENTER_PLUGIN_DIRS)
342
self.plugin_manager.load_plugins()
335
344
# setup window name and about information (needs branding)
336
345
name = self.distro.get_app_name()
384
393
if not (options.enable_lp or och):
385
394
file_menu.remove(self.builder.get_object("separator_login"))
387
sc_agent_update = os.path.join(
388
self.datadir, "update-software-center-agent")
389
(pid, stdin, stdout, stderr) = GObject.spawn_async(
390
[sc_agent_update, "--datadir", datadir],
391
flags=GObject.SPAWN_DO_NOT_REAP_CHILD)
392
GObject.child_watch_add(
393
pid, self._on_update_software_center_agent_finished)
396
with ExecutionTime("run update-software-center-agent"):
397
sc_agent_update = os.path.join(
398
self.datadir, "update-software-center-agent")
399
(pid, stdin, stdout, stderr) = GObject.spawn_async(
400
[sc_agent_update, "--datadir", datadir],
401
flags=GObject.SPAWN_DO_NOT_REAP_CHILD)
402
GObject.child_watch_add(
403
pid, self._on_update_software_center_agent_finished)
395
405
# TODO: Remove the following two lines once we have remove repository
396
406
# support in aptdaemon (see LP: #723911)