Index: umc/python/updater/de.po =================================================================== --- umc/python/updater/de.po (revision 5327) +++ umc/python/updater/de.po (working copy) @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: univention-management-console-module-updater\n" "Report-Msgid-Bugs-To: packages@univention.de\n" -"POT-Creation-Date: 2011-10-29 23:07+0200\n" +"POT-Creation-Date: 2011-11-25 13:23+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,25 +12,25 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: umc/python/updater/__init__.py:750 +#: umc/python/updater/__init__.py:747 #, python-format msgid "At least one out of %s must be selected." msgstr "Wenigstens eine der %s Kategorien muß ausgewählt werden." -#: umc/python/updater/__init__.py:1262 +#: umc/python/updater/__init__.py:1267 msgid "Component name is not allowed to be empty." msgstr "Der Komponentenname muß angegeben werden." -#: umc/python/updater/__init__.py:756 +#: umc/python/updater/__init__.py:753 #, python-format msgid "ERROR: %s" msgstr "FEHLER: %s" -#: umc/python/updater/__init__.py:744 +#: umc/python/updater/__init__.py:741 msgid "Empty server name not allowed" msgstr "Der Servername muß angegeben werden." -#: umc/python/updater/__init__.py:1267 +#: umc/python/updater/__init__.py:1272 #, python-format msgid "Illegal character(s) in component name: '%s'" msgstr "Unzulässige Zeichen (%s) im Komponentennamen." @@ -57,14 +57,14 @@ msgid "Perform release update up to version '%s'" msgstr "Release auf Version '%s' aktualisieren" -#: umc/python/updater/__init__.py:1276 +#: umc/python/updater/__init__.py:1281 msgid "There is already a component with this name" msgstr "Es gibt bereits eine Komponente mit diesem Namen" -#: umc/python/updater/__init__.py:322 +#: umc/python/updater/__init__.py:318 msgid "latest version" msgstr "neueste Version" -#: umc/python/updater/__init__.py:512 +#: umc/python/updater/__init__.py:509 msgid "unknown" msgstr "unbekannt" Index: umc/python/updater/__init__.py =================================================================== --- umc/python/updater/__init__.py (revision 5327) +++ umc/python/updater/__init__.py (working copy) @@ -39,7 +39,7 @@ import re import string -from os import stat,listdir,chmod,unlink,path,getpid +from os import stat,listdir,chmod,unlink,path,getpid,getppid from locale import nl_langinfo,D_T_FMT from time import strftime,localtime,sleep,time from subprocess import Popen @@ -222,14 +222,14 @@ self._unchanged_count = 0 self._last_stamp = max - return self._last_returned_stamp + return self._last_returned_stamp class Instance(umcm.Base): def __init__( self ): umcm.Base.__init__( self ) self.init_called = False - + def init(self): try: if self.init_called: @@ -238,10 +238,6 @@ self.init_called = True MODULE.info("Initializing 'updater' module (PID = %d, LANG = '%s')" % (getpid(),self.locale)) - MODULE.info("(not defining workaround for translation)") -# global _ -# _ = umc.Translation('univention-management-console-module-updater',self.locale).translate - self.uu = UniventionUpdater(False) self.ucr = univention.config_registry.ConfigRegistry() self.ucr.load() @@ -251,10 +247,10 @@ self._serial_file = Watched_File(COMPONENTS_SERIAL_FILE) self._updates_serial = Watched_Files(UPDATE_SERIAL_FILES) - + except Exception, ex: MODULE.error("init() ERROR: %s" % str(ex)) - + def query_components(self,request): """ Returns components list for the grid in the ComponentsPage. """ @@ -406,6 +402,7 @@ MODULE.info(" << %s" % s) # ----------------------------------- + # umc.widgets.Form wraps the real data into an array: # # [ @@ -822,9 +819,6 @@ # ----------------------------------- result = self.__which_job_is_running() - # If we have seen a job before: mark it as finished - if result == '': - self._current_job['running'] = False # ----------- DEBUG ----------------- MODULE.info("updater/installer/running returns:") @@ -882,8 +876,8 @@ result = self._logstamp(fname) else: # don't read complete file if we have an 'ignore' count - if (count == 0) and (self._current_job['lines']): - count = -self._current_job['lines'] + if (count == 0) and ('lines' in self._current_job) and (self._current_job['lines']): + count = -int(self._current_job['lines']) result = self._logview(fname, count) # again debug, shortened @@ -935,7 +929,7 @@ if 'statusfile' in INSTALLERS[job]: try: for line in open(INSTALLERS[job]['statusfile']): - fields = line.split('=') + fields = line.strip().split('=') if len(fields) == 2: result['_%s_' % fields[0]] = fields[1] except: @@ -1036,6 +1030,14 @@ MODULE.warn(result['message']) self.finished(request.id,result) return + + # initial values of current job + self._current_job = { + 'job': subject, + 'detail': detail, + 'logfile': '', + 'lines': 0 + } # We want to limit the amount of logfile data being transferred # to the frontend. So we remember the line count of the associated @@ -1052,6 +1054,7 @@ if file != None: file.close() self._current_job['lines'] = count + self._current_job['logfile'] = fname try: # Assemble the command line, now somewhat complicated: @@ -1062,7 +1065,9 @@ # (4) if the subject is about 'component' we must get the 'defaultpackages' # entry from the UCR tuple named by 'detail' and use that. # (5) if not, we can format the 'detail' field into the command. + # # cmd = '%s' % INSTALLERS[subject]['command'] # I need a copy of this string! + # cmd = INSTALLERS[subject]['command'] if cmd.find('%') != -1: if subject == 'component': @@ -1369,9 +1374,13 @@ and how long it is running. """ started = int(time()) + logfile = self._current_job['logfile'] + lines = self._current_job['lines'] script = ''' #:started: %s #:detail: %s +#:logfile: %s +#:lines: %s #:command: %s dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-web-server dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-server @@ -1382,7 +1391,7 @@ dpkg-statoverride --remove /usr/sbin/univention-management-console-server dpkg-statoverride --remove /usr/sbin/apache2 chmod +x /usr/sbin/univention-management-console-server /usr/sbin/univention-management-console-web-server /usr/sbin/apache2 -''' % (started,detail,command,command) +''' % (started,detail,logfile,lines,command,command) p1 = subprocess.Popen( [ 'LC_ALL=C at now', ], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True ) (stdout,stderr) = p1.communicate( script ) @@ -1419,7 +1428,13 @@ for line in atout.split("\n"): match = re.search('^\#\:([a-z]+)\:\s(.*)$',line) if (match): - self._current_job[match.group(1)] = match.group(2) + var = match.group(1) + val = match.group(2) + # restore numeric strings into numbers! + if val.isdigit(): + self._current_job[var] = int(val) + else: + self._current_job[var] = val return inst return '' @@ -1434,16 +1449,4 @@ if command in atout: return True return False - -# def __is_updater_running(self): -# return self.__is_process_running( 'univention-updater net' ) -# -# -# def __is_errata_update_running(self): -# return self.__is_process_running( 'univention-errata-update net' ) -# -# -# def __is_dist_upgrade_running(self): -# return self.__is_process_running( 'univention-updater-umc-dist-upgrade' ) - - + Index: umc/js/updater.js =================================================================== --- umc/js/updater.js (revision 5327) +++ umc/js/updater.js (working copy) @@ -121,6 +121,7 @@ // waits for the Progress Page to notify us that a job is finished. This // should immediately refresh the 'Updates' and 'Components' pages. + // XXX can remain this way dojo.connect(this._progress,'jobFinished',dojo.hitch(this, function() { this._updates.refreshPage(true); this._components.refreshPage(); @@ -225,7 +226,6 @@ confirm: this._("Do you really want to upgrade your system?") }); })); - }, // We defer these actions until the UI is readily rendered @@ -304,7 +304,7 @@ name: 'cancel' }, { - label: this._('Start!'), + label: this._('Install'), name: 'start', 'default': true } Index: umc/js/_updater/SettingsPage.js =================================================================== --- umc/js/_updater/SettingsPage.js (revision 5327) +++ umc/js/_updater/SettingsPage.js (working copy) @@ -164,6 +164,12 @@ maintained: true, unmaintained: false }); + }, + + // Let's fetch the current values again directly before we show the form. + onShow: function() { + + this._form.load('dummy'); // ID doesn't matter here but must be nonempty } }); Index: umc/js/_updater/ProgressPage.js =================================================================== --- umc/js/_updater/ProgressPage.js (revision 5327) +++ umc/js/_updater/ProgressPage.js (working copy) @@ -58,22 +58,22 @@ _job_key: '', // the key of the currently running job - postMixInProperties: function() { - this.inherited(arguments); + postMixInProperties: function() { + + this.inherited(arguments); + + // If I don't do that -> the page will switch 'show module help description' off + dojo.mixin(this,{ + helpText: ' ' + }); + }, - dojo.mixin(this, { - title: this._("Update in progress"), - headerText: this._("Univention Updater is working"), - helpText: this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.") - }); - }, - buildRendering: function() { this.inherited(arguments); this._pane = new umc.widgets.ExpandingTitlePane({ - title: this._("Progress information") + title: this._("Log file view") }); this.addChild(this._pane); @@ -99,7 +99,7 @@ // returns to the calling page this._close = new umc.widgets.Button({ - label: this._("back to overview"), + label: this._("back"), region: 'bottom', onClick: dojo.hitch(this, function() { var tab = ''; @@ -110,7 +110,6 @@ // logic will revert to the first tab of our tab set. if (this._reboot_required) { - //alert("Resetting return tab to 'Updates'"); this.last_tab = null; } if (this.last_tab) @@ -170,6 +169,17 @@ this._allow_close(false); // close button now invisible. } } + if (data.result != '') + { + // start the first call for 'update/installer/status' if we got a job name + if ((this._interval) && (! this._timer)) + { + this._timer = window.setTimeout(dojo.hitch(this, function() { + this._timer = ''; + this._query_job_status(); + }),this._interval); + } + } } else { @@ -188,84 +198,44 @@ } msg = msg + "
 
"; - msg += this._statusfile_data(data.result); - // -------------- DEBUG ------------------ -// for (var v in this._last_job) -// { -// msg += ("
   " + v + " = '" + this._last_job[v] + "'"); -// } - // --------------------------------------- - this._head.set('content',msg); if (! data.result['running']) { + } + + if (data.result['running']) + { + // reschedule this as long as the job runs. + if ((this._interval) && (! this._timer)) + { + this._timer = window.setTimeout(dojo.hitch(this, function() { + this._timer = ''; + this._query_job_status(); + }),this._interval); + } + } + else + { this._allow_close(true); // does the rest. } this._pane.layout(); + } } - // establish the next call. Note this will be active as long - // as the module is open. - // - // if this is called from outside (by means of 'startPolling()' we must - // make sure that only one timer is active at any given time. - if ((this._interval) && (! this._timer)) - { - this._timer = window.setTimeout(dojo.hitch(this, function() { - this._timer = ''; - this._query_job_status(); - }),this._interval); - } }, - // takes a status structure as returned from the 'updater/installer/status' call, - // extracts the fields that came directly from the status file (if any) and - // formats them into a one-liner. Returns an empty string if nothing matches. - // - // FOR TEST: now includes the 'reboot' flag if it is present. - _statusfile_data: function(data) { - - var txt = ''; - - for (var f in data) - { - // These fields are wrapped into underscores - if ((f.substr(0,1) == '_') && (f.substr(-1,1) == '_')) - { - if (txt.length) { txt += ','; } - txt += ' ' + f.substr(1,f.length-2) + "=" + data[f]; - } - } - - if (data['reboot']) - { - txt += ' [REBOOT] '; - if (! this._reboot_required) // not set or not true - { - //alert("Setting REBOOT from _statusfile_data"); - this._reboot_required = true; - } - } - - if (txt != '') - { - txt = "(" + this._("Current status file content") + ":" + txt + ")
"; - } - - return txt; - }, - // queries job status. As long as we know a job key -> ask for full // details. The handler _process_job_status() handles this gracefully. _query_job_status: function() { if (this._job_key == '') { - umc.tools.umcpCommand('updater/installer/running',{},false).then( + umc.tools.umcpCommand( + 'updater/installer/running',{},false).then( dojo.hitch(this, function(data) { this._query_success('updater/installer/running'); this._process_job_status(data); @@ -314,36 +284,20 @@ msg = msg + dojo.replace(this._("It took {elapsed} to complete.
"),this._last_job); } msg = msg + this._("You may return to the overview by clicking the 'back' button now."); - msg = msg + "
 
"; + msg = msg + "
 
"; - msg += this._statusfile_data(this._last_job); - - // -------------- DEBUG ------------------ -// for (var v in this._last_job) -// { -// msg += ("
   " + v + " = '" + this._last_job[v] + "'"); -// } - // --------------------------------------- - this._head.set('content',msg); - this._log.stopWatching(); // now log is freely scrollable manually - - //alert("Watching is finished, job is '" + this._job_key + "'"); - - if ((this._last_job) && (this._last_job['reboot'])) + // set headers according to the outcome + var status = 'success'; + var lstat = this._last_job['_status_']; + if ((lstat == undefined) || (lstat != 'DONE')) { - var reb = this._last_job['reboot']; - if (typeof(reb) == 'string') - { - reb = (reb == 'true'); - } - if ((! this._reboot_required) || (reb != this._reboot_required)) - { - //alert("setting REBOOT from _allow_close()"); - this._reboot_required = reb; - } + status = 'failed'; } + this._switch_headings(status); + this._log.scrollToBottom(); // jump to bottom a very last time + this._log.stopWatching(); // now log is freely scrollable manually this._last_job = null; // can be deleted, but this._job_key should be retained! } @@ -393,6 +347,52 @@ this.inherited(arguments); this._interval = 0; + }, + + // on switch to this page: set initial headings, and fetch + // the 'job running' status at least once. + onShow: function() { + this._switch_headings('running'); + this._query_job_status(); + }, + + // internal function that switches any heading variables of + // our current page, according to the retrieved job status + _switch_headings: function(status) { + + // avoid doing that repeatedly + if (status == this._last_heading_status) + { + return; + } + + this._last_heading_status = status; + + var headings = { + 'running': { + title: this._("Update in progress"), + headerText: this._("Univention Updater is working"), + helpText: this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.") + }, + 'success': { + title: this._("Update finished"), + headerText: this._("Univention Updater job completed"), + helpText: this._("Univention Updater has successfully finished the current job. You may read through the log file. If you're finished you may press the 'back to overview' button to close this view.") + }, + 'failed': { + title: this._("Update failed"), + headerText: this._("Univention Updater job failed"), + helpText: this._("Univention Updater could not successfully complete the current job. The log file should show the cause of the failure. If you're finished examining the log file you may press the 'back to overview' button to close this view.") + } + }; + + var info = headings[status]; + for (var v in info) + { + this.set(v,info[v]); + } + // this.layout(); + } }); Index: umc/js/_updater/ComponentsPage.js =================================================================== --- umc/js/_updater/ComponentsPage.js (revision 5327) +++ umc/js/_updater/ComponentsPage.js (working copy) @@ -229,13 +229,13 @@ moduleStore: umc.store.getModuleStore('name','updater/components'), actions: actions, columns: columns, - polling: { - interval: 5000, - query: 'updater/components/serial', - callback: dojo.hitch(this, function() { - this.refresh(true); - }) - } +// polling: { +// interval: 5000, +// query: 'updater/components/serial', +// callback: dojo.hitch(this, function() { +// this.refresh(true); +// }) +// } }); this.addChild(this._grid); @@ -313,6 +313,12 @@ // removes a component _delete_components: function(ids) { + // multiAction callback is fired even if nothing + // is selected? + if (! ids.length) + { + return; + } var msg = dojo.replace(this._("Are you sure you want to delete the following components: [{ids}]"),{ids: ids}); umc.dialog.confirm(msg, [ @@ -341,6 +347,12 @@ ]); }, + onShow: function() { + + this.inherited(arguments); + this.refresh(); + }, + // gives a means to restart polling after reauthentication startPolling: function() { this._grid.startPolling(); Index: umc/js/_updater/DetailsPage.js =================================================================== --- umc/js/_updater/DetailsPage.js (revision 5327) +++ umc/js/_updater/DetailsPage.js (working copy) @@ -69,8 +69,7 @@ 'default': true, label: this._("Apply changes"), onClick: dojo.hitch(this, function() { - this.standby(true); - this._form.save(this._save_options); + this._form.onSubmit(); }) } ] @@ -131,7 +130,7 @@ type: 'TextBox', name: 'version', label: this._("Version"), - regExp: '^((([0-9]+\.[0-9]+|current),)*([0-9]+\.[0-9]+|current))?$' + regExp: '^((([0-9]+\\.[0-9]+|current),)*([0-9]+\\.[0-9]+|current))?$' } ]; @@ -161,7 +160,13 @@ widgets: widgets, layout: layout, //buttons: buttons, - moduleStore: umc.store.getModuleStore('name','updater/components') + moduleStore: umc.store.getModuleStore('name','updater/components'), + // This is (a) the submit handler of the form, but + // also (b) the onClick handler of the 'Apply' button + onSubmit: dojo.hitch(this,function() { + this._form.standby(true); + this._form.save(this._save_options); + }) }); this.addChild(this._form); @@ -197,6 +202,7 @@ this.set('helpText',this._("Please enter the details for the new component.")); this._form.setFormValues(data); + this._form.standby(false); // Component name editable and focused? var nam = this._form.getWidget('name'); @@ -219,7 +225,7 @@ this.set('headerText',dojo.replace(this._("Edit component details [{component}]"),{component:data})); this.set('helpText',this._("You're editing the details of the component definition.")); - this._form.load(data); + this._form.load(data).then(dojo.hitch(this,function() { this._form.standby(false); })); // If we're in EDIT mode: don't allow changes to the component name. this._form.getWidget('name').setDisabled(true); @@ -233,7 +239,6 @@ // return to grid view closeDetail: function() { - } - + } }); Index: umc/js/_updater/UpdatesPage.js =================================================================== --- umc/js/_updater/UpdatesPage.js (revision 5327) +++ umc/js/_updater/UpdatesPage.js (working copy) @@ -117,6 +117,7 @@ // FIXME Manual placement: should be done by the layout framework some day. style: 'width:300px;', onValuesLoaded: dojo.hitch(this, function(values) { + // TODO check updater/installer/running, don't do anything if something IS running try { this._query_success('updater/updates/query'); @@ -250,6 +251,7 @@ callback: dojo.hitch(this,function() { var element = this._form.getWidget('releases'); var release = element.get('value'); + // TODO check updater/installer/running, don't do action if a job is running this.runReleaseUpdate(release); }), visible: false @@ -258,6 +260,7 @@ name: 'run_errata_update', label: this._('Install errata update'), callback: dojo.hitch(this, function() { + // TODO check updater/installer/running, don't do action if a job is running this.runErrataUpdate(); }), visible: false @@ -269,7 +272,7 @@ this._check_dist_upgrade(); }) }, - // to test the refresh code + // If refresh isn't automatic anymore... should we show a "Refresh" button? // { // name: 'refresh', // label: this._("Refresh"), @@ -288,6 +291,7 @@ name: 'easy_upgrade', label: this._("Start Upgrade"), // FIXME Label not correct callback: dojo.hitch(this, function() { + // TODO check updater/installer/running, don't do action if a job is running this.runEasyUpgrade(); }) } @@ -343,14 +347,14 @@ widgets: widgets, layout: layout, buttons: buttons, - moduleStore: umc.store.getModuleStore(null,'updater/updates'), - polling: { - interval: 5000, - query: 'updater/updates/serial', - callback: dojo.hitch(this, function() { - this.refreshPage(); - }) - } + moduleStore: umc.store.getModuleStore(null,'updater/updates') +// polling: { +// interval: 5000, +// query: 'updater/updates/serial', +// callback: dojo.hitch(this, function() { +// this.refreshPage(); +// }) +// } }); // Before we attach the form to our page, just switch off all title panes. @@ -461,7 +465,7 @@ } catch(error) { - console.error("set_upates_button: " + error.message); + console.error("set_updates_button: " + error.message); } }, @@ -541,7 +545,6 @@ // pop a message up whenever the 'on' value changes if (on != this._last_reboot) { - //alert("Reboot affordance changed to " + on); this._last_reboot = on; } @@ -564,17 +567,33 @@ }, // called when the 'reboot' button is pressed. + // now with confirmation that doesn't depend on the 'confirmations' setting. _reboot: function() { - this.standby(true); - umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() { - this.standby(false); - this._show_reboot_pane(true,true); - }), - dojo.hitch(this, function() { - this.standby(false); - }) + umc.dialog.confirm( + this._("Do you really want to reboot the machine?"), + [ + { + label: this._("Cancel"), + 'default': true + }, + { + label: this._("Reboot"), + callback: dojo.hitch(this, function() { + this.standby(true); + umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() { + this.standby(false); + this._show_reboot_pane(true,true); + }), + dojo.hitch(this, function() { + this.standby(false); + }) + ); + }) + } + ] ); + }, // First page refresh doesn't work properly when invoked in 'buildRendering()' so @@ -587,6 +606,13 @@ }, + // ensures refresh whenever we're returning from any action. + onShow: function() { + + this.inherited(arguments); + this.refreshPage(true); + }, + // should refresh any data contained here. (can be called from outside when needed) // with 'force=true' the caller can request that even the affordance to 'check // update availability' is reset to 'not yet checked'. @@ -601,7 +627,8 @@ // gives a means to restart polling after reauthentication startPolling: function() { - this._form.startPolling(); + // not needed anymore. + // this._form.startPolling(); }, // These functions are stubs that the 'updater' Module is listening to, Index: umc/js/_updater/_LogViewer.js =================================================================== --- umc/js/_updater/_LogViewer.js (revision 5327) +++ umc/js/_updater/_LogViewer.js (working copy) @@ -148,11 +148,21 @@ try { var oldpos = this._get_positions(); - this._text.set('content',content); + + // check if we should scroll to bottom. We avoid that if the current position + // is not at the end, indicating that the user has moved the pane manually. + // // our height measure doesn't strictly reflect what we need, so we add a little tolerance: // regard the positon 'at bottom' if its plus/minus 20px around zero - if ( (this._first_call > 0) || ((oldpos['d_bottom'] > -20) && (oldpos['d_bottom'] < 20))) + var to_scroll = false; + if ( (this._first_call > 0) || ( /* (oldpos['d_bottom'] > -20) && */ (oldpos['d_bottom'] < 20))) { + to_scroll = true; + } + + this._text.set('content',content); + if (to_scroll) + { this.scrollToBottom(); if (this._first_call > 0) { @@ -184,6 +194,14 @@ // - in the 'content' setter if the position is roughly at the bottom // scrollToBottom: function() { + + // we ignore any calls to 'scrollToBottom()' if we're not currently + // watching. This makes the pane free movable at the 'return to overview' + // prompt when a job is finished. + if (this._check_interval == 0) + { + return; + } var newpos = this._get_positions(); var todo = true; var node = this._text.contentNode.parentNode; @@ -228,7 +246,6 @@ // A seperate function that is called by the 'ProgressPage' when the key of the // current job has become known. setJobKey: function(job) { - //alert("LogViewer::setJobKey('" + job + "')"); this._current_job = job; }, Index: umc/js/_updater/Form.js =================================================================== --- umc/js/_updater/Form.js (revision 5327) +++ umc/js/_updater/Form.js (working copy) @@ -31,6 +31,7 @@ dojo.provide("umc.modules._updater.Form"); dojo.require("umc.widgets.Form"); +dojo.require("umc.widgets.StandbyMixin"); dojo.require("umc.modules._updater._PollingMixin"); // Form with some useful additions: @@ -45,6 +46,7 @@ // dojo.declare("umc.modules._updater.Form", [ umc.widgets.Form, + umc.widgets.StandbyMixin, umc.modules._updater._PollingMixin ], { Index: umc/js/de.po =================================================================== --- umc/js/de.po (revision 5327) +++ umc/js/de.po (working copy) @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: univention-management-console-module-updater\n" "Report-Msgid-Bugs-To: packages@univention.de\n" -"POT-Creation-Date: 2011-11-16 04:14+0100\n" +"POT-Creation-Date: 2011-11-28 11:09+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Frank Greif \n" "Language-Team: LANGUAGE \n" @@ -12,16 +12,16 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: umc/js/_updater/UpdatesPage.js:195 umc/js/_updater/UpdatesPage.js:216 +#: umc/js/_updater/UpdatesPage.js:196 umc/js/_updater/UpdatesPage.js:217 msgid "... loading data ..." msgstr "... Daten werden geladen ..." -#: umc/js/_updater/ProgressPage.js:374 +#: umc/js/_updater/ProgressPage.js:328 msgid "... loading job data ..." msgstr "... Daten werden geladen ..." -#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:219 -#: umc/js/_updater/_LogViewer.js:245 +#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:237 +#: umc/js/_updater/_LogViewer.js:262 msgid "... loading log file ..." msgstr "... Protokolldatei wird geladen ..." @@ -33,7 +33,7 @@ msgid "Add" msgstr "Neu" -#: umc/js/_updater/DetailsPage.js:196 +#: umc/js/_updater/DetailsPage.js:201 msgid "Add a new component" msgstr "Neue Komponente hinzufügen" @@ -45,7 +45,7 @@ msgid "Additional components" msgstr "Zusätzliche Komponenten" -#: umc/js/_updater/DetailsPage.js:150 +#: umc/js/_updater/DetailsPage.js:149 msgid "Advanced settings" msgstr "Weitere Einstellungen" @@ -61,11 +61,11 @@ msgid "Apply changes" msgstr "Änderungen anwenden" -#: umc/js/_updater/ComponentsPage.js:316 +#: umc/js/_updater/ComponentsPage.js:322 msgid "Are you sure you want to delete the following components: [{ids}]" msgstr "Möchten Sie die folgenden Komponenten wirklich löschen: [{ids}]" -#: umc/js/_updater/ProgressPage.js:67 +#: umc/js/_updater/ProgressPage.js:375 msgid "" "As long as the Univention Updater is updating your system, you're not " "allowed to manage settings or components. You may watch the progress, or " @@ -87,20 +87,20 @@ msgid "Available system updates" msgstr "Verfügbare System-Updates" -#: umc/js/_updater/DetailsPage.js:141 +#: umc/js/_updater/DetailsPage.js:140 msgid "Basic settings" msgstr "Allgemeine Einstellungen" #: umc/js/updater.js:303 umc/js/updater.js:380 -#: umc/js/_updater/ComponentsPage.js:322 +#: umc/js/_updater/UpdatesPage.js:577 umc/js/_updater/ComponentsPage.js:328 msgid "Cancel" msgstr "Abbrechen" -#: umc/js/_updater/UpdatesPage.js:267 umc/js/_updater/UpdatesPage.js:459 +#: umc/js/_updater/UpdatesPage.js:270 umc/js/_updater/UpdatesPage.js:463 msgid "Check for package updates" msgstr "Paket-Aktualisierungen prüfen" -#: umc/js/_updater/DetailsPage.js:93 umc/js/_updater/ComponentsPage.js:183 +#: umc/js/_updater/DetailsPage.js:92 umc/js/_updater/ComponentsPage.js:183 msgid "Component Name" msgstr "Name der Komponente" @@ -118,10 +118,6 @@ "Die Verbindung zum Server wurde unterbrochen. Ein erneuter Verbindungsaufbau " "wird gestartet." -#: umc/js/_updater/ProgressPage.js:256 -msgid "Current status file content" -msgstr "Inhalt der Statusdatei" - #: umc/js/_updater/ComponentsPage.js:167 msgid "Delete" msgstr "Löschen" @@ -130,11 +126,11 @@ msgid "Delete the selected component definition" msgstr "Diese Komponente löschen" -#: umc/js/_updater/ComponentsPage.js:325 +#: umc/js/_updater/ComponentsPage.js:331 msgid "Delete!" msgstr "Löschen!" -#: umc/js/_updater/DetailsPage.js:98 +#: umc/js/_updater/DetailsPage.js:97 msgid "Description" msgstr "Beschreibung" @@ -146,18 +142,18 @@ msgid "Disabled" msgstr "Deaktiviert" -#: umc/js/updater.js:212 +#: umc/js/updater.js:213 msgid "Do you really want to install all available errata updates?" msgstr "" "Möchten Sie wirklich alle verfügbaren Errata-Aktualisierungen installieren?" -#: umc/js/updater.js:204 +#: umc/js/updater.js:205 msgid "Do you really want to install release updates up to version {release}?" msgstr "" "Möchten Sie wirklich alle Release-Aktualisierungen bis zur Version " "'{release}' installieren?" -#: umc/js/updater.js:195 +#: umc/js/updater.js:196 msgid "Do you really want to install the '{name}' component?" msgstr "Möchten Sie wirklich die Komponente '{name}' installieren?" @@ -169,7 +165,11 @@ "Möchten Sie wirklich die genannten Pakete aktualisieren, installieren bzw. " "entfernen?" -#: umc/js/updater.js:225 +#: umc/js/_updater/UpdatesPage.js:574 +msgid "Do you really want to reboot the machine?" +msgstr "Möchten Sie die Maschine jetzt neu starten?" + +#: umc/js/updater.js:226 msgid "Do you really want to upgrade your system?" msgstr "Möchten Sie Ihr System jetzt aktualisieren?" @@ -193,7 +193,7 @@ msgid "Edit" msgstr "Bearbeiten" -#: umc/js/_updater/DetailsPage.js:219 +#: umc/js/_updater/DetailsPage.js:225 msgid "Edit component details [{component}]" msgstr "Komponenten-Details [{component}] bearbeiten" @@ -205,7 +205,7 @@ msgid "Enable" msgstr "Aktivieren" -#: umc/js/_updater/DetailsPage.js:88 +#: umc/js/_updater/DetailsPage.js:87 msgid "Enable this component" msgstr "Diese Komponente aktivieren" @@ -213,7 +213,7 @@ msgid "Enable/disable this component" msgstr "Diese Komponente aktivieren" -#: umc/js/_updater/UpdatesPage.js:325 +#: umc/js/_updater/UpdatesPage.js:329 msgid "Errata updates" msgstr "Errata-Aktualisierungen" @@ -233,19 +233,19 @@ "Um die kürzlich ausgeführte Installer-Aktion fertigzustellen, ist es " "erforderlich, die Maschine neu zu starten." -#: umc/js/_updater/ComponentsPage.js:128 +#: umc/js/updater.js:307 umc/js/_updater/ComponentsPage.js:128 msgid "Install" msgstr "Installieren" -#: umc/js/_updater/UpdatesPage.js:259 +#: umc/js/_updater/UpdatesPage.js:261 msgid "Install errata update" msgstr "Errata-Aktualisierungen installieren" -#: umc/js/_updater/UpdatesPage.js:458 +#: umc/js/_updater/UpdatesPage.js:462 msgid "Install package updates" msgstr "Paket-Aktualisierungen installieren" -#: umc/js/_updater/UpdatesPage.js:249 +#: umc/js/_updater/UpdatesPage.js:250 msgid "Install release update" msgstr "Release-Aktualisierungen installieren" @@ -273,20 +273,24 @@ "Tests in einer Testumgebung und die Erstellung einer Sicherung des Systems " "werden ebenfalls empfohlen." -#: umc/js/_updater/ProgressPage.js:314 +#: umc/js/_updater/ProgressPage.js:284 msgid "It took {elapsed} to complete.
" msgstr "Er hat {elapsed} benötigt.
" +#: umc/js/_updater/ProgressPage.js:76 +msgid "Log file view" +msgstr "Protokoll" + #: umc/js/updater.js:361 msgid "Logfiles can be found in the directory /var/log/univention/." msgstr "Logdateien können im Verzeichnis /var/log/univention/ gefunden werden." -#: umc/js/_updater/UpdatesPage.js:413 +#: umc/js/_updater/UpdatesPage.js:417 msgid "No errata updates for the current version are installed." msgstr "" "Für die aktuelle Version sind keine Errata-Aktualisierungen installiert." -#: umc/js/_updater/UpdatesPage.js:435 +#: umc/js/_updater/UpdatesPage.js:439 msgid "None of them are currently enabled." msgstr "Davon sind momentan keine aktiviert." @@ -295,8 +299,8 @@ "Nonetheless, the update proceeds and the update can be monitored from a new " "UMC session. " msgstr "" -"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer neuen " -"UMC-Sitzung weiter beobachtet werden. " +"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer " +"neuen UMC-Sitzung weiter beobachtet werden. " #: umc/js/_updater/ComponentsPage.js:216 msgid "Not found" @@ -307,10 +311,10 @@ "On this page, you find all additional components defined for this system. " "You can enable/disable/edit/delete them, and you can add new ones here." msgstr "" -"Auf dieser Seite sehen Sie alle Komponenten, die für " -"dieses System definiert sind, Die Komponenten können aktiviert oder " -"deaktiviert werden, Details einer Komponente können geändert, Komponenten " -"gelöscht oder unter bestimmten Umständen installiert werden." +"Auf dieser Seite sehen Sie alle Komponenten, die für dieses System definiert " +"sind, Die Komponenten können aktiviert oder deaktiviert werden, Details " +"einer Komponente können geändert, Komponenten gelöscht oder unter bestimmten " +"Umständen installiert werden." #: umc/js/_updater/ComponentsPage.js:90 msgid "On/Off" @@ -321,15 +325,19 @@ msgstr "" "Überblick über Software-Aktualisierungen, die das Gesamtsystem betreffen" -#: umc/js/_updater/UpdatesPage.js:145 umc/js/_updater/UpdatesPage.js:237 +#: umc/js/_updater/UpdatesPage.js:146 umc/js/_updater/UpdatesPage.js:238 msgid "Package update status not yet checked" msgstr "Der Paket-Aktualisierungsstatus wurde noch nicht geprüft." -#: umc/js/_updater/UpdatesPage.js:333 +#: umc/js/_updater/UpdatesPage.js:337 msgid "Package updates" msgstr "Paketaktualisierungen" -#: umc/js/_updater/DetailsPage.js:128 +#: umc/js/_updater/UpdatesPage.js:490 +msgid "Package updates are available." +msgstr "Es sind Paket-Aktualisierungen verfügbar." + +#: umc/js/_updater/DetailsPage.js:127 msgid "Password" msgstr "Passwort" @@ -346,23 +354,19 @@ "jeweiligen Update in dem Univention " "Forum." -#: umc/js/_updater/DetailsPage.js:197 +#: umc/js/_updater/DetailsPage.js:202 msgid "Please enter the details for the new component." msgstr "Bitte geben Sie die Details für die neue Komponente ein." -#: umc/js/_updater/ProgressPage.js:76 -msgid "Progress information" -msgstr "Aktueller Vorgang" - -#: umc/js/_updater/UpdatesPage.js:282 +#: umc/js/_updater/UpdatesPage.js:285 umc/js/_updater/UpdatesPage.js:581 msgid "Reboot" msgstr "Neu starten" -#: umc/js/_updater/UpdatesPage.js:299 +#: umc/js/_updater/UpdatesPage.js:303 msgid "Reboot required" msgstr "Neustart erforderlich" -#: umc/js/_updater/UpdatesPage.js:275 umc/js/_updater/ComponentsPage.js:75 +#: umc/js/_updater/UpdatesPage.js:278 umc/js/_updater/ComponentsPage.js:75 msgid "Refresh" msgstr "Aktualisieren" @@ -370,30 +374,22 @@ msgid "Refresh display to see current values" msgstr "Anzeige aktualisieren" -#: umc/js/_updater/UpdatesPage.js:307 +#: umc/js/_updater/UpdatesPage.js:311 msgid "Release information" msgstr "Aktueller Status" -#: umc/js/_updater/UpdatesPage.js:315 +#: umc/js/_updater/UpdatesPage.js:319 msgid "Release updates" msgstr "Release-Aktualisierungen" -#: umc/js/_updater/DetailsPage.js:108 +#: umc/js/_updater/SettingsPage.js:86 umc/js/_updater/DetailsPage.js:107 msgid "Repository prefix" -msgstr "Repository-Prefix" +msgstr "Repository prefix" -#: umc/js/_updater/DetailsPage.js:103 +#: umc/js/_updater/SettingsPage.js:81 umc/js/_updater/DetailsPage.js:102 msgid "Repository server" -msgstr "Repository-Server" +msgstr "Repository server" -#: umc/js/_updater/SettingsPage.js:86 -msgid "Repository prefix" -msgstr "Repository-Prefix" - -#: umc/js/_updater/SettingsPage.js:81 -msgid "Repository server" -msgstr "Repository-Server" - #: umc/js/_updater/SettingsPage.js:54 msgid "Reset" msgstr "Zurücksetzen" @@ -406,11 +402,7 @@ msgid "Settings for online updates" msgstr "Einstellungen für Online-Aktualisierung" -#: umc/js/_updater/UpdatesPage.js:486 -msgid "Package updates are available." -msgstr "Es sind Paket-Aktualisierungen verfügbar." - -#: umc/js/_updater/UpdatesPage.js:289 +#: umc/js/_updater/UpdatesPage.js:292 msgid "Start Upgrade" msgstr "Aktualisierung starten" @@ -418,7 +410,7 @@ msgid "Start Upgrade?" msgstr "Aktualisierung starten?" -#: umc/js/updater.js:307 umc/js/updater.js:383 +#: umc/js/updater.js:383 msgid "Start!" msgstr "Start!" @@ -426,75 +418,78 @@ msgid "Status" msgstr "Status" +#: umc/js/updater.js:408 +msgid "" +"The Univention Updater action could not be started [Error {status}]: " +"{message}" +msgstr "" +"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: " +"{message}" + +#: umc/js/_updater/UpdatesPage.js:71 +msgid "The computer is now rebooting. " +msgstr "Der Computer wird jetzt neu gestartet. " + #: umc/js/updater.js:555 msgid "" "The connection to the server was lost, trying to reconnect. You may need to " "re-authenticate when the connection is restored." msgstr "" -"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die " -"Verbindung wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, " -"wenn die Verbindung wieder hergestellt ist." +"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die Verbindung " +"wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, wenn die " +"Verbindung wieder hergestellt ist." -#: umc/js/_updater/ProgressPage.js:311 +#: umc/js/_updater/ProgressPage.js:281 msgid "The current job ({label}) is now finished.
" msgstr "Der aktuelle Vorgang ({label}) ist jetzt beendet.
" -#: umc/js/_updater/UpdatesPage.js:388 +#: umc/js/_updater/UpdatesPage.js:392 msgid "The currently installed release version is {ucs_version}" msgstr "Die momentan installierte Version ist {ucs_version}" -#: umc/js/_updater/UpdatesPage.js:395 +#: umc/js/_updater/UpdatesPage.js:399 msgid "" "The currently installed release version is {ucs_version} errata{erratalevel}" msgstr "" "Die momentan installierte Version ist {ucs_version} errata{erratalevel}" -#: umc/js/updater.js:408 -msgid "The Univention Updater action could not be started [Error {status}]: {message}" -msgstr "" -"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: " -"{message}" - -#: umc/js/_updater/ProgressPage.js:183 +#: umc/js/_updater/ProgressPage.js:193 msgid "The job {label} (started {elapsed} ago) is currently running." msgstr "" "Momentan läuft der Aktualisierungsauftrag {label} (gestartet vor " "{elapsed})" -#: umc/js/_updater/UpdatesPage.js:71 -msgid "The computer is now rebooting. " -msgstr "Der Computer wird jetzt neu gestartet. " - -#: umc/js/_updater/UpdatesPage.js:416 +#: umc/js/_updater/UpdatesPage.js:420 msgid "The most recent errata update is {latest_errata_update}." msgstr "" "Die neueste verfügbare Errata-Aktualisierung ist {latest_errata_update}." -#: umc/js/_updater/UpdatesPage.js:433 +#: umc/js/_updater/UpdatesPage.js:437 msgid "The system knows about {components} components." msgstr "Dem System sind {components} Komponenten bekannt." -#: umc/js/_updater/UpdatesPage.js:429 +#: umc/js/_updater/UpdatesPage.js:433 msgid "There are no components configured for this system." msgstr "Momentan sind keine Komponenten konfiguriert." -#: umc/js/_updater/UpdatesPage.js:417 +#: umc/js/_updater/UpdatesPage.js:421 msgid "There are no errata updates available for the current release." -msgstr "Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar." +msgstr "" +"Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar." -#: umc/js/_updater/UpdatesPage.js:487 +#: umc/js/_updater/UpdatesPage.js:491 msgid "There are no package updates available." msgstr "Es sind keine Paket-Aktualisierungen verfügbar." -#: umc/js/_updater/UpdatesPage.js:201 +#: umc/js/_updater/UpdatesPage.js:202 msgid "There are no release updates available." msgstr "Es sind keine Release-Aktualisierungen verfügbar." -#: umc/js/_updater/UpdatesPage.js:404 +#: umc/js/_updater/UpdatesPage.js:408 msgid "There are no updates available." msgstr "Es sind keine Aktualisierungen verfügbar." -#: umc/js/_updater/UpdatesPage.js:403 +#: umc/js/_updater/UpdatesPage.js:407 msgid "There are updates available." msgstr "Es sind Aktualisierungen verfügbar." @@ -514,19 +509,53 @@ msgid "Thus, updates shouldn't be installed on a live system. " msgstr "Deshalb sollten Sie das Update nicht im laufenden Betrieb einspielen. " -#: umc/js/_updater/ProgressPage.js:66 +#: umc/js/_updater/ProgressPage.js:385 +msgid "" +"Univention Updater could not successfully complete the current job. The log " +"file should show the cause of the failure. If you're finished examining the " +"log file you may press the 'back to overview' button to close this view." +msgstr "" +"Univention Updater konnte den aktuellen Auftrag nicht erfolgreich " +"abschließen. Im Protokoll sollten Sie die Ursache des Fehlschlages sehen " +"können. Der Knopf 'zurück zur Übersicht' schließt die aktuelle Ansicht." + +#: umc/js/_updater/ProgressPage.js:380 +msgid "" +"Univention Updater has successfully finished the current job. You may read " +"through the log file. If you're finished you may press the 'back to " +"overview' button to close this view." +msgstr "" +"Univention Updater hat den aktuellen Auftrag erfolgreich abgeschlossen. " + +#: umc/js/_updater/ProgressPage.js:374 msgid "Univention Updater is working" msgstr "Univention Updater ist gerade aktiv" +#: umc/js/_updater/ProgressPage.js:379 +msgid "Univention Updater job completed" +msgstr "Univention Updater Auftrag abgeschlossen" + +#: umc/js/_updater/ProgressPage.js:384 +msgid "Univention Updater job failed" +msgstr "Univention Updater Auftrag ist fehlgeschlagen" + #: umc/js/_updater/ComponentsPage.js:218 msgid "Unknown" msgstr "Unbekannt" -#: umc/js/_updater/UpdatesPage.js:491 +#: umc/js/_updater/UpdatesPage.js:495 msgid "Update availability could not be checked." msgstr "Verfügbarkeit von Aktualisierungen konnte nicht geprüft werden." -#: umc/js/_updater/ProgressPage.js:65 +#: umc/js/_updater/ProgressPage.js:383 +msgid "Update failed" +msgstr "Aktualisierung fehlgeschlagen" + +#: umc/js/_updater/ProgressPage.js:378 +msgid "Update finished" +msgstr "Aktualisierung abgeschlossen" + +#: umc/js/_updater/ProgressPage.js:373 msgid "Update in progress" msgstr "Aktualisierung läuft" @@ -542,19 +571,19 @@ msgid "Updates" msgstr "Aktualisierungen" -#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:113 +#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:112 msgid "Use maintained repositories" msgstr "'Maintained' Repositories benutzen" -#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:118 +#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:117 msgid "Use unmaintained repositories" msgstr "'Unmaintained' Repositories benutzen" -#: umc/js/_updater/DetailsPage.js:123 +#: umc/js/_updater/DetailsPage.js:122 msgid "Username" msgstr "Benutzername" -#: umc/js/_updater/DetailsPage.js:133 +#: umc/js/_updater/DetailsPage.js:132 msgid "Version" msgstr "Version" @@ -566,17 +595,17 @@ "Wenn die Verbindung wieder hergestellt ist, werden Sie aufgefordert, sich " "noch einmal neu anzumelden." -#: umc/js/_updater/ProgressPage.js:316 +#: umc/js/_updater/ProgressPage.js:286 msgid "You may return to the overview by clicking the 'back' button now." msgstr "" "Sie können jetzt zur Übersicht zurückkehren, indem Sie den 'Zurück'-Knopf " "drücken." -#: umc/js/_updater/ProgressPage.js:187 +#: umc/js/_updater/ProgressPage.js:197 msgid "You're currently watching its log file {logfile}" msgstr "Sie sehen die Protokolldatei {logfile}" -#: umc/js/_updater/DetailsPage.js:220 +#: umc/js/_updater/DetailsPage.js:226 msgid "You're editing the details of the component definition." msgstr "Sie bearbeiten die Details der Komponenten-Definition." @@ -588,11 +617,15 @@ "Ihre aktuelle Sitzung ist abgelaufen, oder die Verbindung zum Server war " "verlorengegangen. Sie müssen sich noch einmal neu anmelden." -#: umc/js/_updater/UpdatesPage.js:412 +#: umc/js/_updater/UpdatesPage.js:416 msgid "Your system is at errata level {erratalevel}." msgstr "Ihr System ist auf dem Errata-Level {erratalevel}." -#: umc/js/_updater/DetailsPage.js:55 umc/js/_updater/ProgressPage.js:102 +#: umc/js/_updater/ProgressPage.js:102 +msgid "back" +msgstr "Zurück" + +#: umc/js/_updater/DetailsPage.js:55 msgid "back to overview" msgstr "zurück zur Übersicht" @@ -608,9 +641,6 @@ msgid "{count} packages to be updated" msgstr "{count} Pakete werden aktualisiert" -#: umc/js/_updater/UpdatesPage.js:436 +#: umc/js/_updater/UpdatesPage.js:440 msgid "{enabled} of them are currently enabled." msgstr "Davon sind {enabled} Komponenten aktiviert." - -#~ msgid "Use hotfix repositories" -#~ msgstr "'Hotfix' Repositories benutzen"