diff --git a/po/POTFILES.in b/po/POTFILES.in index c3af551d5..df379fdd7 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -16,7 +16,6 @@ src/virtManager/connectauth.py src/virtManager/console.py src/virtManager/create.py src/virtManager/createinterface.py -src/virtManager/createmeter.py src/virtManager/createnet.py src/virtManager/createpool.py src/virtManager/createvol.py diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py index 4f35fd046..47cb84e3e 100644 --- a/src/virtManager/addhardware.py +++ b/src/virtManager/addhardware.py @@ -32,7 +32,6 @@ from virtinst import (VirtualCharDevice, VirtualDevice, import virtManager.util as util import virtManager.uihelpers as uihelpers from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtManager.storagebrowse import vmmStorageBrowser from virtManager.baseclass import vmmGObjectUI @@ -1124,7 +1123,7 @@ class vmmAddHardware(vmmGObjectUI): return def do_file_allocate(asyncjob, disk): - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() # If creating disk via storage API, we need to thread # off a new connection diff --git a/src/virtManager/asyncjob.py b/src/virtManager/asyncjob.py index 43344e220..e64bd84f1 100644 --- a/src/virtManager/asyncjob.py +++ b/src/virtManager/asyncjob.py @@ -26,9 +26,60 @@ import gtk import gobject import libvirt +import urlgrabber from virtManager.baseclass import vmmGObjectUI +class vmmCreateMeter(urlgrabber.progress.BaseMeter): + def __init__(self, asyncjob): + # progress meter has to run asynchronously, so pass in the + # async job to call back to with progress info + urlgrabber.progress.BaseMeter.__init__(self) + self.asyncjob = asyncjob + self.started = False + + def _do_start(self, now=None): + if self.text is not None: + text = self.text + else: + text = self.basename + if self.size is None: + out = " %5sB" % (0) + self.asyncjob.pulse_pbar(out, text) + else: + out = "%3i%% %5sB" % (0, 0) + self.asyncjob.set_pbar_fraction(0, out, text) + self.started = True + + def _do_update(self, amount_read, now=None): + if self.text is not None: + text = self.text + else: + text = self.basename + fread = urlgrabber.progress.format_number(amount_read) + if self.size is None: + out = " %5sB" % (fread) + self.asyncjob.pulse_pbar(out, text) + else: + frac = self.re.fraction_read() + out = "%3i%% %5sB" % (frac * 100, fread) + self.asyncjob.set_pbar_fraction(frac, out, text) + + def _do_end(self, amount_read, now=None): + if self.text is not None: + text = self.text + else: + text = self.basename + fread = urlgrabber.progress.format_number(amount_read) + if self.size is None: + out = " %5sB" % (fread) + self.asyncjob.pulse_pbar(out, text) + else: + out = "%3i%% %5sB" % (100, fread) + self.asyncjob.set_pbar_done(out, text) + self.started = False + + # This thin wrapper only exists so we can put debugging # code in the run() method every now & then class asyncJobWorker(threading.Thread): @@ -118,6 +169,7 @@ class vmmAsyncJob(vmmGObjectUI): self.stage = self.widget("pbar-stage") self.pbar = self.widget("pbar") self.is_pulsing = True + self._meter = None args = [self] + args self.bg_thread = asyncJobWorker(callback, args) @@ -154,6 +206,11 @@ class vmmAsyncJob(vmmGObjectUI): def get_data(self): return self._data + def get_meter(self): + if not self._meter: + self._meter = vmmCreateMeter(self) + return self._meter + def can_cancel(self): return bool(self.cancel_job) @@ -161,7 +218,7 @@ class vmmAsyncJob(vmmGObjectUI): self.bg_thread = None self.cancel_job = None self.cancel_args = None - + self._meter = None #################### # Internal helpers # diff --git a/src/virtManager/clone.py b/src/virtManager/clone.py index 652628ad8..d8674a7ba 100644 --- a/src/virtManager/clone.py +++ b/src/virtManager/clone.py @@ -25,7 +25,6 @@ import gtk from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtManager.storagebrowse import vmmStorageBrowser from virtManager import util @@ -823,7 +822,7 @@ class vmmCloneVM(vmmGObjectUI): # Open a seperate connection to install on since this is async logging.debug("Threading off connection to clone VM.") newconn = util.dup_conn(self.conn).vmm - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() self.clone_design.orig_connection = newconn for d in self.clone_design.clone_virtual_disks: diff --git a/src/virtManager/create.py b/src/virtManager/create.py index acfb16133..2dfabba6e 100644 --- a/src/virtManager/create.py +++ b/src/virtManager/create.py @@ -30,7 +30,6 @@ from virtManager import util from virtManager.mediadev import MEDIA_CDROM from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtManager.storagebrowse import vmmStorageBrowser from virtManager.details import vmmDetails from virtManager.domain import vmmDomainVirtinst @@ -1924,7 +1923,7 @@ class vmmCreate(vmmGObjectUI): self.emit("action-show-vm", self.conn.get_uri(), guest.uuid) def do_install(self, asyncjob, guest): - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() logging.debug("Starting background install process") diff --git a/src/virtManager/createinterface.py b/src/virtManager/createinterface.py index 46ff5c40d..d0acce0d9 100644 --- a/src/virtManager/createinterface.py +++ b/src/virtManager/createinterface.py @@ -28,7 +28,6 @@ from virtManager import util from virtManager import uihelpers from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter PAGE_TYPE = 0 PAGE_DETAILS = 1 @@ -1129,7 +1128,7 @@ class vmmCreateInterface(vmmGObjectUI): self.close() def do_install(self, asyncjob, activate): - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() error = None details = None diff --git a/src/virtManager/createmeter.py b/src/virtManager/createmeter.py deleted file mode 100644 index d30744cbc..000000000 --- a/src/virtManager/createmeter.py +++ /dev/null @@ -1,70 +0,0 @@ -# -# Copyright (C) 2006 Red Hat, Inc. -# Copyright (C) 2006 Hugh O. Brock -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301 USA. -# - -import urlgrabber.progress as progress - -class vmmCreateMeter(progress.BaseMeter): - def __init__(self, asyncjob): - # progress meter has to run asynchronously, so pass in the - # async job to call back to with progress info - progress.BaseMeter.__init__(self) - self.asyncjob = asyncjob - self.started = False - - def _do_start(self, now=None): - if self.text is not None: - text = self.text - else: - text = self.basename - if self.size is None: - out = " %5sB" % (0) - self.asyncjob.pulse_pbar(out, text) - else: - out = "%3i%% %5sB" % (0, 0) - self.asyncjob.set_pbar_fraction(0, out, text) - self.started = True - - def _do_update(self, amount_read, now=None): - if self.text is not None: - text = self.text - else: - text = self.basename - fread = progress.format_number(amount_read) - if self.size is None: - out = " %5sB" % (fread) - self.asyncjob.pulse_pbar(out, text) - else: - frac = self.re.fraction_read() - out = "%3i%% %5sB" % (frac * 100, fread) - self.asyncjob.set_pbar_fraction(frac, out, text) - - def _do_end(self, amount_read, now=None): - if self.text is not None: - text = self.text - else: - text = self.basename - fread = progress.format_number(amount_read) - if self.size is None: - out = " %5sB" % (fread) - self.asyncjob.pulse_pbar(out, text) - else: - out = "%3i%% %5sB" % (100, fread) - self.asyncjob.set_pbar_done(out, text) - self.started = False diff --git a/src/virtManager/createpool.py b/src/virtManager/createpool.py index aa25090da..d2ee742f3 100644 --- a/src/virtManager/createpool.py +++ b/src/virtManager/createpool.py @@ -26,7 +26,6 @@ import logging from virtManager import util from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtinst import Storage @@ -495,7 +494,7 @@ class vmmCreatePool(vmmGObjectUI): # Open a seperate connection to install on since this is async newconn = util.dup_lib_conn(self._pool.conn) - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() self._pool.conn = newconn logging.debug("Starting backround pool creation.") diff --git a/src/virtManager/createvol.py b/src/virtManager/createvol.py index 20192682c..f5f051ecd 100644 --- a/src/virtManager/createvol.py +++ b/src/virtManager/createvol.py @@ -25,7 +25,6 @@ import gtk from virtManager import util from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtinst import Storage @@ -246,7 +245,7 @@ class vmmCreateVolume(vmmGObjectUI): newpool = newconn.storagePoolLookupByName(self.parent_pool.get_name()) self.vol.pool = newpool - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() logging.debug("Starting backround vol creation.") self.vol.install(meter=meter) diff --git a/src/virtManager/delete.py b/src/virtManager/delete.py index 99f00acc7..c0eec53d8 100644 --- a/src/virtManager/delete.py +++ b/src/virtManager/delete.py @@ -30,7 +30,6 @@ import virtinst from virtManager import util from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter STORAGE_ROW_CONFIRM = 0 STORAGE_ROW_CANT_DELETE = 1 @@ -160,7 +159,7 @@ class vmmDeleteDialog(vmmGObjectUI): # Open a seperate connection to install on since this is async logging.debug("Threading off connection to delete vol.") newconn = util.dup_conn(self.conn).vmm - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() for path in paths: try: diff --git a/src/virtManager/engine.py b/src/virtManager/engine.py index 5b231baab..e2c37efba 100644 --- a/src/virtManager/engine.py +++ b/src/virtManager/engine.py @@ -35,7 +35,6 @@ from virtManager.baseclass import vmmGObject from virtManager.clone import vmmCloneVM from virtManager.connect import vmmConnect from virtManager.connection import vmmConnection -from virtManager.createmeter import vmmCreateMeter from virtManager.preferences import vmmPreferences from virtManager.manager import vmmManager from virtManager.migrate import vmmMigrateDialog @@ -950,7 +949,7 @@ class vmmEngine(vmmGObject): def _save_callback(self, asyncjob, vm, file_to_save): conn = util.dup_conn(vm.conn) newvm = conn.get_vm(vm.get_uuid()) - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() newvm.save(file_to_save, meter=meter) diff --git a/src/virtManager/migrate.py b/src/virtManager/migrate.py index 8a485b3c0..2d33b184a 100644 --- a/src/virtManager/migrate.py +++ b/src/virtManager/migrate.py @@ -31,7 +31,6 @@ import libvirt from virtManager import util from virtManager.baseclass import vmmGObjectUI from virtManager.asyncjob import vmmAsyncJob -from virtManager.createmeter import vmmCreateMeter from virtManager.domain import vmmDomain def uri_join(uri_tuple): @@ -534,7 +533,7 @@ class vmmMigrateDialog(vmmGObjectUI): def _async_migrate(self, asyncjob, origvm, origdconn, migrate_uri, rate, live, secure, max_downtime): - meter = vmmCreateMeter(asyncjob) + meter = asyncjob.get_meter() srcconn = util.dup_conn(origvm.conn) dstconn = util.dup_conn(origdconn)