diff -Nru deluge-1.3.12/ChangeLog deluge-1.3.13/ChangeLog --- deluge-1.3.12/ChangeLog 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/ChangeLog 2016-07-20 14:23:28.000000000 +0000 @@ -1,3 +1,75 @@ +=== Deluge 1.3.13 (20 July 2016) === +==== Core ==== + * Increase RSA key size from 1024 to 2048 and use SHA256 digest. + * Fixed empty error message from certain trackers. + * Fixed torrent ending up displaying the wrong state. + * #1032: Force a torrent into Error state if the resume data is rejected. + * Workaround unwanted tracker announce when force rechecking paused torrent. + * #2703: Stop moving torrent files if target files exist to prevent unintended clobbering of data. + * #1330: Fixed the pausing and resuming of the Deluge session so torrents return to previous state. + * #2765: Add support for TLS SNI in httpdownloader. + * #2790: Ensure base32 magnet hash is uppercase to fix lowercase magnets uris. + +==== Daemon ==== + * New command-line option to restict selected config key to read-only. + * Allow use of uppercase log level to match UIs. + +==== UI ==== + * #2832: Fixed error with blank lines in auth file. + +==== GtkUI ==== + * Fixed installing plugin from a non-ascii directory. + * Error'd torrents no longer display a progress percentage. + * #2753: Fixed the 'Added' column showing the wrong date. + * #2435: Prevent the user from changing tracker selection when editing trackers. + * Fixed showing the wrong connected status with hostname in the Connection Manager. + * #2754: Fixed the progress column to sort by progress and state correctly. + * #2696: Fixed incorrect Move Completed folder shown in Options tab. + * #2783: Sorting for name column is now case insensitive. + * #2795: Reduce height of Add Torrent Dialog to help with smaller screeen resoltuions. + * OSX: Fixed empty scrolling status (systray) menu. + * OSX: Fixed starting deluged from connection manager. + * #2093: Windows OS: Fixed opening non-ascii torrent files. + * #2855: Fixed adding UDP trackers to trackers dialog. + +==== WebUI ==== + * #2782: Fixed HTTPS negotiating incorrect cipher. + * #2485: Fixed the broken Options context menu. + * #2705: Fixed the hostlist config file not being created. + * #2293: Fixed plugin's js code not loading when using the WebUI plugin. + +==== Console ==== + * Fixed adding non-ascii torrent in non-interactive mode. + * #2796: Add time_added to info sort keys. + * #2815: Fixed 'add' cmd path inconsistency on Windows. + +==== OSX Packaging ==== + * Source .py files no longer included in Deluge.app. + +==== Windows OS Packaging ==== + * #2777: Updated MSVC SP1 check to latest release CLID. + +==== Blocklist Plugin ==== + * #2729: Fixed plugin lockup with empty url. + +==== Scheduler Plugin ==== + * Fixed corrupt plugin prefences page on OSX. + * Fixed error accidentally introduced in 1.3.12. + +==== Notification Plugin ==== + * #2402: Fixed the popup to show the actual count of files finished. + * #2857: Fixed issue with SMTP port entry not updating in GTKUI. + +==== AutoAdd Plugin ==== + * Fixed watch dir not accepting uppercase file extension. + +==== Extractor Plugin ==== + * Ignore the remaining rar part files to prevent spawning useless processes. + * #2785: Fixed only an empty folder when extracting rar files. + +==== Execute Plugin ==== + * #2784: Windows OS: Escape ampersand in torrent args. + === Deluge 1.3.12 (13 September 2015) === ==== GtkUI ==== * #2731: Fix potential AttributeError in is_on_active_workspace diff -Nru deluge-1.3.12/debian/changelog deluge-1.3.13/debian/changelog --- deluge-1.3.12/debian/changelog 2015-09-13 20:39:15.000000000 +0000 +++ deluge-1.3.13/debian/changelog 2016-07-21 11:10:09.000000000 +0000 @@ -1,3 +1,9 @@ +deluge (1.3.13-0~trusty~ppa1) trusty; urgency=low + + * New upstream version + + -- Calum Lind Thu, 21 Jul 2016 12:10:09 +0100 + deluge (1.3.12-0~trusty~ppa1) trusty; urgency=low * New upstream version diff -Nru deluge-1.3.12/deluge/common.py deluge-1.3.13/deluge/common.py --- deluge-1.3.12/deluge/common.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/common.py 2016-07-20 14:23:28.000000000 +0000 @@ -718,3 +718,27 @@ v1 = [self.version, self.suffix or 'z', self.dev] v2 = [ver.version, ver.suffix or 'z', ver.dev] return cmp(v1, v2) + +def win32_unicode_argv(): + """ Gets sys.argv as list of unicode objects on any platform.""" + if windows_check(): + # Versions 2.x of Python don't support Unicode in sys.argv on Windows, with the + # underlying Windows API instead replacing multi-byte characters with '?'. + from ctypes import POINTER, byref, cdll, c_int, windll + from ctypes.wintypes import LPCWSTR, LPWSTR + + get_cmd_linew = cdll.kernel32.GetCommandLineW + get_cmd_linew.argtypes = [] + get_cmd_linew.restype = LPCWSTR + + cmdline_to_argvw = windll.shell32.CommandLineToArgvW + cmdline_to_argvw.argtypes = [LPCWSTR, POINTER(c_int)] + cmdline_to_argvw.restype = POINTER(LPWSTR) + + cmd = get_cmd_linew() + argc = c_int(0) + argv = cmdline_to_argvw(cmd, byref(argc)) + if argc.value > 0: + # Remove Python executable and commands if present + start = argc.value - len(sys.argv) + return [argv[i] for i in xrange(start, argc.value)] diff -Nru deluge-1.3.12/deluge/core/alertmanager.py deluge-1.3.13/deluge/core/alertmanager.py --- deluge-1.3.12/deluge/core/alertmanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/alertmanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -74,7 +74,8 @@ def stop(self): for dc in self.delayed_calls: - dc.cancel() + if dc.active(): + dc.cancel() self.delayed_calls = [] def register_handler(self, alert_type, handler): diff -Nru deluge-1.3.12/deluge/core/core.py deluge-1.3.13/deluge/core/core.py --- deluge-1.3.12/deluge/core/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -72,10 +72,15 @@ from deluge.core.rpcserver import export class Core(component.Component): - def __init__(self, listen_interface=None): + def __init__(self, listen_interface=None, read_only_config_keys=None): log.debug("Core init..") component.Component.__init__(self, "Core") + # These keys will be dropped from the set_config() RPC and are + # configurable from the command-line. + self.read_only_config_keys = read_only_config_keys + log.debug("read_only_config_keys: %s", read_only_config_keys) + # Start the libtorrent session log.info("Starting libtorrent %s session..", lt.version) @@ -409,15 +414,18 @@ @export def pause_all_torrents(self): """Pause all torrents in the session""" - for torrent in self.torrentmanager.torrents.values(): - torrent.pause() + if not self.session.is_paused(): + self.session.pause() + component.get("EventManager").emit(SessionPausedEvent()) @export def resume_all_torrents(self): """Resume all torrents in the session""" - for torrent in self.torrentmanager.torrents.values(): - torrent.resume() - component.get("EventManager").emit(SessionResumedEvent()) + if self.session.is_paused(): + self.session.resume() + for torrent_id in self.torrentmanager.torrents: + self.torrentmanager[torrent_id].update_state() + component.get("EventManager").emit(SessionResumedEvent()) @export def resume_torrent(self, torrent_ids): @@ -434,9 +442,9 @@ # Torrent was probaly removed meanwhile return {} - # Get the leftover fields and ask the plugin manager to fill them + # Get any remaining keys from plugin manager or 'all' if no keys specified. leftover_fields = list(set(keys) - set(status.keys())) - if len(leftover_fields) > 0: + if len(leftover_fields) > 0 or len(keys) == 0: status.update(self.pluginmanager.get_status(torrent_id, leftover_fields)) return status @@ -499,6 +507,8 @@ """Set the config with values from dictionary""" # Load all the values into the configuration for key in config.keys(): + if self.read_only_config_keys and key in self.read_only_config_keys: + continue if isinstance(config[key], unicode) or isinstance(config[key], str): config[key] = config[key].encode("utf8") self.config[key] = config[key] diff -Nru deluge-1.3.12/deluge/core/daemon.py deluge-1.3.13/deluge/core/daemon.py --- deluge-1.3.12/deluge/core/daemon.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/daemon.py 2016-07-20 14:23:28.000000000 +0000 @@ -133,9 +133,15 @@ else: listen_interface = "" + if options and options.read_only_config_keys: + read_only_config_keys = options.read_only_config_keys.split(",") + else: + read_only_config_keys = [] + from deluge.core.core import Core # Start the core as a thread and join it until it's done - self.core = Core(listen_interface=listen_interface) + self.core = Core(listen_interface=listen_interface, + read_only_config_keys=read_only_config_keys) port = self.core.config["daemon_port"] if options and options.port: diff -Nru deluge-1.3.12/deluge/core/filtermanager.py deluge-1.3.13/deluge/core/filtermanager.py --- deluge-1.3.12/deluge/core/filtermanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/filtermanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -169,7 +169,9 @@ for torrent_id in list(torrent_ids): status = status_func(torrent_id, filter_dict.keys()) #status={key:value} for field, values in filter_dict.iteritems(): - if (not status[field] in values) and torrent_id in torrent_ids: + if field in status and status[field] in values: + continue + elif torrent_id in torrent_ids: torrent_ids.remove(torrent_id) return torrent_ids diff -Nru deluge-1.3.12/deluge/core/pluginmanager.py deluge-1.3.13/deluge/core/pluginmanager.py --- deluge-1.3.12/deluge/core/pluginmanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/pluginmanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -92,6 +92,8 @@ def get_status(self, torrent_id, fields): """Return the value of status fields for the selected torrent_id.""" status = {} + if len(fields) == 0: + fields = self.status_fields.keys() for field in fields: try: status[field] = self.status_fields[field](torrent_id) diff -Nru deluge-1.3.12/deluge/core/rpcserver.py deluge-1.3.13/deluge/core/rpcserver.py --- deluge-1.3.12/deluge/core/rpcserver.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/rpcserver.py 2016-07-20 14:23:28.000000000 +0000 @@ -493,10 +493,10 @@ """ This method generates a new SSL key/cert. """ - digest = "md5" + digest = "sha256" # Generate key pair pkey = crypto.PKey() - pkey.generate_key(crypto.TYPE_RSA, 1024) + pkey.generate_key(crypto.TYPE_RSA, 2048) # Generate cert request req = crypto.X509Req() @@ -509,7 +509,7 @@ cert = crypto.X509() cert.set_serial_number(0) cert.gmtime_adj_notBefore(0) - cert.gmtime_adj_notAfter(60*60*24*365*5) # Five Years + cert.gmtime_adj_notAfter(60 * 60 * 24 * 365 * 3) # Three Years cert.set_issuer(req.get_subject()) cert.set_subject(req.get_subject()) cert.set_pubkey(req.get_pubkey()) diff -Nru deluge-1.3.12/deluge/core/torrentmanager.py deluge-1.3.13/deluge/core/torrentmanager.py --- deluge-1.3.12/deluge/core/torrentmanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/torrentmanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -202,6 +202,12 @@ self.on_alert_file_error) self.alerts.register_handler("file_completed_alert", self.on_alert_file_completed) + self.alerts.register_handler("fastresume_rejected_alert", + self.on_alert_fastresume_rejected) + + # Define timers + self.save_state_timer = LoopingCall(self.save_state) + self.save_resume_data_timer = LoopingCall(self.save_resume_data) def start(self): # Get the pluginmanager reference @@ -210,14 +216,12 @@ # Run the old state upgrader before loading state deluge.core.oldstateupgrader.OldStateUpgrader() - # Try to load the state from file + # Try to load the state from file. self.load_state() - # Save the state every 5 minutes - self.save_state_timer = LoopingCall(self.save_state) + # Save the state and resume data every ~3 minutes. self.save_state_timer.start(200, False) - self.save_resume_data_timer = LoopingCall(self.save_resume_data) - self.save_resume_data_timer.start(190) + self.save_resume_data_timer.start(190, False) def stop(self): # Stop timers @@ -491,6 +495,10 @@ component.resume("AlertManager") + # Store the orignal resume_data, in case of errors. + if resume_data: + self.resume_data[torrent.torrent_id] = resume_data + # Resume the torrent if needed if not options["add_paused"]: torrent.resume() @@ -645,7 +653,7 @@ # Try to use an old state try: state_tmp = TorrentState() - if dir(state.torrents[0]) != dir(state_tmp): + if state.torrents and dir(state.torrents[0]) != dir(state_tmp): for attr in (set(dir(state_tmp)) - set(dir(state.torrents[0]))): for s in state.torrents: setattr(s, attr, getattr(state_tmp, attr, None)) @@ -674,9 +682,14 @@ state = TorrentManagerState() # Create the state for each Torrent and append to the list for torrent in self.torrents.values(): - paused = False - if torrent.state == "Paused": + if self.session.is_paused(): + paused = torrent.handle.is_paused() + elif torrent.forced_error: + paused = torrent.forced_error.was_paused + elif torrent.state == "Paused": paused = True + else: + paused = False torrent_state = TorrentState( torrent.torrent_id, @@ -759,7 +772,8 @@ resume_data = lt.bdecode(fastresume_file.read()) fastresume_file.close() except (EOFError, IOError, Exception), e: - log.warning("Unable to load fastresume file: %s", e) + if self.torrents: + log.warning("Unable to load fastresume file: %s", e) resume_data = None else: log.info("Successfully loaded fastresume file: %s", _filepath) @@ -815,7 +829,7 @@ os.fsync(fastresume_file.fileno()) fastresume_file.close() os.rename(filepath_tmp, filepath) - except IOError: + except IOError, ex: log.error("Unable to save %s: %s", filepath, ex) if os.path.isfile(filepath_bak): log.info("Restoring backup of fastresume from: %s", filepath_bak) @@ -962,10 +976,7 @@ except: return # Set the torrent state - old_state = torrent.state torrent.update_state() - if torrent.state != old_state: - component.get("EventManager").emit(TorrentStateChangedEvent(torrent_id, torrent.state)) # Don't save resume data for each torrent after self.stop() was called. # We save resume data in bulk in self.stop() in this case. @@ -989,6 +1000,7 @@ torrent.forcing_recheck = False if torrent.forcing_recheck_paused: torrent.handle.pause() + torrent.set_trackers(torrent.trackers, reannounce=False) # Set the torrent state torrent.update_state() @@ -1031,13 +1043,19 @@ torrent.set_tracker_status(tracker_status) def on_alert_tracker_error(self, alert): - log.debug("on_alert_tracker_error") + """Alert handler for libtorrent tracker_error_alert""" + error_message = decode_string(alert.msg) + # If alert.msg is empty then it's a '-1' code so fallback to a.e.message. Note that alert.msg + # cannot be replaced by a.e.message because the code is included in the string (for non-'-1'). + if not error_message: + error_message = decode_string(alert.error.message()) + log.debug("Tracker Error Alert: %s [%s]", decode_string(alert.message()), error_message) try: torrent = self.torrents[str(alert.handle.info_hash())] - except: + except (RuntimeError, KeyError): return - tracker_status = "%s: %s" % (_("Error"), alert.msg) - torrent.set_tracker_status(tracker_status) + + torrent.set_tracker_status("%s: %s" % (_("Error"), error_message)) def on_alert_storage_moved(self, alert): log.debug("on_alert_storage_moved") @@ -1063,6 +1081,7 @@ except (RuntimeError, KeyError): return + log.error("Torrent %s, %s", torrent_id, decode_string(alert.message())) if torrent_id in self.waiting_on_finish_moving: self.waiting_on_finish_moving.remove(torrent_id) torrent.is_finished = True @@ -1075,11 +1094,7 @@ torrent_id = str(alert.handle.info_hash()) except: return - old_state = torrent.state torrent.update_state() - if torrent.state != old_state: - # We need to emit a TorrentStateChangedEvent too - component.get("EventManager").emit(TorrentStateChangedEvent(torrent_id, torrent.state)) component.get("EventManager").emit(TorrentResumedEvent(torrent_id)) def on_alert_state_changed(self, alert): @@ -1090,7 +1105,6 @@ except: return - old_state = torrent.state torrent.update_state() # Torrent may need to download data after checking. @@ -1098,10 +1112,6 @@ torrent.is_finished = False self.queued_torrents.add(torrent_id) - # Only emit a state changed event if the state has actually changed - if torrent.state != old_state: - component.get("EventManager").emit(TorrentStateChangedEvent(torrent_id, torrent.state)) - def on_alert_save_resume_data(self, alert): log.debug("on_alert_save_resume_data") try: @@ -1130,6 +1140,25 @@ self.save_resume_data_file() + def on_alert_fastresume_rejected(self, alert): + """Alert handler for libtorrent fastresume_rejected_alert""" + alert_msg = decode_string(alert.message()) + log.error("on_alert_fastresume_rejected: %s", alert_msg) + try: + torrent_id = str(alert.handle.info_hash()) + torrent = self.torrents[torrent_id] + except (RuntimeError, KeyError): + return + + if alert.error.value() == 134: + if not os.path.isdir(torrent.options["download_location"]): + error_msg = "Unable to locate Download Folder!" + else: + error_msg = "Missing or invalid torrent data!" + else: + error_msg = "Problem with resume data: %s" % alert_msg.split(":", 1)[1].strip() + + torrent.force_error_state(error_msg, restart_to_resume=True) def on_alert_file_renamed(self, alert): log.debug("on_alert_file_renamed") diff -Nru deluge-1.3.12/deluge/core/torrent.py deluge-1.3.13/deluge/core/torrent.py --- deluge-1.3.12/deluge/core/torrent.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/core/torrent.py 2016-07-20 14:23:28.000000000 +0000 @@ -98,6 +98,14 @@ self["file_priorities"] = [] self["mapped_files"] = {} + +class TorrentError(object): + def __init__(self, error_message, was_paused=False, restart_to_resume=False): + self.error_message = error_message + self.was_paused = was_paused + self.restart_to_resume = restart_to_resume + + class Torrent(object): """Torrent holds information about torrents added to the libtorrent session. """ @@ -141,6 +149,9 @@ # Store the magnet uri used to add this torrent if available self.magnet = magnet + # Torrent state e.g. Paused, Downloading, etc. + self.state = None + # Holds status info so that we don't need to keep getting it from lt self.status = self.handle.status() @@ -185,11 +196,14 @@ # Various torrent options self.handle.resolve_countries(True) - self.set_options(self.options) + # Details of torrent forced into error state (i.e. not by libtorrent). + self.forced_error = None # Status message holds error info about the torrent self.statusmsg = "OK" + self.set_options(self.options) + # The torrents state self.update_state() @@ -209,8 +223,6 @@ self.forcing_recheck = False self.forcing_recheck_paused = False - log.debug("Torrent object created.") - ## Options methods ## def set_options(self, options): OPTIONS_FUNCS = { @@ -235,6 +247,10 @@ def set_max_connections(self, max_connections): + if max_connections == 0: + max_connections = -1 + elif max_connections == 1: + max_connections = 2 self.options["max_connections"] = int(max_connections) self.handle.set_max_connections(max_connections) @@ -323,7 +339,7 @@ # Set the first/last priorities if needed self.set_prioritize_first_last(self.options["prioritize_first_last_pieces"]) - def set_trackers(self, trackers): + def set_trackers(self, trackers, reannounce=True): """Sets trackers""" if trackers == None: trackers = [] @@ -353,7 +369,7 @@ # log.debug("tier: %s tracker: %s", t["tier"], t["url"]) # Set the tracker list in the torrent object self.trackers = trackers - if len(trackers) > 0: + if len(trackers) > 0 and reannounce: # Force a reannounce if there is at least 1 tracker self.force_reannounce() @@ -366,51 +382,56 @@ def set_tracker_status(self, status): """Sets the tracker status""" + self.tracker_host = None self.tracker_status = self.get_tracker_host() + ": " + status def update_state(self): """Updates the state based on what libtorrent's state for the torrent is""" # Set the initial state based on the lt state LTSTATE = deluge.common.LT_TORRENT_STATE - ltstate = int(self.handle.status().state) + status = self.handle.status() + ltstate = status.state - # Set self.state to the ltstate right away just incase we don't hit some - # of the logic below - if ltstate in LTSTATE: - self.state = LTSTATE[ltstate] - else: - self.state = str(ltstate) - - log.debug("set_state_based_on_ltstate: %s", deluge.common.LT_TORRENT_STATE[ltstate]) - log.debug("session.is_paused: %s", component.get("Core").session.is_paused()) + # Set self.state to the ltstate right away just incase we don't hit some of the logic below + old_state = self.state + self.state = LTSTATE.get(int(ltstate), str(ltstate)) + + is_paused = self.handle.is_paused() + is_auto_managed = self.handle.is_auto_managed() + session_paused = component.get("Core").session.is_paused() # First we check for an error from libtorrent, and set the state to that # if any occurred. - if len(self.handle.status().error) > 0: + if self.forced_error: + self.state = "Error" + self.set_status_message("Error: " + self.forced_error.error_message) + elif status.error: # This is an error'd torrent self.state = "Error" - self.set_status_message(self.handle.status().error) - if self.handle.is_paused(): + self.set_status_message(status.error) + if is_paused: self.handle.auto_managed(False) - return - - if ltstate == LTSTATE["Queued"] or ltstate == LTSTATE["Checking"]: - if self.handle.is_paused(): + else: + if is_paused and is_auto_managed and not session_paused: + self.state = "Queued" + elif is_paused or session_paused: self.state = "Paused" - else: + elif ltstate == LTSTATE["Queued"] or ltstate == LTSTATE["Checking"] or \ + ltstate == LTSTATE["Checking Resume Data"]: self.state = "Checking" - return - elif ltstate == LTSTATE["Downloading"] or ltstate == LTSTATE["Downloading Metadata"]: - self.state = "Downloading" - elif ltstate == LTSTATE["Finished"] or ltstate == LTSTATE["Seeding"]: - self.state = "Seeding" - elif ltstate == LTSTATE["Allocating"]: - self.state = "Allocating" - - if self.handle.is_paused() and self.handle.is_auto_managed() and not component.get("Core").session.is_paused(): - self.state = "Queued" - elif component.get("Core").session.is_paused() or (self.handle.is_paused() and not self.handle.is_auto_managed()): - self.state = "Paused" + elif ltstate == LTSTATE["Downloading"] or ltstate == LTSTATE["Downloading Metadata"]: + self.state = "Downloading" + elif ltstate == LTSTATE["Finished"] or ltstate == LTSTATE["Seeding"]: + self.state = "Seeding" + elif ltstate == LTSTATE["Allocating"]: + self.state = "Allocating" + + if self.state != old_state: + log.debug("Using torrent state from lt: %s, auto_managed: %s, paused: %s, session_paused: %s", + ltstate, is_auto_managed, is_paused, session_paused) + log.debug("Torrent %s set from %s to %s: '%s'", + self.torrent_id, old_state, self.state, self.statusmsg) + component.get("EventManager").emit(TorrentStateChangedEvent(self.torrent_id, self.state)) def set_state(self, state): """Accepts state strings, ie, "Paused", "Seeding", etc.""" @@ -424,6 +445,37 @@ def set_status_message(self, message): self.statusmsg = message + def force_error_state(self, message, restart_to_resume=True): + """Forces the torrent into an error state. + + For setting an error state not covered by libtorrent. + + Args: + message (str): The error status message. + restart_to_resume (bool, optional): Prevent resuming clearing the error, only restarting + session can resume. + """ + status = self.handle.status() + self.handle.auto_managed(False) + self.forced_error = TorrentError(message, status.paused, restart_to_resume) + if not status.paused: + self.handle.pause() + self.update_state() + + def clear_forced_error_state(self, update_state=True): + if not self.forced_error: + return + + if self.forced_error.restart_to_resume: + log.error("Restart deluge to clear this torrent error") + + if not self.forced_error.was_paused and self.options["auto_managed"]: + self.handle.auto_managed(True) + self.forced_error = None + self.set_status_message("OK") + if update_state: + self.update_state() + def get_eta(self): """Returns the ETA in seconds for this torrent""" if self.status == None: @@ -779,6 +831,8 @@ def pause(self): """Pause this torrent""" + if self.state == "Error": + return False # Turn off auto-management so the torrent will not be unpaused by lt queueing self.handle.auto_managed(False) if self.handle.is_paused(): @@ -802,7 +856,8 @@ if self.handle.is_paused() and self.handle.is_auto_managed(): log.debug("Torrent is being auto-managed, cannot resume!") - return + elif self.forced_error and self.forced_error.was_paused: + log.debug("Skip resuming Error state torrent that was originally paused.") else: # Reset the status message just in case of resuming an Error'd torrent self.set_status_message("OK") @@ -826,6 +881,11 @@ return True + if self.forced_error and not self.forced_error.restart_to_resume: + self.clear_forced_error_state() + elif self.state == "Error" and not self.forced_error: + self.handle.clear_error() + def connect_peer(self, ip, port): """adds manual peer""" try: @@ -838,27 +898,31 @@ def move_storage(self, dest): """Move a torrent's storage location""" try: - dest = unicode(dest, "utf-8") + dest = unicode(dest, "utf-8") except TypeError: - # String is already unicode - pass + # String is already unicode + pass if not os.path.exists(dest): try: # Try to make the destination path if it doesn't exist os.makedirs(dest) - except IOError, e: - log.exception(e) - log.error("Could not move storage for torrent %s since %s does not exist and could not create the directory.", self.torrent_id, dest_u) + except OSError, e: + log.error("Could not move storage for torrent %s since %s does " + "not exist and could not create the directory: %s", + self.torrent_id, dest, ex) return False + kwargs = {} + if deluge.common.VersionSplit(lt.version) >= deluge.common.VersionSplit("1.0.0.0"): + kwargs['flags'] = 1 # fail_if_exist dest_bytes = dest.encode('utf-8') try: # libtorrent needs unicode object if wstrings are enabled, utf8 bytestring otherwise try: - self.handle.move_storage(dest) + self.handle.move_storage(dest, **kwargs) except TypeError: - self.handle.move_storage(dest_bytes) + self.handle.move_storage(dest_bytes, **kwargs) except Exception, e: log.error("Error calling libtorrent move_storage: %s" % e) return False @@ -868,8 +932,12 @@ def save_resume_data(self): """Signals libtorrent to build resume data for this torrent, it gets returned in a libtorrent alert""" - self.handle.save_resume_data() - self.waiting_on_resume_data = True + # Don't generate fastresume data if torrent is in a Deluge Error state. + if self.forced_error: + log.debug("Skipped creating resume_data while in Error state") + else: + self.handle.save_resume_data() + self.waiting_on_resume_data = True def on_metadata_received(self): if self.options["prioritize_first_last_pieces"]: @@ -926,16 +994,27 @@ def force_recheck(self): """Forces a recheck of the torrents pieces""" - paused = self.handle.is_paused() + self.forcing_recheck = True + if self.forced_error: + self.forcing_recheck_paused = self.forced_error.was_paused + self.clear_forced_error_state(update_state=False) + else: + self.forcing_recheck_paused = self.handle.is_paused() + # Store trackers for paused torrents to prevent unwanted announce before pausing again. + if self.forcing_recheck_paused: + self.set_trackers(None, reannounce=False) + self.handle.replace_trackers([]) + try: self.handle.force_recheck() self.handle.resume() except Exception, e: log.debug("Unable to force recheck: %s", e) - return False - self.forcing_recheck = True - self.forcing_recheck_paused = paused - return True + self.forcing_recheck = False + if self.forcing_recheck_paused: + self.set_trackers(torrent.trackers, reannounce=False) + + return self.forcing_recheck def rename_files(self, filenames): """Renames files in the torrent. 'filenames' should be a list of @@ -984,4 +1063,3 @@ for key in self.prev_status.keys(): if not self.rpcserver.is_session_valid(key): del self.prev_status[key] - diff -Nru deluge-1.3.12/deluge/httpdownloader.py deluge-1.3.13/deluge/httpdownloader.py --- deluge-1.3.12/deluge/httpdownloader.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/httpdownloader.py 2016-07-20 14:23:28.000000000 +0000 @@ -211,7 +211,23 @@ factory = HTTPDownloader(url, filename, callback, headers, force_filename, allow_compression) if scheme == "https": from twisted.internet import ssl - reactor.connectSSL(host, port, factory, ssl.ClientContextFactory()) + # ClientTLSOptions in Twisted >= 14, see ticket #2765 for details on this addition. + try: + from twisted.internet._sslverify import ClientTLSOptions + except ImportError: + ctx_factory = ssl.ClientContextFactory() + else: + class TLSSNIContextFactory(ssl.ClientContextFactory): + """ + A custom context factory to add a server name for TLS connections. + """ + def getContext(self, hostname=None, port=None): + ctx = ssl.ClientContextFactory.getContext(self) + ClientTLSOptions(host, ctx) + return ctx + ctx_factory = TLSSNIContextFactory() + + reactor.connectSSL(host, port, factory, ctx_factory) else: reactor.connectTCP(host, port, factory) diff -Nru deluge-1.3.12/deluge/i18n/af.po deluge-1.3.13/deluge/i18n/af.po --- deluge-1.3.12/deluge/i18n/af.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/af.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ar.po deluge-1.3.13/deluge/i18n/ar.po --- deluge-1.3.12/deluge/i18n/ar.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ar.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ast.po deluge-1.3.13/deluge/i18n/ast.po --- deluge-1.3.12/deluge/i18n/ast.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ast.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/be.po deluge-1.3.13/deluge/i18n/be.po --- deluge-1.3.12/deluge/i18n/be.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/be.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2012-01-02 22:50+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2015-11-04 13:10+0000\n" +"Last-Translator: Cas \n" "Language-Team: Belarusian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -3256,7 +3256,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:3637 msgid "Web Seed" -msgstr "b>Вэб-сід" +msgstr "Вэб-сід" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3824 msgid "Tracker" diff -Nru deluge-1.3.12/deluge/i18n/bg.po deluge-1.3.13/deluge/i18n/bg.po --- deluge-1.3.12/deluge/i18n/bg.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/bg.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/bn.po deluge-1.3.13/deluge/i18n/bn.po --- deluge-1.3.12/deluge/i18n/bn.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/bn.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/bs.po deluge-1.3.13/deluge/i18n/bs.po --- deluge-1.3.12/deluge/i18n/bs.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/bs.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ca.po deluge-1.3.13/deluge/i18n/ca.po --- deluge-1.3.12/deluge/i18n/ca.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ca.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/cs.po deluge-1.3.13/deluge/i18n/cs.po --- deluge-1.3.12/deluge/i18n/cs.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/cs.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/da.po deluge-1.3.13/deluge/i18n/da.po --- deluge-1.3.12/deluge/i18n/da.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/da.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/de.po deluge-1.3.13/deluge/i18n/de.po --- deluge-1.3.12/deluge/i18n/de.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/de.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,18 +8,18 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2013-10-13 23:49+0000\n" -"Last-Translator: Tobias Bannert \n" +"PO-Revision-Date: 2015-10-11 14:38+0000\n" +"Last-Translator: Ettore Atalan \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" -msgstr "" +msgstr "Nicht verfügbar" #: deluge/common.py:260 msgid "KiB" @@ -196,11 +196,13 @@ "The torrent \"%(name)s\" including %(num_files)i file(s) has finished " "downloading." msgstr "" +"Der Torrent \"%(name)s\" mit %(num_files)i Datei(en) hat das Herunterladen " +"abgeschlossen." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:266 #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:297 msgid "Notifications" -msgstr "" +msgstr "Benach­rich­ti­gungen" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:616 msgid "Choose Sound File" @@ -316,7 +318,7 @@ #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:32 #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:38 msgid "Extractor" -msgstr "" +msgstr "Entpacker" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:27 msgid "Extract to:" @@ -359,7 +361,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Torrent entfernt" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -483,7 +485,7 @@ #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:32 #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:39 msgid "WebUi" -msgstr "" +msgstr "WebOberfläche" #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:76 msgid "" @@ -517,7 +519,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:387 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:391 msgid "AutoAdd" -msgstr "" +msgstr "AutoHinzufügen" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/config.glade:41 msgid "Watch Folders:" @@ -662,7 +664,7 @@ #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:162 #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:285 msgid "Scheduler" -msgstr "" +msgstr "Planer" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:227 msgid "Download Limit:" @@ -2283,6 +2285,8 @@ #: deluge/ui/gtkui/preferences.py:769 msgid "You must restart the deluge UI to change classic mode. Quit now?" msgstr "" +"Sie müssen die Deluge-Benutzeroberfläche neu starten, um den klassischen " +"Modus zu ändern. Jetzt beenden?" #: deluge/ui/gtkui/preferences.py:955 msgid "Select the Plugin" @@ -2294,7 +2298,7 @@ #: deluge/ui/gtkui/torrentdetails.py:93 msgid "_All" -msgstr "" +msgstr "_Alle" #: deluge/ui/gtkui/torrentdetails.py:94 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:15 @@ -2363,7 +2367,7 @@ #: deluge/ui/gtkui/gtkui.py:360 msgid "Enable Thin Client Mode?" -msgstr "" +msgstr "Thin-Client-Modus aktivieren?" #: deluge/ui/gtkui/gtkui.py:361 msgid "" @@ -2459,15 +2463,15 @@ #: deluge/ui/gtkui/dialogs.py:390 msgid "Password Protected" -msgstr "" +msgstr "Passwortgeschützt" #: deluge/ui/gtkui/mainwindow.py:191 msgid "Enter your password to show Deluge..." -msgstr "" +msgstr "Geben Sie Ihr Passwort ein, um Deluge anzuzeigen..." #: deluge/ui/gtkui/mainwindow.py:235 msgid "Enter your password to Quit Deluge..." -msgstr "" +msgstr "Geben Sie Ihr Passwort ein, um Deluge zu beenden..." #: deluge/ui/gtkui/mainwindow.py:315 msgid "D:" @@ -2480,7 +2484,7 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Copyright %(year_start)s-%(year_end)s Deluge Team" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" @@ -3024,10 +3028,14 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1713 msgid "The maximum download speed per torrent. Set -1 for unlimited." msgstr "" +"Die maximale Herunterladegeschwindigkeit pro Torrent. -1 für unbegrenzt " +"festlegen." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 msgid "The maximum upload speed per torrent. Set -1 for unlimited." msgstr "" +"Die maximale Hochladegeschwindigkeit pro Torrent. -1 für unbegrenzt " +"festlegen." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" @@ -3064,7 +3072,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 msgid "Focus window when adding torrent" -msgstr "" +msgstr "Fenster beim Hinzufügen eines Torrent fokussieren" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1923 msgid "Main Window" diff -Nru deluge-1.3.12/deluge/i18n/el.po deluge-1.3.13/deluge/i18n/el.po --- deluge-1.3.12/deluge/i18n/el.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/el.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/en_AU.po deluge-1.3.13/deluge/i18n/en_AU.po --- deluge-1.3.12/deluge/i18n/en_AU.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/en_AU.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/en_CA.po deluge-1.3.13/deluge/i18n/en_CA.po --- deluge-1.3.12/deluge/i18n/en_CA.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/en_CA.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/en_GB.po deluge-1.3.13/deluge/i18n/en_GB.po --- deluge-1.3.12/deluge/i18n/en_GB.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/en_GB.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2014-07-23 13:44+0000\n" +"PO-Revision-Date: 2015-10-22 11:06+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -359,7 +359,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Torrent Removed" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -724,7 +724,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Upload Slots:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 @@ -2476,7 +2476,7 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Copyright %(year_start)s-%(year_end)s Deluge Team" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" diff -Nru deluge-1.3.12/deluge/i18n/es.po deluge-1.3.13/deluge/i18n/es.po --- deluge-1.3.12/deluge/i18n/es.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/es.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/et.po deluge-1.3.13/deluge/i18n/et.po --- deluge-1.3.12/deluge/i18n/et.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/et.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/eu.po deluge-1.3.13/deluge/i18n/eu.po --- deluge-1.3.12/deluge/i18n/eu.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/eu.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2014-09-02 19:40+0000\n" -"Last-Translator: Ibai Oihanguren Sala \n" +"PO-Revision-Date: 2016-05-19 17:45+0000\n" +"Last-Translator: Mikel Larreategi \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -2040,7 +2040,7 @@ #: deluge/ui/gtkui/systemtray.py:169 msgid "Not Connected..." -msgstr "Elkarketatu gabe" +msgstr "Konektatu gabe" #: deluge/ui/gtkui/systemtray.py:220 deluge/ui/gtkui/systemtray.py:224 #: deluge/ui/web/js/deluge-all/Statusbar.js:85 @@ -2337,7 +2337,7 @@ #: deluge/ui/web/js/deluge-all/Statusbar.js:96 msgid "Set Maximum Connections" -msgstr "Ezarri Gehienezko Elkarketak" +msgstr "Ezarri konexio kopuru maximoa" #: deluge/ui/gtkui/menubar.py:440 msgid "Set Maximum Upload Slots" @@ -2551,7 +2551,7 @@ #: deluge/ui/gtkui/statusbar.py:128 #: deluge/ui/web/js/deluge-all/Statusbar.js:39 msgid "Not Connected" -msgstr "Elkarketatu Gabe" +msgstr "Konektatu gabe" #: deluge/plugins/Stats/deluge/plugins/stats/data/tabs.glade:112 #: deluge/ui/gtkui/statusbar.py:145 @@ -2559,7 +2559,7 @@ #: deluge/ui/web/js/deluge-all/Statusbar.js:57 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:69 msgid "Connections" -msgstr "Elkarketak" +msgstr "Konexioak" #: deluge/ui/gtkui/statusbar.py:150 #: deluge/ui/web/js/deluge-all/Statusbar.js:104 diff -Nru deluge-1.3.12/deluge/i18n/fa.po deluge-1.3.13/deluge/i18n/fa.po --- deluge-1.3.12/deluge/i18n/fa.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/fa.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/fi.po deluge-1.3.13/deluge/i18n/fi.po --- deluge-1.3.12/deluge/i18n/fi.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/fi.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2015-05-21 09:35+0000\n" -"Last-Translator: Pekka \"PEXI\" Niemistö \n" +"PO-Revision-Date: 2015-10-17 14:31+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -317,7 +317,7 @@ #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:32 #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:38 msgid "Extractor" -msgstr "" +msgstr "Purkamo" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:27 msgid "Extract to:" @@ -359,7 +359,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Torrent poistettu" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -483,7 +483,7 @@ #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:32 #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:39 msgid "WebUi" -msgstr "" +msgstr "Web-käyttöliittymä" #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:76 msgid "" @@ -2472,7 +2472,7 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Tekijänoikeus %(year_start)s-%(year_end)s Deluge-tiimi" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" diff -Nru deluge-1.3.12/deluge/i18n/fo.po deluge-1.3.13/deluge/i18n/fo.po --- deluge-1.3.12/deluge/i18n/fo.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/fo.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/fr.po deluge-1.3.13/deluge/i18n/fr.po --- deluge-1.3.12/deluge/i18n/fr.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/fr.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2015-08-09 11:58+0000\n" -"Last-Translator: bousket \n" +"PO-Revision-Date: 2016-02-27 13:30+0000\n" +"Last-Translator: magnetik \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -119,7 +119,7 @@ #, python-format msgid "The server didn't accept the username/password combination: %s" msgstr "" -"Le serveur n'accepte pas la combinaison nom d'utilisateur/mot de passe: %s" +"Le serveur n'accepte pas la combinaison nom d'utilisateur/mot de passe : %s" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:171 msgid "Notification email sent." @@ -242,7 +242,7 @@ #: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:58 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:151 msgid "Port:" -msgstr "Port:" +msgstr "Port :" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:231 #: deluge/ui/gtkui/dialogs.py:197 deluge/ui/gtkui/dialogs.py:258 @@ -251,7 +251,7 @@ #: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:85 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:96 msgid "Username:" -msgstr "Nom d’utilisateur:" +msgstr "Nom d'utilisateur :" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:255 #: deluge/ui/gtkui/dialogs.py:205 deluge/ui/gtkui/dialogs.py:286 @@ -262,7 +262,7 @@ #: deluge/ui/web/js/deluge-all/LoginWindow.js:70 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:105 msgid "Password:" -msgstr "Mot de passe:" +msgstr "Mot de passe :" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:360 msgid "Recipients" @@ -334,7 +334,7 @@ #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:69 msgid "Create torrent name sub-folder" -msgstr "Créer un sous répertoire avec le nom du torrent" +msgstr "Créer un sous-répertoire avec le nom du torrent" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:73 msgid "" @@ -361,7 +361,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Torrent supprimé" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -370,7 +370,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:29 msgid "Event" -msgstr "Evènement" +msgstr "Événement" #: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:41 msgid "Command" @@ -390,11 +390,11 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:20 msgid "SafePeer Text (Zipped)" -msgstr "Texte SafePeer (Zippé)" +msgstr "Texte SafePeer (zippé)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:21 msgid "PeerGuardian Text (Uncompressed)" -msgstr "Texte PeerGuardian (Non compressé)" +msgstr "Texte PeerGuardian (non compressé)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:22 msgid "PeerGuardian P2B (GZip)" @@ -470,15 +470,15 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:449 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:48 msgid "Type:" -msgstr "Type:" +msgstr "Type :" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:462 msgid "Date:" -msgstr "Date:" +msgstr "Date :" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:475 msgid "File Size:" -msgstr "Taille de fichier:" +msgstr "Taille du fichier :" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:496 msgid "Info" @@ -507,7 +507,7 @@ #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:60 msgid "Listening port:" -msgstr "Port d'écoute:" +msgstr "Port d'écoute :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:124 msgid "Watch folder does not exist." @@ -591,22 +591,22 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:726 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:123 msgid "Max Upload Speed:" -msgstr "Vitesse maximale d'envoi:" +msgstr "Vitesse maximale d'envoi :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:743 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:150 msgid "Max Connections:" -msgstr "Nombre maximal de connexions:" +msgstr "Nombre maximal de connexions :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:760 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:173 msgid "Max Upload Slots:" -msgstr "Nombre maximum d'envois simultanés:" +msgstr "Nombre maximum d'envois simultanés :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:885 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:97 msgid "Max Download Speed:" -msgstr "Vitesse maximale de téléchargement:" +msgstr "Vitesse maximale de téléchargement :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:912 msgid "Bandwidth" @@ -617,14 +617,14 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:42 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:225 msgid "Stop seed at ratio:" -msgstr "Cesser d'envoyer une fois atteint le ratio de:" +msgstr "Arrêter le partage dès ce ratio atteint :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:976 #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:599 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:43 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:253 msgid "Remove at ratio" -msgstr "Supprimer une fois atteint le ratio de:" +msgstr "Supprimer quand le ratio est atteint" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:992 #: deluge/ui/web/render/tab_status.html:18 @@ -686,7 +686,7 @@ #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:263 msgid "Active Seeding:" -msgstr "Partages en cours:" +msgstr "Partages actifs :" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:277 msgid "Slow Settings" @@ -728,13 +728,13 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Ports d'émission :" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:69 msgid "Upload Speed:" -msgstr "Vitesse d'envoi:" +msgstr "Vitesse de téléversement :" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:396 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:33 @@ -793,7 +793,7 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:841 msgid "(1 line per tracker)" -msgstr "(1 ligne par tracker)" +msgstr "(1 ligne par traceur)" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:856 msgid "Automatically apply label:" @@ -804,7 +804,7 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:9 #: deluge/ui/web/js/deluge-all/FilterPanel.js:53 msgid "Trackers" -msgstr "Trackers" +msgstr "Traceurs" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:8 msgid "Add Label" @@ -1972,7 +1972,7 @@ #: deluge/ui/web/js/deluge-all/TorrentGrid.js:141 #: deluge/ui/web/js/deluge-all/details/PeersTab.js:63 msgid "Peers" -msgstr "Clients" +msgstr "Pairs" #: deluge/ui/gtkui/torrentview.py:256 deluge/ui/gtkui/peers_tab.py:116 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:148 @@ -2020,7 +2020,7 @@ #: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:80 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:201 msgid "Tracker" -msgstr "Tracker" +msgstr "Traceur" #: deluge/ui/gtkui/torrentview.py:288 msgid "Save Path" @@ -2303,7 +2303,7 @@ #: deluge/ui/gtkui/torrentdetails.py:94 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:15 msgid "_Status" -msgstr "É_tat" +msgstr "_État" #: deluge/ui/gtkui/torrentdetails.py:95 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:28 @@ -2348,7 +2348,7 @@ #: deluge/ui/gtkui/menubar.py:440 msgid "Set Maximum Upload Slots" -msgstr "Définir le nombre d'emplacement d'upload maximum" +msgstr "Définir le nombre maximum de port d'émission" #: deluge/ui/gtkui/gtkui.py:352 deluge/ui/gtkui/gtkui.py:379 msgid "Turn off Classic Mode?" @@ -2487,15 +2487,15 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Copyright %(year_start)s-%(year_end)s équipe Deluge" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" "A peer-to-peer file sharing program\n" "utilizing the BitTorrent protocol." msgstr "" -"Un programme de peer-to-peer de partage de fichiers\n" -"utilsant le protocole BitTorrent." +"Un programme de pair-à-pair de partage de fichiers\n" +"utilisant le protocole BitTorrent." #: deluge/ui/gtkui/aboutdialog.py:36 msgid "Client:" @@ -2606,7 +2606,7 @@ #: deluge/ui/gtkui/statusbar.py:172 msgid "No Incoming Connections!" -msgstr "Aucune connection entrante!" +msgstr "Aucune connexion entrante !" #: deluge/ui/gtkui/filtertreeview.py:124 #: deluge/ui/web/js/deluge-all/FilterPanel.js:51 @@ -2637,7 +2637,7 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:45 msgid "Remove the selected torrent?" -msgstr "Supprimer les torrents sélectionnés?" +msgstr "Supprimer le(s) torrent(s) sélectionné(s) ?" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:57 msgid "If you remove the data, it will be lost permanently." @@ -2649,33 +2649,33 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:155 msgid "Remove _Torrent" -msgstr "Supprimer le _torrent" +msgstr "Supprimer le(s) _torrent(s)" #: deluge/ui/gtkui/glade/edit_trackers.ui.h:1 #: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:40 #: deluge/ui/web/js/deluge-all/Menus.js:224 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:332 msgid "Edit Trackers" -msgstr "Éditer les trackers" +msgstr "Éditer les traceurs" #: deluge/ui/gtkui/glade/edit_trackers.glade:47 msgid "Edit Trackers" -msgstr "Editer les trackers" +msgstr "Éditer les traceurs" #: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:1 #: deluge/ui/web/js/deluge-all/AddTrackerWindow.js:40 msgid "Add Tracker" -msgstr "Ajouter un tracker" +msgstr "Ajouter un traceur" #: deluge/ui/gtkui/glade/edit_trackers.glade:260 msgid "Add Trackers" -msgstr "Ajouter des trackers" +msgstr "Ajouter des traceurs" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:4 #: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:3 #: deluge/ui/web/js/deluge-all/AddTrackerWindow.js:66 msgid "Trackers:" -msgstr "Trackeurs:" +msgstr "Traceurs :" #: deluge/ui/gtkui/glade/edit_trackers.edit.ui.h:1 #: deluge/ui/web/js/deluge-all/EditTrackerWindow.js:40 @@ -2690,7 +2690,7 @@ #: deluge/ui/web/js/deluge-all/EditTrackerWindow.js:66 #: deluge/ui/web/js/deluge-all/details/DetailsTab.js:54 msgid "Tracker:" -msgstr "Tracker:" +msgstr "Traceur :" #: deluge/ui/gtkui/glade/tray_menu.ui.h:1 msgid "_Show Deluge" @@ -2749,7 +2749,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:188 msgid "Auto add .torrents from:" -msgstr "Ajouter automatiquement les .torrents présents dans:" +msgstr "Ajouter automatiquement les .torrents depuis :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:48 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:69 @@ -2760,7 +2760,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:45 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:85 msgid "Copy of .torrent files to:" -msgstr "Copier les .torrent vers:" +msgstr "Copier les fichiers .torrent vers :" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:334 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:46 @@ -2806,7 +2806,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:50 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:106 msgid "Prioritize first and last pieces of torrent" -msgstr "Télécharger prioritairement les premier et dernier blocs" +msgstr "Télécharger en priorité les premiers et derniers blocs" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" @@ -2839,7 +2839,7 @@ #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:117 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:172 msgid "To:" -msgstr "À:" +msgstr "À :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:107 msgid "Test Active Port" @@ -2870,13 +2870,13 @@ "The TOS byte set in the IP header of every packet sent to peers (including " "web seeds). Expects a Hex value." msgstr "" -"Valeur hexadécimal de l'octet TOS (Type Of Service) de l'entête IP de chaque " -"paquet envoyé à des pairs (incluant les sources web)." +"Valeur hexadécimale de l'octet TOS (Type Of Service) de l'en-tête IP de " +"chaque paquet envoyé à des pairs (incluant les sources web)." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:129 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:247 msgid "Peer TOS Byte:" -msgstr "Octect TOS pour les pairs:" +msgstr "Octect TOS pour les pairs :" #: deluge/ui/gtkui/glade/preferences_dialog.glade:973 msgid "TOS" @@ -2973,11 +2973,11 @@ #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:108 msgid "Maximum Connection Attempts per Second:" -msgstr "Maximum de tentatives de connexions par seconde:" +msgstr "Nombre de tentatives de connexion par seconde :" #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:100 msgid "Maximum Half-Open Connections:" -msgstr "Maximum de connexions à demi-ouvertes:" +msgstr "Nombre maximal de connexions semi-ouvertes :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:68 msgid "The maximum upload speed for all torrents. Set -1 for unlimited." @@ -2987,7 +2987,7 @@ #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:92 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:177 msgid "Maximum Upload Speed (KiB/s):" -msgstr "Vitesse maximale d'envoi (Kio/s):" +msgstr "Vitesse maximale d'émission (Kio/s) :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:70 msgid "The maximum number of connections allowed. Set -1 for unlimited." @@ -2996,15 +2996,15 @@ #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:68 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:153 msgid "Maximum Connections:" -msgstr "Maximum de connexions:" +msgstr "Nombre maximum de connexions :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:72 msgid "The maximum upload slots for all torrents. Set -1 for unlimited." -msgstr "Nombre maximal de slots d'émission. Mettre -1 pour illimité." +msgstr "Nombre maximal de ports d'émission. Mettre -1 pour illimité." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:161 msgid "Maximum Upload Slots:" -msgstr "Maximum de slots d'émission:" +msgstr "Nombre maximum de ports d'émission :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:74 msgid "The maximum download speed for all torrents. Set -1 for unlimited." @@ -3015,7 +3015,7 @@ #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:84 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:169 msgid "Maximum Download Speed (KiB/s):" -msgstr "Vitesse maximale de réception (Kio/s):" +msgstr "Vitesse maximum de réception (Kio/s) :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:77 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:128 @@ -3043,8 +3043,8 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:81 msgid "The maximum upload slots per torrent. Set -1 for unlimited." msgstr "" -"Le nombre maximal de sessions d'envoi simultanées par torrent. Mettre -1 " -"pour illimité." +"Le nombre maximal de ports d'envoi simultanés par torrent. Mettre -1 pour " +"illimité." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:82 msgid "The maximum number of connections per torrent. Set -1 for unlimited." @@ -3058,7 +3058,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 msgid "The maximum upload speed per torrent. Set -1 for unlimited." -msgstr "Vitesse d'envoi maximale par torrent. Mettre -1 pour l'illimité." +msgstr "Vitesse d'émission maximale par torrent. Mettre -1 pour l'illimité." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" @@ -3079,7 +3079,7 @@ "advantage of running Deluge as a daemon. You need to restart Deluge for this " "setting to take effect." msgstr "" -"Le mode classique permet de cacher la plupart des fonctionnalités du démon " +"Le mode classique permet de masquer la plupart des fonctionnalités du démon " "et de faire apparaître Deluge comme une seule application. Utilisez ceci si " "vous ne voulez pas profiter des avantages du démon Deluge. Vous devez " "redémarrer Deluge pour que ce paramètre prenne effet." @@ -3091,7 +3091,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:19 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:64 msgid "Show session speed in titlebar" -msgstr "Montrer la vitesse actuelle dans la barre de titre" +msgstr "Afficher la vitesse actuelle dans la barre de titre" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 msgid "Focus window when adding torrent" @@ -3103,7 +3103,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:63 msgid "Always show" -msgstr "Toujours montrer" +msgstr "Toujours afficher" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:64 msgid "Bring the dialog to focus" @@ -3202,7 +3202,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:176 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:57 msgid "Daemon port:" -msgstr "Port du démon:" +msgstr "Port du démon :" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2639 msgid "Port" @@ -3238,15 +3238,15 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:88 msgid "Total active seeding:" -msgstr "Total des partages actifs:" +msgstr "Nombre total de partages actifs :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:89 msgid "Total active:" -msgstr "Total de torrents actifs:" +msgstr "Nombre total de torrents actifs :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:90 msgid "Total active downloading:" -msgstr "Total de téléchargement en cours:" +msgstr "Nombre total de téléchargement en cours :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:91 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:110 @@ -3260,21 +3260,21 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:94 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:130 msgid "Share Ratio Limit:" -msgstr "Limite du ratio de partage:" +msgstr "Limite du ratio de partage :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:95 msgid "Seed Time Ratio:" -msgstr "Ratio du temps d'envoi:" +msgstr "Ratio du temps d'émission :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:96 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:154 msgid "Seed Time (m):" -msgstr "Temps d'envoi (min):" +msgstr "Temps d'envoi (min) :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:97 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:181 msgid "Stop seeding when share ratio reaches:" -msgstr "Arrêter le partage lorsque le ratio atteint:" +msgstr "Arrêter l'envoi lorsque le ratio de partage atteint :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:98 msgid "Remove torrent when share ratio reached" @@ -3319,11 +3319,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:3637 msgid "Web Seed" -msgstr "Source Web" +msgstr "Source web" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3824 msgid "Tracker" -msgstr "Tracker" +msgstr "Traceur" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4015 msgid "DHT" @@ -3335,7 +3335,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:144 msgid "Cache Size (16 KiB blocks):" -msgstr "Taille du cache (blocs de 16 KiB):" +msgstr "Taille du cache (blocs de 16 Kib) :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:145 msgid "" @@ -3349,7 +3349,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:146 #: deluge/ui/web/js/deluge-all/preferences/CachePage.js:70 msgid "Cache Expiry (seconds):" -msgstr "Expiration du Cache (secondes):" +msgstr "Expiration du cache (en secondes) :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:148 msgid "" @@ -3373,7 +3373,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:151 msgid "Writes:" -msgstr "Écritures:" +msgstr "Écritures :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:152 msgid "" @@ -3387,7 +3387,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:153 msgid "Write Cache Hit Ratio:" -msgstr "Ratio d'accès au cache d'écriture:" +msgstr "Ratio d'accès au cache d'écriture :" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4300 msgid "Write" @@ -3398,12 +3398,12 @@ "The number of blocks that were requested from the bittorrent engine (from " "peers), that were served from disk or cache." msgstr "" -"Le nombre de blocs qui sont demandés par l'engin bittorrent (provenant des " -"pairs), qui ont été servis par le disque ou la cache." +"Le nombre de blocs qui sont demandés par le moteur bittorrent (provenant des " +"pairs), qui ont été servis par le disque ou le cache." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:156 msgid "Blocks Read:" -msgstr "Blocs lus:" +msgstr "Blocs lus :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:157 msgid "The number of blocks that were served from cache." @@ -3411,7 +3411,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:158 msgid "Blocks Read Hit:" -msgstr "Nombre de bloc lus:" +msgstr "Nombre de bloc lus :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:159 msgid "The cache hit ratio for the read cache." @@ -3450,7 +3450,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:166 msgid "Read Cache Size:" -msgstr "Taille de la cache de lecture:" +msgstr "Taille du cache de lecture :" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4515 msgid "Size" @@ -3467,23 +3467,23 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:184 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:49 msgid "Version:" -msgstr "Version:" +msgstr "Version :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:185 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:6 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:48 msgid "Author:" -msgstr "Auteur:" +msgstr "Auteur :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:186 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:51 msgid "Homepage:" -msgstr "Site Web:" +msgstr "Page d'accueil :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:187 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:50 msgid "Author Email:" -msgstr "Adresse électronique de l'auteur:" +msgstr "Adresse électronique de l'auteur :" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4872 msgid "_Install Plugin" @@ -3538,17 +3538,17 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:22 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:7 msgid "Comments:" -msgstr "Commentaires:" +msgstr "Commentaires :" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:188 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:8 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:135 msgid "Info" -msgstr "Info" +msgstr "Informations" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:10 msgid "Webseeds" -msgstr "Sources Web" +msgstr "Sources web" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:11 msgid "Piece Size:" @@ -3567,16 +3567,16 @@ "8 MiB\n" "16 MiB\n" msgstr "" -"32 KiB\n" -"64 KiB\n" -"128 KiB\n" -"256 KiB\n" -"512 KiB\n" -"1 MiB\n" -"2 MiB\n" -"4 MiB\n" -"8 MiB\n" -"16 MiB\n" +"32 Kio\n" +"64 Kio\n" +"128 Kio\n" +"256 Kio\n" +"512 Kio\n" +"1 Mio\n" +"2 Mio\n" +"4 Mio\n" +"8 Mio\n" +"16 Mio\n" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:12 msgid "Set Private Flag" @@ -3641,7 +3641,7 @@ #: deluge/ui/gtkui/glade/connection_manager.ui.h:5 msgid "Do not show this dialog on start-up" -msgstr "Ne pas montrer cette fenêtre au démarrage" +msgstr "Ne pas afficher cette fenêtre au démarrage" #: deluge/ui/gtkui/glade/main_window.ui.h:3 msgid "_Create Torrent" @@ -3677,7 +3677,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:11 msgid "Status_bar" -msgstr "Barre d'etat" +msgstr "_Barre d'état" #: deluge/ui/gtkui/glade/main_window.ui.h:12 msgid "T_abs" @@ -3693,11 +3693,11 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:16 msgid "Show _Zero Hits" -msgstr "Montrer les catégories _vides" +msgstr "Afficher les catégories _vides" #: deluge/ui/gtkui/glade/main_window.ui.h:17 msgid "Show _Trackers" -msgstr "Afficher les _trackers" +msgstr "Afficher les _traceurs" #: deluge/ui/gtkui/glade/main_window.ui.h:18 msgid "_Help" @@ -3729,7 +3729,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:25 msgid "Remove torrent" -msgstr "Supprimer le torrent" +msgstr "Supprimer le(s) torrent(s)" #: deluge/ui/gtkui/glade/main_window.ui.h:26 #: deluge/ui/gtkui/glade/remove_torrent_dialog.ui.h:1 @@ -3737,7 +3737,7 @@ #: deluge/ui/web/js/deluge-all/RemoveWindow.js:39 #: deluge/ui/web/js/deluge-all/RemoveWindow.js:57 msgid "Remove Torrent" -msgstr "Supprimer le torrent" +msgstr "Supprimer le(s) torrent(s)" #: deluge/ui/gtkui/glade/main_window.ui.h:30 msgid "Pause the selected torrents" @@ -3797,23 +3797,23 @@ #: deluge/ui/gtkui/glade/main_window.glade:718 msgid "Auto Managed:" -msgstr "Gestion automatique:" +msgstr "Gestion automatique :" #: deluge/ui/gtkui/glade/main_window.glade:759 msgid "Seed Rank:" -msgstr "Rang de partage:" +msgstr "Rang de partage :" #: deluge/ui/gtkui/glade/main_window.glade:774 msgid "Seeding Time:" -msgstr "Temps de partage:" +msgstr "Temps de partage :" #: deluge/ui/gtkui/glade/main_window.glade:800 msgid "Active Time:" -msgstr "Temps actif:" +msgstr "Temps actif :" #: deluge/ui/gtkui/glade/main_window.glade:857 msgid "Tracker Status:" -msgstr "État du tracker:" +msgstr "État du traceur :" #: deluge/ui/gtkui/glade/main_window.glade:887 msgid "Availability:" @@ -3821,11 +3821,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:941 msgid "Peers:" -msgstr "Clients:" +msgstr "Pairs :" #: deluge/ui/gtkui/glade/main_window.glade:967 msgid "Seeders:" -msgstr "Sources:" +msgstr "Sources :" #: deluge/ui/gtkui/glade/main_window.glade:985 msgid "Pieces:" @@ -3837,11 +3837,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:1029 msgid "Up Speed:" -msgstr "Vitesse d'envoi:" +msgstr "Vitesse d'émission :" #: deluge/ui/gtkui/glade/main_window.glade:1051 msgid "Down Speed:" -msgstr "Vitesse de réception" +msgstr "Vitesse de réception :" #: deluge/ui/gtkui/glade/main_window.glade:1070 msgid "Next Announce:" @@ -3861,11 +3861,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:1188 msgid "Date Added:" -msgstr "Date d'ajout:" +msgstr "Date d'ajout :" #: deluge/ui/gtkui/glade/main_window.glade:1307 msgid "Comments:" -msgstr "Commentaires:" +msgstr "Commentaires :" #: deluge/ui/gtkui/glade/main_window.glade:1336 msgid "# of files:" @@ -3873,11 +3873,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:1368 msgid "Hash:" -msgstr "Somme de contrôle (hash):" +msgstr "Somme de contrôle :" #: deluge/ui/gtkui/glade/main_window.glade:1398 msgid "Tracker:" -msgstr "Tracker:" +msgstr "Traceur :" #: deluge/ui/gtkui/glade/main_window.glade:1418 msgid "Total Size:" @@ -3893,11 +3893,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:1510 msgid "Status:" -msgstr "Etat:" +msgstr "État :" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:40 msgid "Move completed:" -msgstr "Déplacer les fichiers terminés:" +msgstr "Déplacer les fichiers terminés :" #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:300 msgid "Private" @@ -3906,22 +3906,23 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:38 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:308 msgid "Prioritize First/Last" -msgstr "Premier/dernier prioritaires" +msgstr "Privilégier premiers/derniers" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:48 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:8 msgid "_Edit Trackers" -msgstr "_Modifier les trackers" +msgstr "_Modifier les traceurs" #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "Supprimer le torrent?" +msgstr "Supprimer le(s) torrent(s) ?" #: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" msgstr "" -"Êtes-vous sûr de vouloir supprimer le torrent sélectionné?" +"Êtes-vous sûr de vouloir supprimer le(s) torrent(s) " +"sélectionné(s) ?" #: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" @@ -3933,7 +3934,7 @@ #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:2 msgid "Remove Selected Torrent" -msgstr "Supprimer le torrent sélectionné" +msgstr "Supprimer le(s) torrent(s) sélectionné(s)" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:1 msgid "New Release" @@ -3993,11 +3994,11 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:7 msgid "_Update Tracker" -msgstr "Act_ualiser le tracker" +msgstr "Act_ualiser le traceur" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:9 msgid "_Remove Torrent" -msgstr "_Supprimer le torrent" +msgstr "_Supprimer le(s) torrent(s)" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:10 msgid "_Force Re-check" @@ -4070,11 +4071,11 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:597 msgid "Max Down Speed:" -msgstr "Vitesse maximale de réception:" +msgstr "Vitesse maximale de réception :" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:609 msgid "Max Up Speed:" -msgstr "Vitesse maximale d'envoi:" +msgstr "Vitesse maximale d'émission :" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:10 msgid "Add In _Paused State" @@ -4083,7 +4084,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:11 #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:137 msgid "Prioritize First/Last Pieces" -msgstr "Premier/dernier blocs prioritaires" +msgstr "Privilégier les premiers/derniers blocs" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:33 msgid "Revert To Defaults" @@ -4123,7 +4124,7 @@ #: deluge/ui/gtkui/glade/dgtkpopups.glade:187 msgid "Add Peer" -msgstr "Ajouter Pair" +msgstr "Ajouter un pair" #: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:2 msgid "hostname:port" diff -Nru deluge-1.3.12/deluge/i18n/ga.po deluge-1.3.13/deluge/i18n/ga.po --- deluge-1.3.12/deluge/i18n/ga.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ga.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/gl.po deluge-1.3.13/deluge/i18n/gl.po --- deluge-1.3.12/deluge/i18n/gl.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/gl.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" "Language: gl\n" #: deluge/pluginmanagerbase.py:173 diff -Nru deluge-1.3.12/deluge/i18n/he.po deluge-1.3.13/deluge/i18n/he.po --- deluge-1.3.12/deluge/i18n/he.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/he.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/hi.po deluge-1.3.13/deluge/i18n/hi.po --- deluge-1.3.12/deluge/i18n/hi.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/hi.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/hr.po deluge-1.3.13/deluge/i18n/hr.po --- deluge-1.3.12/deluge/i18n/hr.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/hr.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/hu.po deluge-1.3.13/deluge/i18n/hu.po --- deluge-1.3.12/deluge/i18n/hu.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/hu.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/id.po deluge-1.3.13/deluge/i18n/id.po --- deluge-1.3.12/deluge/i18n/id.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/id.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/is.po deluge-1.3.13/deluge/i18n/is.po --- deluge-1.3.12/deluge/i18n/is.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/is.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -1897,7 +1897,7 @@ #: deluge/ui/common.py:37 deluge/ui/common.py:41 #: deluge/ui/web/js/deluge-all/UI.js:43 deluge/ui/web/js/deluge-all/UI.js:47 msgid "Checking" -msgstr "Athuga" +msgstr "Athugar" #: deluge/ui/common.py:42 deluge/ui/web/js/deluge-all/UI.js:48 msgid "Queued" diff -Nru deluge-1.3.12/deluge/i18n/it.po deluge-1.3.13/deluge/i18n/it.po --- deluge-1.3.12/deluge/i18n/it.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/it.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ja.po deluge-1.3.13/deluge/i18n/ja.po --- deluge-1.3.12/deluge/i18n/ja.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ja.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ka.po deluge-1.3.13/deluge/i18n/ka.po --- deluge-1.3.12/deluge/i18n/ka.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ka.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" "Language: ka\n" #: deluge/pluginmanagerbase.py:173 diff -Nru deluge-1.3.12/deluge/i18n/kk.po deluge-1.3.13/deluge/i18n/kk.po --- deluge-1.3.12/deluge/i18n/kk.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/kk.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/km.po deluge-1.3.13/deluge/i18n/km.po --- deluge-1.3.12/deluge/i18n/km.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/km.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ko.po deluge-1.3.13/deluge/i18n/ko.po --- deluge-1.3.12/deluge/i18n/ko.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ko.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ky.po deluge-1.3.13/deluge/i18n/ky.po --- deluge-1.3.12/deluge/i18n/ky.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ky.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/lb.po deluge-1.3.13/deluge/i18n/lb.po --- deluge-1.3.12/deluge/i18n/lb.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/lb.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/lt.po deluge-1.3.13/deluge/i18n/lt.po --- deluge-1.3.12/deluge/i18n/lt.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/lt.po 2016-07-20 14:23:28.000000000 +0000 @@ -15,8 +15,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" "Language: \n" #: deluge/pluginmanagerbase.py:173 diff -Nru deluge-1.3.12/deluge/i18n/lv.po deluge-1.3.13/deluge/i18n/lv.po --- deluge-1.3.12/deluge/i18n/lv.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/lv.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,18 +8,18 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2012-12-11 21:34+0000\n" -"Last-Translator: null \n" +"PO-Revision-Date: 2015-11-13 19:23+0000\n" +"Last-Translator: tuxmaniack \n" "Language-Team: Latvian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" -msgstr "" +msgstr "Nav pieejams" #: deluge/common.py:260 msgid "KiB" @@ -194,12 +194,12 @@ msgid "" "The torrent \"%(name)s\" including %(num_files)i file(s) has finished " "downloading." -msgstr "" +msgstr "Torrents \"%(name)s\" ar %(num_files)i faili(em) ir lejupielādēts." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:266 #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:297 msgid "Notifications" -msgstr "" +msgstr "Paziņojumi" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:616 msgid "Choose Sound File" @@ -219,7 +219,7 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:108 msgid "Sound enabled" -msgstr "Skaņa ieslēgta" +msgstr "Skaņa aktivizēta" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:144 msgid "UI Notifications" @@ -229,7 +229,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:131 #: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:2 msgid "Hostname:" -msgstr "Resursdatora nosaukums:" +msgstr "Saimniekdatora nosaukums:" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:199 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:132 @@ -283,7 +283,7 @@ #: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:83 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:81 msgid "Enabled" -msgstr "Ieslēgts" +msgstr "Aktivizēts" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:443 msgid "Email Notifications" @@ -315,7 +315,7 @@ #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:32 #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:38 msgid "Extractor" -msgstr "" +msgstr "Atspiedējs" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:27 msgid "Extract to:" @@ -338,8 +338,8 @@ "This option will create a sub-folder using the torrent's name within the " "selected extract folder and put the extracted files there." msgstr "" -"Tiks radīts apakšmape izmantojot torrenta nosaukumu atzīmētajā mapē un tur " -"izvietotas atarhivētās datnes." +"Izvēlētajā mapē tiks izveidota apakšmape ar torenta nosaukumu un tajā tiks " +"izvietoti atspiestie faili." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:65 #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:87 @@ -357,7 +357,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Torents izņemts" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -386,11 +386,11 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:20 msgid "SafePeer Text (Zipped)" -msgstr "SafePeer Teksts (Zip formātā)" +msgstr "SafePeer teksts (Zip formātā)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:21 msgid "PeerGuardian Text (Uncompressed)" -msgstr "PeerGuardian Teksta (Nesaspiests)" +msgstr "PeerGuardian teksts (nesaspiests)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:22 msgid "PeerGuardian P2B (GZip)" @@ -439,8 +439,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:216 msgid "Download the blocklist file if necessary and import the file." -msgstr "" -"Lejupielādējiet bloķēto saraksta failu, ja nepieciešams un importējiet to." +msgstr "Lejupielādēt un importēt bloķēšanas sarakstu, ja nepieciešams." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:240 msgid "Check Download and Import" @@ -448,7 +447,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:262 msgid "Download a new blocklist file and import it." -msgstr "Lejupielādējiet jauno bloķēto saraksta failu un importējiet to." +msgstr "Lejupielādēt un importēt jaunu bloķēšanas sarakstu." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:286 msgid "Force Download and Import" @@ -456,7 +455,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:313 msgid "Blocklist is up to date" -msgstr "Bloķēto sarakstam ir jaunākā versija" +msgstr "Bloķēšanas saraksts ir atjaunināts" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:333 msgid "Options" @@ -473,7 +472,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:475 msgid "File Size:" -msgstr "Datnes izmērs:" +msgstr "Faila izmērs:" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:496 msgid "Info" @@ -482,15 +481,15 @@ #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:32 #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:39 msgid "WebUi" -msgstr "" +msgstr "Tīmekļa saskarne" #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:76 msgid "" "The Deluge web interface is not installed, please install the\n" "interface and try again" msgstr "" -"Deluge tīkla saskartne nav instalēta, lūdzu instalējiet to\n" -"un mēģiniet vēlreiz." +"Nav instalēta Deluge tīkla saskarne, lūdzu, instalējiet\n" +"saskarni un mēģiniet vēlreiz." #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:27 msgid "Enable web interface" @@ -506,7 +505,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:124 msgid "Watch folder does not exist." -msgstr "Sekošanas mape neeksistē" +msgstr "Sekošanas mape neeksistē." #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:129 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:404 @@ -516,7 +515,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:387 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:391 msgid "AutoAdd" -msgstr "" +msgstr "Pievienot automātiski" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/config.glade:41 msgid "Watch Folders:" @@ -532,7 +531,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:151 msgid "Enable this watch folder" -msgstr "Darbināt Sekošanas mapi" +msgstr "Aktivizēt sekošanu mapei" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:173 msgid "Watch Folder" @@ -552,7 +551,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:367 msgid "Torrent File Action" -msgstr "Torrenta datnes darbības" +msgstr "Torenta faila darbības" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:269 msgid "Set download location" @@ -569,7 +568,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:569 msgid "Move Completed" -msgstr "Pārvietot uz vietu kad pabeigts" +msgstr "Pārvietot pabeigtos" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:599 msgid "Label: " @@ -612,14 +611,14 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:42 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:225 msgid "Stop seed at ratio:" -msgstr "Apstādināt, kad samērs sasniedz:" +msgstr "Pārtraukt dalīt, kad samērs:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:976 #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:599 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:43 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:253 msgid "Remove at ratio" -msgstr "Izņemt pie samēra" +msgstr "Izņemt pēc samēra sasniegšanas" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:992 #: deluge/ui/web/render/tab_status.html:18 @@ -632,7 +631,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1184 msgid "Queue to:" -msgstr "Rinda uz:" +msgstr "Rindā:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1203 #: deluge/ui/web/js/deluge-all/Menus.js:192 @@ -661,7 +660,7 @@ #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:162 #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:285 msgid "Scheduler" -msgstr "" +msgstr "Plānotājs" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:227 msgid "Download Limit:" @@ -707,7 +706,7 @@ #: deluge/plugins/Label/deluge/plugins/label/core.py:297 msgid "Unknown Torrent" -msgstr "Nezināms torrents" +msgstr "Nezināms torents" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:174 #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:164 @@ -723,7 +722,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Augšupielādes vietas:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 @@ -747,7 +746,7 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:512 msgid "Apply per torrent max settings:" -msgstr "Apstiprināt maksimālos iestādījumus torentam:" +msgstr "Pielietot torentu maksimālos iestatījumus:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:529 msgid "Maximum" @@ -762,7 +761,7 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:666 msgid "Apply Queue settings:" -msgstr "Apstiprināt rindas iestatījumus:" +msgstr "Pielietot rindas iestatījumus:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:686 #: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:75 @@ -776,11 +775,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:44 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:76 msgid "Move completed to:" -msgstr "Pabeigtos pārvietot uz:" +msgstr "Pārvietot pabeigtos uz:" #: deluge/plugins/label/label/data/label_options.glade:504 msgid "Apply location settings:" -msgstr "Apstiprināt atrašanās vietas iestatījumus:" +msgstr "Pielietot atrašanās vietas iestatījumus:" #: deluge/plugins/label/label/data/label_options.glade:520 msgid "Location" @@ -880,11 +879,11 @@ #: deluge/ui/countries.py:16 msgid "Anguilla" -msgstr "Anguilla" +msgstr "Angilja" #: deluge/ui/countries.py:17 msgid "Antarctica" -msgstr "Antarktika" +msgstr "Antarktīda" #: deluge/ui/countries.py:18 msgid "Antigua and Barbuda" @@ -1096,7 +1095,7 @@ #: deluge/ui/countries.py:70 msgid "Dominican Republic" -msgstr "Dominikāņu Republika" +msgstr "Dominikānas Republika" #: deluge/ui/countries.py:71 msgid "Ecuador" @@ -1128,7 +1127,7 @@ #: deluge/ui/countries.py:78 msgid "Falkland Islands (Malvinas)" -msgstr "Folklenda (Maldīvu) salas" +msgstr "Folklenda (Malvinu) Salas" #: deluge/ui/countries.py:79 msgid "Faroe Islands" @@ -1192,7 +1191,7 @@ #: deluge/ui/countries.py:94 msgid "Greenland" -msgstr "Grēnlande" +msgstr "Grenlande" #: deluge/ui/countries.py:95 msgid "Grenada" @@ -1296,7 +1295,7 @@ #: deluge/ui/countries.py:120 msgid "Jersey" -msgstr "Džerzija" +msgstr "Džērsija" #: deluge/ui/countries.py:121 msgid "Jordan" @@ -1424,7 +1423,7 @@ #: deluge/ui/countries.py:152 msgid "Micronesia, Federated States of" -msgstr "Mikronēzija" +msgstr "Mikronēzijas Federatīvās Valstis" #: deluge/ui/countries.py:153 msgid "Moldova" @@ -1580,7 +1579,7 @@ #: deluge/ui/countries.py:191 msgid "Russian Federation" -msgstr "Krievijas federācija" +msgstr "Krievijas Federācija" #: deluge/ui/countries.py:192 msgid "Rwanda" @@ -1780,7 +1779,7 @@ #: deluge/ui/countries.py:242 msgid "United States" -msgstr "ASV" +msgstr "Savienotās Valstis" #: deluge/ui/countries.py:243 msgid "United States Minor Outlying Islands" @@ -1812,7 +1811,7 @@ #: deluge/ui/countries.py:250 msgid "Virgin Islands, U.S." -msgstr "Virdžinu salas, ASV." +msgstr "ASV Virdžīnu Salas" #: deluge/ui/countries.py:251 msgid "Wallis and Futuna" @@ -1839,8 +1838,8 @@ "Deluge cannot find the 'deluged' executable, it is likely that you forgot to " "install the deluged package or it's not in your PATH." msgstr "" -"Deluge nevar atrast dzinejā palaisānas datni, tas izkstās pēc tā kā jūs esat " -"aizmirsis uzinstalēt deluge dzinēju vai tas atrodas kaut kur citur." +"Deluge nevar atrast 'deluged' izpildāmo failu. Izskatās, ka tas nav " +"instalēts, vai arī atrodas citā vietā." #: deluge/ui/web/server.py:623 msgid "Starting server in PID" @@ -1878,11 +1877,11 @@ #: deluge/ui/gtkui/notification.py:59 msgid "Including" -msgstr "Iekļaut" +msgstr "Iekļaujot" #: deluge/ui/gtkui/notification.py:59 msgid "files" -msgstr "datnes" +msgstr "faili" #: deluge/ui/gtkui/notification.py:109 #, python-format @@ -1908,7 +1907,7 @@ #: deluge/ui/common.py:38 deluge/ui/web/js/deluge-all/UI.js:44 msgid "Downloading" -msgstr "Lejupielāde" +msgstr "Lejupielādē" #: deluge/ui/common.py:39 deluge/ui/gtkui/glade/preferences_dialog.ui.h:99 #: deluge/ui/web/js/deluge-all/UI.js:45 @@ -2157,7 +2156,7 @@ #: deluge/ui/gtkui/addtorrentdialog.py:193 msgid "Invalid File" -msgstr "Nederīga datne" +msgstr "Nederīgs fails" #: deluge/ui/gtkui/addtorrentdialog.py:231 msgid "Duplicate Torrent" @@ -2169,7 +2168,7 @@ #: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "Unable to set file priority!" -msgstr "Neiespējami uzstādīt dates prioritāti" +msgstr "Nav iespējams iestatīt faila prioritāti!" #: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "" @@ -2185,11 +2184,11 @@ #: deluge/ui/gtkui/addtorrentdialog.py:611 msgid "Invalid URL" -msgstr "Nederīgs URL" +msgstr "Nederīga saite" #: deluge/ui/gtkui/addtorrentdialog.py:612 msgid "is not a valid URL." -msgstr "nav derīgs URL." +msgstr "nav derīga saite." #: deluge/ui/gtkui/addtorrentdialog.py:618 msgid "Downloading..." @@ -2197,7 +2196,7 @@ #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Download Failed" -msgstr "Lejupielādēt neizdevās" +msgstr "Neizdevās lejupielādēt" #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Failed to download:" @@ -2205,7 +2204,7 @@ #: deluge/ui/gtkui/queuedtorrents.py:111 msgid " Torrents Queued" -msgstr " Torrenti rindā" +msgstr " Torenti rindā" #: deluge/ui/gtkui/queuedtorrents.py:113 msgid " Torrent Queued" @@ -2282,6 +2281,8 @@ #: deluge/ui/gtkui/preferences.py:769 msgid "You must restart the deluge UI to change classic mode. Quit now?" msgstr "" +"Ir nepieciešams pārstartēt Deluge, lai izmantotu klasisko režīmu. Iziet " +"tagad?" #: deluge/ui/gtkui/preferences.py:955 msgid "Select the Plugin" @@ -2293,7 +2294,7 @@ #: deluge/ui/gtkui/torrentdetails.py:93 msgid "_All" -msgstr "" +msgstr "_Visi" #: deluge/ui/gtkui/torrentdetails.py:94 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:15 @@ -2356,11 +2357,11 @@ "You will either need to stop the daemon or turn off Classic Mode to continue." msgstr "" "Izskatās, ka Deluge process (deluged) jau darbojas\n" -"Jums ir vai nu jāaptur process vai jāizslēdz Klasiskais skats lai turpinātu." +"Lai turpinātu ir jāaptur process vai jāizslēdz klasiskais režīms." #: deluge/ui/gtkui/gtkui.py:360 msgid "Enable Thin Client Mode?" -msgstr "" +msgstr "Izmantot plānā klienta režīmu?" #: deluge/ui/gtkui/gtkui.py:361 msgid "" @@ -2412,7 +2413,7 @@ #: deluge/ui/gtkui/connectionmanager.py:165 #: deluge/ui/web/js/deluge-all/ConnectionManager.js:84 msgid "Host" -msgstr "Resursdators" +msgstr "Saimniekdators" #: deluge/ui/gtkui/connectionmanager.py:170 #: deluge/ui/web/js/deluge-all/ConnectionManager.js:90 @@ -2438,7 +2439,7 @@ #: deluge/ui/gtkui/connectionmanager.py:592 msgid "Error Adding Host" -msgstr "Kļūda pievienojot vietni" +msgstr "Kļūda, pievienojot saimnieku" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:6 msgid "Torrents" @@ -2448,19 +2449,19 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:183 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:52 msgid "Details:" -msgstr "Detaļas:" +msgstr "Sīkāka informācija:" #: deluge/ui/gtkui/dialogs.py:390 msgid "Password Protected" -msgstr "" +msgstr "Aizsargāts ar paroli" #: deluge/ui/gtkui/mainwindow.py:191 msgid "Enter your password to show Deluge..." -msgstr "" +msgstr "Ievadiet paroli, lai redzētu Deluge..." #: deluge/ui/gtkui/mainwindow.py:235 msgid "Enter your password to Quit Deluge..." -msgstr "" +msgstr "Ievadiet paroli, lai izietu no Deluge..." #: deluge/ui/gtkui/mainwindow.py:315 msgid "D:" @@ -2473,7 +2474,7 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Autortiesības %(year_start)s-%(year_end)s Deluge komanda" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" @@ -2565,7 +2566,7 @@ #: deluge/ui/gtkui/statusbar.py:168 msgid "Free Disk Space" -msgstr "Diska brīvā vieta" +msgstr "Brīvā vieta diskā" #: deluge/ui/gtkui/statusbar.py:172 msgid "No Incoming Connections!" @@ -2600,15 +2601,15 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:45 msgid "Remove the selected torrent?" -msgstr "Dzēst izvēlēto torentu?" +msgstr "Izņemt izvēlēto torentu?" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:57 msgid "If you remove the data, it will be lost permanently." -msgstr "Ja jūs izdzēsīsiet datus, tie tiks neatgriezeniski zaudēti" +msgstr "Ja dzēsīsiet datus, tie tiks neatgriezeniski zaudēti." #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:117 msgid "Remove With _Data" -msgstr "Dzēst torentu un tā failus" +msgstr "Dzēst torentu un tā datus" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:155 msgid "Remove _Torrent" @@ -2728,12 +2729,12 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:334 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:46 msgid "Delete copy of torrent file on remove" -msgstr "Dzēst torent faila kopiju, kad torents tiek izņemts" +msgstr "Dzēst torenta faila kopiju, kad torents tiek izņemts" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:47 msgid "" "Delete the copy of the torrent file created when the torrent is removed" -msgstr "Dzēst izveidoto torent faila kopiju, kad torents tiek izņemts" +msgstr "Dzēst izveidoto torenta faila kopiju, kad torents tiek izņemts" #: deluge/ui/gtkui/glade/preferences_dialog.glade:339 msgid "Folders" @@ -2771,7 +2772,8 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" -msgstr "Uzstādīt augstāku prioritāti pirmajām un pēdējām torrenta daļiņām" +msgstr "" +"Iestatīt augstāku prioritāti pirmajiem un pēdējiem torenta gabaliņiem" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:59 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:118 @@ -2785,7 +2787,7 @@ #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:86 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:141 msgid "Use Random Ports" -msgstr "Izmantot dažādus portus" +msgstr "Izmantot nejaušus portus" #: deluge/ui/gtkui/glade/preferences_dialog.glade:574 msgid "Deluge will automatically choose a different port to use every time." @@ -2799,7 +2801,7 @@ #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:117 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:172 msgid "To:" -msgstr "Uz:" +msgstr "Līdz:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:107 msgid "Test Active Port" @@ -2830,8 +2832,8 @@ "The TOS byte set in the IP header of every packet sent to peers (including " "web seeds). Expects a Hex value." msgstr "" -"TOS baits uzstādīts katras paketes IP virsrakstā, ko nosūta dalībniekam " -"(vietnes ieskaitot). Sagaida HEX vērtību." +"TOS baits ir iestatīts katras IP paketes galvenē, to nosūta dalībniekiem " +"(ieskaitot tīmekļa devējus). Heksadecimāla vērtība." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:129 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:247 @@ -2849,7 +2851,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:116 msgid "Universal Plug and Play" -msgstr "Universal Plug and Play" +msgstr "Standarts Plug and Play" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:117 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:204 @@ -2858,7 +2860,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:118 msgid "NAT Port Mapping Protocol" -msgstr "NAT portu pārveides protokols" +msgstr "Tīkla adrešu translēšanas protokols" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:119 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:211 @@ -2868,15 +2870,16 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:123 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:218 msgid "LSD" -msgstr "Vietējo servisu atklājējs" +msgstr "Vietējo pakalpojumu atklājējs" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:124 msgid "Local Service Discovery finds local peers on your network." -msgstr "Local Service Discovery finds local peers on your network." +msgstr "Lokālo pakalpojumu atklājējs atrod lokālos dalībniekus jūsu tīklā." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:126 msgid "Distributed hash table may improve the amount of active connections." -msgstr "Dalītā kontrolsummu tabula var uzlabot kopējo pieslēgumu skaitu." +msgstr "" +"Dalītā kontrolsummu tabula var uzlabot kopējo aktīvo pieslēgumu skaitu." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1097 msgid "Network Extras" @@ -2898,9 +2901,9 @@ "Enabled\n" "Disabled" msgstr "" -"Obligāta\n" +"Obligāts\n" "Ja iespējams\n" -"Izslēgta" +"Izslēgts" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1176 msgid "" @@ -2949,7 +2952,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:70 msgid "The maximum number of connections allowed. Set -1 for unlimited." -msgstr "Maksimālais konekciju skaits. -1 nozīmē neierobežots." +msgstr "Maksimālais savienojumu skaits. -1 nozīmē neierobežots." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:68 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:153 @@ -2983,15 +2986,15 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:78 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:135 msgid "Rate limit IP overhead" -msgstr "Noteikt IP pārpalikuma robežu" +msgstr "Ierobežot IP virstēriņu" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:79 msgid "" "If checked, the estimated TCP/IP overhead is drained from the rate limiters, " "to avoid exceeding the limits with the total traffic" msgstr "" -"Ja atzīmēts, kopējais TCP/IP pārpalikums noņemts ar plūsmas ierobežotāju, " -"lai novērstu robežu pārkāpšanu ar kopējo plūsmu." +"Lai nepārsniegtu ātruma ierobežojumu, atskaitīt aptuveno TCP/IP virstēriņu " +"no kopējā satiksmes limita." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1589 msgid "Global Bandwidth Usage" @@ -3009,11 +3012,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1713 msgid "The maximum download speed per torrent. Set -1 for unlimited." -msgstr "" +msgstr "Maksimālais lejupielādes ātrums uz torentu. -1 nozīmē neierobežots." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 msgid "The maximum upload speed per torrent. Set -1 for unlimited." -msgstr "" +msgstr "Maksimālais augšupielādes ātrums uz torentu. -1 nozīmē neierobežots." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" @@ -3025,7 +3028,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1845 msgid "Enable" -msgstr "Ieslēgt" +msgstr "Aktivizēt" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1850 msgid "" @@ -3050,7 +3053,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 msgid "Focus window when adding torrent" -msgstr "" +msgstr "Fokusēt logu, kad pievieno torentu" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1923 msgid "Main Window" @@ -3058,11 +3061,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:63 msgid "Always show" -msgstr "Vienmēr rādīt" +msgstr "Rādīt vienmēr" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:64 msgid "Bring the dialog to focus" -msgstr "Dialogu novietot redzamā vietā" +msgstr "Fokusēt dialoglodziņu" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1993 msgid "Add Torrents Dialog" @@ -3070,27 +3073,27 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:32 msgid "Enable system tray icon" -msgstr "Izmantot sistēmas paneļa ikonu" +msgstr "Aktivizēt sistēmas joslas ikonu" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:35 msgid "Minimize to tray on close" -msgstr "Aizverot logu, minimizēt kā sistēmas paneļa ikonu" +msgstr "Aizverot logu, minimizēt kā sistēmas joslas ikonu" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:36 msgid "Start in tray" -msgstr "Sāknēt sistēmas panelī" +msgstr "Palaisties sistēmas joslā" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2082 msgid "Enable Application Indicator" -msgstr "Darbināt lietojumprogrammas indikātoru" +msgstr "Aktivizēt ziņojumu joslas indikatoru" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:37 msgid "Password protect system tray" -msgstr "Aizsargāt sistēmas paneļa ikonu ar paroli" +msgstr "Aizsargāt sistēmas joslas ikonu ar paroli" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2170 msgid "System Tray" -msgstr "Sistēmas panelis" +msgstr "Sistēmas josla" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2228 msgid "Other" @@ -3105,7 +3108,8 @@ "Deluge will check our servers and will tell you if a newer version has been " "released" msgstr "" -"Deluge pārbaudīs mūsu serverus un ziņos, ja būs izlaista jaunāka versija" +"Deluge periodiski pārbaudīs serverus un ziņos, ja būs izlaista jaunāka " +"versija" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2292 msgid "Updates" @@ -3173,7 +3177,8 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:180 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:94 msgid "Periodically check the website for new releases" -msgstr "Periodiski pārbaudīt mūsu vietni, vai nav jaunu Deluge versiju" +msgstr "" +"Periodiski pārbaudīt tīmekļa vietni, vai nav pieejama jaunāka versija" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2725 msgid "Other" @@ -3190,20 +3195,20 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:88 msgid "Total active seeding:" -msgstr "Kopā aktīvie dod:" +msgstr "Kopā aktīvi dod:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:89 msgid "Total active:" -msgstr "Kopā aktīvie:" +msgstr "Kopā aktīvi:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:90 msgid "Total active downloading:" -msgstr "Kopā aktīvie lejupielādē:" +msgstr "Kopā aktīvi lejupielādē:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:91 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:110 msgid "Do not count slow torrents" -msgstr "Neskaitīt lēnos torrentus" +msgstr "Neskaitīt lēnos torentus" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2994 msgid "Active Torrents" @@ -3226,7 +3231,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:97 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:181 msgid "Stop seeding when share ratio reaches:" -msgstr "Pārstāt došanu, kad dalīšanas samērs sasniedz:" +msgstr "Pārstāt dalīt, kad dalīšanas samērs sasniedz:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:98 msgid "Remove torrent when share ratio reached" @@ -3234,7 +3239,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:3192 msgid "Seeding" -msgstr "Piedāvāšana" +msgstr "Dalīšana" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3256 msgid "Proxy" @@ -3244,7 +3249,7 @@ #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:75 #: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:49 msgid "Host:" -msgstr "Resursdators:" +msgstr "Saimniekdators:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3403 #: deluge/ui/gtkui/glade/preferences_dialog.glade:3590 @@ -3444,7 +3449,7 @@ #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:1 msgid "Queued Torrents" -msgstr "Ierindotie Torrenti" +msgstr "Torenti rindā" #: deluge/ui/gtkui/glade/queuedtorrents.glade:47 msgid "Add Queued Torrents" @@ -3497,7 +3502,7 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:11 msgid "Piece Size:" -msgstr "Daļiņas izmērs:" +msgstr "Gabaliņu izmērs:" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:554 msgid "" @@ -3559,7 +3564,7 @@ #: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:1 msgid "Add Host" -msgstr "Pievienot serveri" +msgstr "Pievienot saimniekdatoru" #: deluge/ui/gtkui/glade/main_window.ui.h:39 #: deluge/ui/gtkui/glade/connection_manager.ui.h:1 @@ -3574,19 +3579,19 @@ #: deluge/ui/gtkui/glade/connection_manager.ui.h:2 msgid "_Start local daemon" -msgstr "Uzsākt vietējo _servisu" +msgstr "_Sākt vietējo pakalpojumu" #: deluge/ui/gtkui/glade/connection_manager.ui.h:3 msgid "Automatically connect to selected host on start-up" -msgstr "Automātiski savienoties ar izvēlēto serveri, sākot darbu" +msgstr "Sākot darbu automātiski savienoties ar izvēlēto saimniekdatoru" #: deluge/ui/gtkui/glade/connection_manager.ui.h:4 msgid "Automatically start localhost if needed" -msgstr "Ja vajadzīgs, palaist 'localhost'" +msgstr "Ja nepieciešams, palaist 'localhost'" #: deluge/ui/gtkui/glade/connection_manager.ui.h:5 msgid "Do not show this dialog on start-up" -msgstr "Nerādīt šo logu, sākot darbu" +msgstr "Nerādīt šo dialoglodziņu pie palaišanas" #: deluge/ui/gtkui/glade/main_window.ui.h:3 msgid "_Create Torrent" @@ -3746,7 +3751,7 @@ #: deluge/ui/gtkui/glade/main_window.glade:759 msgid "Seed Rank:" -msgstr "Dalītāja ranks:" +msgstr "Dalītāja pakāpe:" #: deluge/ui/gtkui/glade/main_window.glade:774 msgid "Seeding Time:" @@ -3814,7 +3819,7 @@ #: deluge/ui/gtkui/glade/main_window.glade:1336 msgid "# of files:" -msgstr "# no datnēm:" +msgstr "# no failiem:" #: deluge/ui/gtkui/glade/main_window.glade:1368 msgid "Hash:" @@ -3842,7 +3847,7 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:40 msgid "Move completed:" -msgstr "Pārvietot, kad pabeigts:" +msgstr "Pārvietot pabeigtos failus uz:" #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:300 msgid "Private" @@ -3851,7 +3856,7 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:38 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:308 msgid "Prioritize First/Last" -msgstr "Pirmo/pēdējo pa priekšu" +msgstr "Prioritāte sākumam/beigām" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:48 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:8 @@ -3860,17 +3865,17 @@ #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "Dzēst torrentu?" +msgstr "Izņemt torentu?" #: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" msgstr "" -"Vai esat pārliecināts, ka vēlaties dzēst izvēlēto torrentu?" +"Vai esat pārliecināts, ka vēlaties izņemt izvēlēto torentu?" #: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" -msgstr "Saistītā .torrent datne tiks dzēsta " +msgstr "Saistītais .torrent fails tiks dzēsts!" #: deluge/ui/gtkui/glade/main_window.glade:2408 msgid "The downloaded data will be deleted!" @@ -3878,7 +3883,7 @@ #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:2 msgid "Remove Selected Torrent" -msgstr "Dzēst izvēlēto torrentu" +msgstr "Izņemt izvēlēto torentu" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:1 msgid "New Release" @@ -3886,7 +3891,7 @@ #: deluge/ui/gtkui/glade/main_window.glade:2508 msgid "New Release Available!" -msgstr "Jauns programmas laidiens pieejams!" +msgstr "Pieejama jauna programmas versija!" #: deluge/ui/gtkui/glade/main_window.glade:2560 msgid "Available Version:" @@ -3902,7 +3907,7 @@ #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:7 msgid "Do not show this dialog in the future" -msgstr "Turpmāk nerādīt šo logu" +msgstr "Turpmāk nerādīt šo dialoglodziņu" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:2 msgid "_Goto Website" @@ -3942,7 +3947,7 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:9 msgid "_Remove Torrent" -msgstr "_Dzēst torentu" +msgstr "_Izņemt torentu" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:10 msgid "_Force Re-check" @@ -3983,7 +3988,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:3 msgid "_URL" -msgstr "_URL" +msgstr "_Saite" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:4 msgid "Info_hash" @@ -4003,15 +4008,15 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:469 msgid "Move Completed Location" -msgstr "" +msgstr "Pabeigto pārvietošanas vieta" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:506 msgid "Full" -msgstr "Pilns" +msgstr "Pilna" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:522 msgid "Compact" -msgstr "Kompakts" +msgstr "Kompakta" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:597 msgid "Max Down Speed:" @@ -4028,11 +4033,11 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:11 #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:137 msgid "Prioritize First/Last Pieces" -msgstr "Pirmie/pēdējie gabali pa priekšu" +msgstr "Prioritāte sākuma un beigu gabaliņiem" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:33 msgid "Revert To Defaults" -msgstr "Atgriezt uz noklusējumu" +msgstr "Atgriezt uz noklusējuma" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:32 msgid "Apply To All" @@ -4048,15 +4053,15 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:1 msgid "Add Infohash" -msgstr "Pievienot \"Infohash\"" +msgstr "Pievienot infosummu" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1211 msgid "From Infohash" -msgstr "No \"Infohash\"" +msgstr "No infosummas" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:3 msgid "Infohash:" -msgstr "Infohash:" +msgstr "Infosumma:" #: deluge/ui/gtkui/glade/other_dialog.ui.h:1 msgid "label" @@ -4072,7 +4077,7 @@ #: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:2 msgid "hostname:port" -msgstr "datorvārds:ports" +msgstr "saimniekdatora nosaukums:ports" #: deluge/ui/data/share/applications/deluge.desktop.in.h:2 msgid "BitTorrent Client" @@ -4084,7 +4089,7 @@ #: deluge/ui/data/share/applications/deluge.desktop.in.h:4 msgid "Download and share files over BitTorrent" -msgstr "Lejupielādēt un dalīties ar datnēm caur BitTorrent" +msgstr "Lejupielādēt un dalīties ar failiem caur BitTorrent" #~ msgid "Up:" #~ msgstr "Augšup:" diff -Nru deluge-1.3.12/deluge/i18n/mk.po deluge-1.3.13/deluge/i18n/mk.po --- deluge-1.3.12/deluge/i18n/mk.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/mk.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ms.po deluge-1.3.13/deluge/i18n/ms.po --- deluge-1.3.12/deluge/i18n/ms.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ms.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/nap.po deluge-1.3.13/deluge/i18n/nap.po --- deluge-1.3.12/deluge/i18n/nap.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/nap.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/nb.po deluge-1.3.13/deluge/i18n/nb.po --- deluge-1.3.12/deluge/i18n/nb.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/nb.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/nl.po deluge-1.3.13/deluge/i18n/nl.po --- deluge-1.3.12/deluge/i18n/nl.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/nl.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/nn.po deluge-1.3.13/deluge/i18n/nn.po --- deluge-1.3.12/deluge/i18n/nn.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/nn.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/oc.po deluge-1.3.13/deluge/i18n/oc.po --- deluge-1.3.12/deluge/i18n/oc.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/oc.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -2492,11 +2492,11 @@ #: deluge/ui/gtkui/aboutdialog.py:259 msgid "Server:" -msgstr "Servidor:" +msgstr "Servidor :" #: deluge/ui/gtkui/aboutdialog.py:262 msgid "libtorrent:" -msgstr "" +msgstr "libtorrent :" #: deluge/ui/gtkui/statusbar.py:128 #: deluge/ui/web/js/deluge-all/Statusbar.js:39 diff -Nru deluge-1.3.12/deluge/i18n/pl.po deluge-1.3.13/deluge/i18n/pl.po --- deluge-1.3.12/deluge/i18n/pl.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/pl.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/pt_BR.po deluge-1.3.13/deluge/i18n/pt_BR.po --- deluge-1.3.12/deluge/i18n/pt_BR.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/pt_BR.po 2016-07-20 14:23:28.000000000 +0000 @@ -16,8 +16,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/pt.po deluge-1.3.13/deluge/i18n/pt.po --- deluge-1.3.12/deluge/i18n/pt.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/pt.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ro.po deluge-1.3.13/deluge/i18n/ro.po --- deluge-1.3.12/deluge/i18n/ro.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ro.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/ru.po deluge-1.3.13/deluge/i18n/ru.po --- deluge-1.3.12/deluge/i18n/ru.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ru.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2014-09-25 20:58+0000\n" -"Last-Translator: Maxim S. \n" +"PO-Revision-Date: 2016-02-13 09:19+0000\n" +"Last-Translator: adem \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -358,7 +358,7 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Торрент удалён" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -725,7 +725,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Слоты отдачи:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 @@ -2480,7 +2480,7 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Copyright %(year_start)s-%(year_end)s Deluge Team" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" diff -Nru deluge-1.3.12/deluge/i18n/si.po deluge-1.3.13/deluge/i18n/si.po --- deluge-1.3.12/deluge/i18n/si.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/si.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/sk.po deluge-1.3.13/deluge/i18n/sk.po --- deluge-1.3.12/deluge/i18n/sk.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/sk.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/sl.po deluge-1.3.13/deluge/i18n/sl.po --- deluge-1.3.12/deluge/i18n/sl.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/sl.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/sr.po deluge-1.3.13/deluge/i18n/sr.po --- deluge-1.3.12/deluge/i18n/sr.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/sr.po 2016-07-20 14:23:28.000000000 +0000 @@ -1,25 +1,29 @@ # Serbian translation for deluge -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the deluge package. -# FIRST AUTHOR , 2012. +# FIRST AUTHOR , 2009. +# Veljko , 2011. +# Aleksandar Micovic , 2012. +# Мирослав Николић , 2016. # msgid "" msgstr "" "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2012-05-30 11:54+0000\n" -"Last-Translator: Aleksandar Micovic \n" -"Language-Team: Serbian \n" +"PO-Revision-Date: 2016-01-23 00:52+0000\n" +"Last-Translator: Мирослав Николић \n" +"Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:21+0000\n" +"X-Generator: Launchpad (build 18097)\n" +"Language: sr\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" -msgstr "" +msgstr "Није доступно" #: deluge/common.py:260 msgid "KiB" @@ -87,47 +91,47 @@ #: deluge/ui/web/js/deluge-all/details/StatusTab.js:121 #: deluge/ui/web/js/deluge-all/add/AddWindow.js:209 msgid "Error" -msgstr "Грешка" +msgstr "Грешке" #: deluge/ui/common.py:49 deluge/ui/web/js/deluge-all/UI.js:54 #: deluge/ui/web/js/deluge-all/details/StatusTab.js:123 msgid "Announce OK" -msgstr "Објава ОК" +msgstr "Објава је у реду" #: deluge/ui/common.py:50 deluge/ui/web/js/deluge-all/UI.js:55 #: deluge/ui/web/js/deluge-all/details/StatusTab.js:124 msgid "Announce Sent" -msgstr "Објава послата" +msgstr "Објава је послата" #: deluge/ui/common.py:48 deluge/ui/web/js/deluge-all/UI.js:53 #: deluge/ui/web/js/deluge-all/details/StatusTab.js:122 msgid "Warning" -msgstr "Упозорeњe" +msgstr "Упозорење" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:123 #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:156 #, python-format msgid "There was an error sending the notification email: %s" -msgstr "" +msgstr "Дошло је до грешке слања ел. поште са обавешењем: %s" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:142 #, python-format msgid "The server didn't reply properly to the helo greeting: %s" -msgstr "" +msgstr "Сервер није исправно одговорио на поздрав: %s" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:147 #, python-format msgid "The server didn't accept the username/password combination: %s" -msgstr "" +msgstr "Сервер не прихвата комбинацију корисник/лозинка: %s" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:171 msgid "Notification email sent." -msgstr "" +msgstr "Ел. пошта са обавештењем је послата." #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:178 #, python-format msgid "Finished Torrent \"%(name)s\"" -msgstr "" +msgstr "Завршено је преузимање торента „%(name)s“" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:180 #, python-format @@ -140,47 +144,54 @@ "Thank you,\n" "Deluge." msgstr "" +"Овом ел. поштом вас обавештавамо да је Делуге преузео „%(name)s“ у " +"потпуности, са укупно %(num_files)i датотеке.\n" +"Да престанете да примате ова обавештења, једноставно искључите обавештавање " +"ел. поштом у подешавањима Делугеа.\n" +"\n" +"Хвала вам,\n" +"Делуге." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:159 msgid "Notification Blink shown" -msgstr "" +msgstr "Приказ трептаја обавештења" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:164 msgid "Popup notification is not enabled." -msgstr "" +msgstr "Облачић обавештења није укључен." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:166 msgid "pynotify is not installed" -msgstr "" +msgstr "Није инсталиран „pynotify“" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:173 msgid "pynotify failed to show notification" -msgstr "" +msgstr "„pynotify“ није успео да прикаже обавештење" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:176 msgid "Notification popup shown" -msgstr "" +msgstr "Приказ облачића обавештења" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:180 msgid "Sound notification not enabled" -msgstr "" +msgstr "Звучно обавештавање није укључено" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:182 msgid "pygame is not installed" -msgstr "" +msgstr "Није инсталиран „pygame“" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:194 #, python-format msgid "Sound notification failed %s" -msgstr "" +msgstr "Звучно обавештење није успело „%s“" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:198 msgid "Sound notification Success" -msgstr "" +msgstr "Звучно обавештење је успело" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:221 msgid "Finished Torrent" -msgstr "" +msgstr "Завршен торент" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:222 #, python-format @@ -188,41 +199,42 @@ "The torrent \"%(name)s\" including %(num_files)i file(s) has finished " "downloading." msgstr "" +"Завршено је преузимање торента „%(name)s“ који садржи %(num_files)i датотеке." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:266 #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:297 msgid "Notifications" -msgstr "" +msgstr "Обавештења" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:616 msgid "Choose Sound File" -msgstr "" +msgstr "Изаберите звучну датотеку" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:29 msgid "Notifications" -msgstr "" +msgstr "Обавештења" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:81 msgid "Tray icon blinks enabled" -msgstr "" +msgstr "Укључи трептање иконице у фиоци" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:93 msgid "Popups enabled" -msgstr "" +msgstr "Укључи облачиће" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:108 msgid "Sound enabled" -msgstr "" +msgstr "Укључи звук" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:144 msgid "UI Notifications" -msgstr "" +msgstr "Обавештења сучеља" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:175 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:131 #: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:2 msgid "Hostname:" -msgstr "Име домаћина:" +msgstr "Назив домаћина:" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:199 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:132 @@ -232,7 +244,7 @@ #: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:58 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:151 msgid "Port:" -msgstr "Порт:" +msgstr "Прикључник:" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:231 #: deluge/ui/gtkui/dialogs.py:197 deluge/ui/gtkui/dialogs.py:258 @@ -241,7 +253,7 @@ #: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:85 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:96 msgid "Username:" -msgstr "Корисничко имe:" +msgstr "Корисник:" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:255 #: deluge/ui/gtkui/dialogs.py:205 deluge/ui/gtkui/dialogs.py:286 @@ -256,11 +268,11 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:360 msgid "Recipients" -msgstr "" +msgstr "Примаоци" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:383 msgid "Server requires TLS/SSL" -msgstr "" +msgstr "Сервер захтева ТЛС/ССЛ" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:398 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:102 @@ -276,11 +288,11 @@ #: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:83 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:81 msgid "Enabled" -msgstr "Омогућено" +msgstr "Укључено" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:443 msgid "Email Notifications" -msgstr "" +msgstr "Обавештења ел. поште" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:460 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:147 @@ -294,19 +306,21 @@ "This configuration does not mean that you'll actually receive notifications " "for all these events." msgstr "" +"Ово подешавање не значи да ћете заправо и примати обавештења за све ове " +"догађаје." #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:513 msgid "Subscriptions" -msgstr "" +msgstr "Претплате" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:594 msgid "Sound Customization" -msgstr "" +msgstr "Прилагођавање звука" #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:32 #: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:38 msgid "Extractor" -msgstr "" +msgstr "Распакивач" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:27 msgid "Extract to:" @@ -322,15 +336,15 @@ #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:69 msgid "Create torrent name sub-folder" -msgstr "Направи под-фасциклу за торент" +msgstr "Направи садржану фасциклу према називу торента" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:73 msgid "" "This option will create a sub-folder using the torrent's name within the " "selected extract folder and put the extracted files there." msgstr "" -"Ова опција ће да направи подфолдер са именом торента у изабраном фолдеру за " -"отпаковање и ставити отпаковане фајлове тамо." +"Ова опција ће направити подфасциклу користећи назив торента у изабраној " +"фасцикли за распакивање и ставити распаковане датотеке у њу." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:65 #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:87 @@ -348,12 +362,12 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Торент је уклоњен" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 msgid "Execute" -msgstr "Изврши" +msgstr "Извршавање" #: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:29 msgid "Event" @@ -365,27 +379,27 @@ #: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:112 msgid "Add Command" -msgstr "Додај Команду" +msgstr "Додајте наредбу" #: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:151 msgid "Commands" -msgstr "Команде" +msgstr "Наредбе" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:19 msgid "Emule IP list (GZip)" -msgstr "Emule IP листа (GZip)" +msgstr "Списак ИП Е-муле (GZip)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:20 msgid "SafePeer Text (Zipped)" -msgstr "„SafePeer“ Текст (компресован)" +msgstr "Текст Безбедног парњака (компресован)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:21 msgid "PeerGuardian Text (Uncompressed)" -msgstr "PeerGuardian текст (некомпресован)" +msgstr "Текст Чувара парњака (некомпресован)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:22 msgid "PeerGuardian P2B (GZip)" -msgstr "PeerGuardian P2B (GZip)" +msgstr "Чувар парњака П2Б (GZip)" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:39 msgid "Invalid leader" @@ -393,35 +407,36 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:43 msgid "Invalid magic code" -msgstr "Неисправан магични код" +msgstr "Неисправан чаробни код" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:48 msgid "Invalid version" -msgstr "Неисправна верзија" +msgstr "Неисправно издање" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:52 #: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:139 #: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:178 msgid "Blocklist" -msgstr "Листа блокирања" +msgstr "Списак блокирања" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:32 #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:436 #: deluge/ui/gtkui/glade/add_torrent_dialog.url.ui.h:3 msgid "URL:" -msgstr "URL(адреса):" +msgstr "Адреса:" +# Провери има ли новог списка сваког: 4.... дана #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:107 msgid "Days" -msgstr "Дани" +msgstr "дана" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:138 msgid "Check for new list every:" -msgstr "Провери за нову листу сваких:" +msgstr "Провери има ли новог списка сваког:" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:154 msgid "Import blocklist on startup" -msgstr "Убаци блок листу на покретању" +msgstr "Увези списак блокирања при покретању" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:176 #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:94 @@ -430,23 +445,23 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:216 msgid "Download the blocklist file if necessary and import the file." -msgstr "Скини фајл са блок листом ако је неопходно и убаци фајл." +msgstr "Преузмите датотеку списка блокирања ако је неопходно и увезите је." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:240 msgid "Check Download and Import" -msgstr "Провери Преузимање и Убацивање" +msgstr "Провери преузимање и увоз" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:262 msgid "Download a new blocklist file and import it." -msgstr "Скини нову блок листу и убаци је." +msgstr "Преузмите нови списак блокирања и увезите га." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:286 msgid "Force Download and Import" -msgstr "Насилно Преузимање и Убацивање" +msgstr "Приморај преузимање и увоз" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:313 msgid "Blocklist is up to date" -msgstr "Блок листа је ажурирана" +msgstr "Списак блокирања је ажуриран" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:333 msgid "Options" @@ -455,7 +470,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:449 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:48 msgid "Type:" -msgstr "Тип:" +msgstr "Врста:" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:462 msgid "Date:" @@ -463,133 +478,135 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:475 msgid "File Size:" -msgstr "Величина фајла:" +msgstr "Величина датотеке:" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:496 msgid "Info" -msgstr "<б>Информације" +msgstr "<б>Подаци" #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:32 #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:39 msgid "WebUi" -msgstr "" +msgstr "ВебКС" #: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:76 msgid "" "The Deluge web interface is not installed, please install the\n" "interface and try again" msgstr "" +"Веб сучеље Делугеа није инсталирано, инсталирајте га и\n" +"пробајте поново" #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:27 msgid "Enable web interface" -msgstr "Укључи Веб интерфејс" +msgstr "Укључи сучеље веба" #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:41 msgid "Enable SSL" -msgstr "Укључи SSL" +msgstr "Укључи ССЛ" #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:60 msgid "Listening port:" -msgstr "Порт за ослушкивање:" +msgstr "Прикључник ослушкивања:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:124 msgid "Watch folder does not exist." -msgstr "" +msgstr "Фасцикла надгледања не постоји." #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:129 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:404 msgid "Path does not exist." -msgstr "" +msgstr "Путања не постоји." #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:387 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:391 msgid "AutoAdd" -msgstr "" +msgstr "Самододавање" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/config.glade:41 msgid "Watch Folders:" -msgstr "" +msgstr "Фасцикле надгледања:" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:7 msgid "AutoAdd Error" -msgstr "" +msgstr "Грешка самосталног додавања" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:7 msgid "Watch Folder Properties" -msgstr "" +msgstr "Својства фасцикле надгледања" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:151 msgid "Enable this watch folder" -msgstr "" +msgstr "Укључи ову фасциклу надгледања" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:173 msgid "Watch Folder" -msgstr "" +msgstr "Фасцикла надгледања:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:211 msgid "Delete .torrent after adding" -msgstr "" +msgstr "Обриши „.torrent“ након додавања" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:232 msgid "Append extension after adding:" -msgstr "" +msgstr "Прикачи проширење након додавања:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:254 msgid ".added" -msgstr "" +msgstr ".added" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:367 msgid "Torrent File Action" -msgstr "" +msgstr "Радња датотеке торента" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:269 msgid "Set download location" -msgstr "" +msgstr "Подеси место за преузимања" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:319 #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:393 msgid "Download Location" -msgstr "Место преузимања" +msgstr "Место за преузимања" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:346 msgid "Set move completed location" -msgstr "" +msgstr "Подеси место за премештање завршених" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:569 msgid "Move Completed" -msgstr "" +msgstr "Премештање завршених" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:599 msgid "Label: " -msgstr "" +msgstr "Натпис: " #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:632 msgid "Label" -msgstr "" +msgstr "Натпис" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:652 msgid "Main" -msgstr "" +msgstr "Главно" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:726 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:123 msgid "Max Upload Speed:" -msgstr "Највећа брзина слања:" +msgstr "Најв. брзина слања:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:743 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:150 msgid "Max Connections:" -msgstr "Највише веза:" +msgstr "Најв. веза:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:760 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:173 msgid "Max Upload Slots:" -msgstr "Највише места за слање:" +msgstr "Најв. утичница за слање:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:885 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:97 msgid "Max Download Speed:" -msgstr "Највећа брзина преузимања:" +msgstr "Најв. брзина преузимања:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:912 msgid "Bandwidth" @@ -600,27 +617,27 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:42 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:225 msgid "Stop seed at ratio:" -msgstr "Прекини сејање код односа:" +msgstr "Прекини сејање при односу:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:976 #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:599 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:43 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:253 msgid "Remove at ratio" -msgstr "Уклони код односа" +msgstr "Уклони при односу" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:992 #: deluge/ui/web/render/tab_status.html:18 msgid "Auto Managed:" -msgstr "" +msgstr "Само-управљани:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1131 msgid "Add Paused:" -msgstr "" +msgstr "Додај паузиране:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1184 msgid "Queue to:" -msgstr "" +msgstr "Стави на:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1203 #: deluge/ui/web/js/deluge-all/Menus.js:192 @@ -634,7 +651,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1278 msgid "Queue" -msgstr "Ред" +msgstr "Стављање у ред" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1301 #: deluge/ui/gtkui/glade/connection_manager.ui.h:6 @@ -644,12 +661,12 @@ #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:40 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:95 msgid "Options" -msgstr "Поставке" +msgstr "Опције" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:162 #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:285 msgid "Scheduler" -msgstr "" +msgstr "Заказивач" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:227 msgid "Download Limit:" @@ -665,33 +682,33 @@ #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:254 msgid "Active Downloading:" -msgstr "" +msgstr "Активних преузимања:" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:263 msgid "Active Seeding:" -msgstr "" +msgstr "Активних сејања:" #: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:277 msgid "Slow Settings" -msgstr "Спора подешавања" +msgstr "Подешавања спорости" #: deluge/plugins/Label/deluge/plugins/label/core.py:171 msgid "Invalid label, valid characters:[a-z0-9_-]" -msgstr "Неисправна ознака, ваљани знаци:[a-z0-9_-]" +msgstr "Неисправан натпис, исправни знаци су:[a-z0-9_-]" #: deluge/plugins/Label/deluge/plugins/label/core.py:172 msgid "Empty Label" -msgstr "Празна ознака" +msgstr "Празан натпис" #: deluge/plugins/Label/deluge/plugins/label/core.py:173 msgid "Label already exists" -msgstr "Ознака већ постоји" +msgstr "Натпис већ постоји" #: deluge/plugins/Label/deluge/plugins/label/core.py:181 #: deluge/plugins/Label/deluge/plugins/label/core.py:261 #: deluge/plugins/Label/deluge/plugins/label/core.py:296 msgid "Unknown Label" -msgstr "Непознака ознака" +msgstr "Непознат натпис" #: deluge/plugins/Label/deluge/plugins/label/core.py:297 msgid "Unknown Torrent" @@ -700,18 +717,18 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:174 #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:164 msgid "Label Options" -msgstr "Опције ознака" +msgstr "Опције натписа" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:252 msgid "Label Options" -msgstr "Опције ознака" +msgstr "Опције натписа" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:368 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:35 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Утичнице слања:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 @@ -735,18 +752,18 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:512 msgid "Apply per torrent max settings:" -msgstr "Максимална подешавања по торенту:" +msgstr "Највећа подешавања по торенту:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:529 msgid "Maximum" -msgstr "Максимум" +msgstr "Највеће" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:569 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:41 #: deluge/ui/web/js/deluge-all/Menus.js:181 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:215 msgid "Auto Managed" -msgstr "Аутоматски надгледани" +msgstr "Само управљани" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:666 msgid "Apply Queue settings:" @@ -758,7 +775,7 @@ #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:196 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:41 msgid "Queue" -msgstr "Стави у ред" +msgstr "Ред" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:714 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:44 @@ -768,49 +785,49 @@ #: deluge/plugins/label/label/data/label_options.glade:504 msgid "Apply location settings:" -msgstr "Примени подешавања локације:" +msgstr "Примени подешавања места:" #: deluge/plugins/label/label/data/label_options.glade:520 msgid "Location" -msgstr "Локација" +msgstr "Место" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:841 msgid "(1 line per tracker)" -msgstr "i>(1 линија по трекеру)" +msgstr "(1 ред по пратиоцу)" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:856 msgid "Automatically apply label:" -msgstr "Аутоматски примени ознаку:" +msgstr "Самостално примени натпис:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:877 #: deluge/ui/gtkui/filtertreeview.py:129 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:9 #: deluge/ui/web/js/deluge-all/FilterPanel.js:53 msgid "Trackers" -msgstr "Трекери" +msgstr "Пратиоци" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:8 msgid "Add Label" -msgstr "Додај ознаку" +msgstr "Додај натпис" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:94 msgid "Add Label" -msgstr "Додај ознаку" +msgstr "Додајте натпис" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:130 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:23 #: deluge/ui/web/js/deluge-all/details/DetailsTab.js:47 msgid "Name:" -msgstr "Име:" +msgstr "Назив:" #: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:22 msgid "Use the sidebar to add,edit and remove labels. \n" msgstr "" -"Користите површ са стране за додавање, измену и уклањање ознака. \n" +"Користите бочну површ да додате, измените и уклоните натписе. \n" #: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:32 msgid "Labels" -msgstr "Ознаке" +msgstr "Натписи" #: deluge/plugins/Label/deluge/plugins/label/gtkui/__init__.py:47 #: deluge/plugins/Label/deluge/plugins/label/gtkui/__init__.py:80 @@ -818,24 +835,24 @@ #: deluge/plugins/Label/deluge/plugins/label/gtkui/label_config.py:34 #: deluge/plugins/Label/deluge/plugins/label/gtkui/label_config.py:41 msgid "Label" -msgstr "Ознака" +msgstr "Натпис" #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:45 msgid "Label _Options" -msgstr "Опције _ознака" +msgstr "Опције _натписа" #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:46 msgid "_Remove Label" -msgstr "_Уклони ознаку" +msgstr "_Уклони натпис" #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:47 msgid "_Add Label" -msgstr "_Додај ознаку" +msgstr "_Додај натпис" #: deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py:24 #: deluge/ui/gtkui/filtertreeview.py:196 msgid "No Label" -msgstr "Без ознаке" +msgstr "Нема натписа" #: deluge/ui/countries.py:9 msgid "Afghanistan" @@ -843,7 +860,7 @@ #: deluge/ui/countries.py:10 msgid "Aland Islands" -msgstr "Оландска острва" +msgstr "Аландска острва" #: deluge/ui/countries.py:11 msgid "Albania" @@ -867,11 +884,11 @@ #: deluge/ui/countries.py:16 msgid "Anguilla" -msgstr "Ангвила" +msgstr "Ангила" #: deluge/ui/countries.py:17 msgid "Antarctica" -msgstr "Антартик" +msgstr "Антарктик" #: deluge/ui/countries.py:18 msgid "Antigua and Barbuda" @@ -955,7 +972,7 @@ #: deluge/ui/countries.py:38 msgid "Bouvet Island" -msgstr "Бувеова острва" +msgstr "Острво Був" #: deluge/ui/countries.py:39 msgid "Brazil" @@ -963,11 +980,11 @@ #: deluge/ui/countries.py:40 msgid "British Indian Ocean Territory" -msgstr "Британско Индијска Океанска Територија" +msgstr "Британска Индијска Океанска Територија" #: deluge/ui/countries.py:41 msgid "Brunei Darussalam" -msgstr "Брунеј" +msgstr "Брунеји Дар-Ес-Салам" #: deluge/ui/countries.py:42 msgid "Bulgaria" @@ -1039,7 +1056,7 @@ #: deluge/ui/countries.py:59 msgid "Congo, The Democratic Republic of the" -msgstr "Демократска Република Конго" +msgstr "Конго, Демократска република" #: deluge/ui/countries.py:60 msgid "Cook Islands" @@ -1067,7 +1084,7 @@ #: deluge/ui/countries.py:66 msgid "Czech Republic" -msgstr "Чешка" +msgstr "Република Чешка" #: deluge/ui/countries.py:67 msgid "Denmark" @@ -1131,705 +1148,707 @@ #: deluge/ui/countries.py:82 msgid "France" -msgstr "" +msgstr "Француска" #: deluge/ui/countries.py:83 msgid "French Guiana" -msgstr "" +msgstr "Француска Гвајана" #: deluge/ui/countries.py:84 msgid "French Polynesia" -msgstr "" +msgstr "Француска Полинезија" #: deluge/ui/countries.py:85 msgid "French Southern Territories" -msgstr "" +msgstr "Француске Јужне Територије" #: deluge/ui/countries.py:86 msgid "Gabon" -msgstr "" +msgstr "Габон" #: deluge/ui/countries.py:87 msgid "Gambia" -msgstr "" +msgstr "Гамбија" #: deluge/ui/countries.py:88 msgid "Georgia" -msgstr "" +msgstr "Грузија" #: deluge/ui/countries.py:89 msgid "Germany" -msgstr "" +msgstr "Немачка" #: deluge/ui/countries.py:90 deluge/ui/countries.py:241 msgid "United Kingdom" -msgstr "" +msgstr "Велика Британија" #: deluge/ui/countries.py:91 msgid "Ghana" -msgstr "" +msgstr "Гана" #: deluge/ui/countries.py:92 msgid "Gibraltar" -msgstr "" +msgstr "Гибралтар" #: deluge/ui/countries.py:93 msgid "Greece" -msgstr "" +msgstr "Грчка" #: deluge/ui/countries.py:94 msgid "Greenland" -msgstr "" +msgstr "Гренланд" #: deluge/ui/countries.py:95 msgid "Grenada" -msgstr "" +msgstr "Гренада" #: deluge/ui/countries.py:96 msgid "Guadeloupe" -msgstr "" +msgstr "Гвадалупе" #: deluge/ui/countries.py:97 msgid "Guam" -msgstr "" +msgstr "Гиам" #: deluge/ui/countries.py:98 msgid "Guatemala" -msgstr "" +msgstr "Гватемала" #: deluge/ui/countries.py:99 msgid "Guernsey" -msgstr "" +msgstr "Гвернси" #: deluge/ui/countries.py:100 msgid "Guinea" -msgstr "" +msgstr "Гвинеја" #: deluge/ui/countries.py:101 msgid "Guinea-Bissau" -msgstr "" +msgstr "Гвинеја Бисао" #: deluge/ui/countries.py:102 msgid "Guyana" -msgstr "" +msgstr "Гвајана" #: deluge/ui/countries.py:103 msgid "Haiti" -msgstr "" +msgstr "Хаити" #: deluge/ui/countries.py:104 msgid "Heard Island and McDonald Islands" -msgstr "" +msgstr "Хердова и Мекдоналдова острва" #: deluge/ui/countries.py:105 msgid "Holy See (Vatican City State)" -msgstr "" +msgstr "Ватикан Град Држава (Света столица)" #: deluge/ui/countries.py:106 msgid "Honduras" -msgstr "" +msgstr "Хондурас" #: deluge/ui/countries.py:107 msgid "Hong Kong" -msgstr "" +msgstr "Хонг Конг" #: deluge/ui/countries.py:108 msgid "Hungary" -msgstr "" +msgstr "Мађарска" #: deluge/ui/countries.py:109 msgid "Iceland" -msgstr "" +msgstr "Исланд" #: deluge/ui/countries.py:110 msgid "India" -msgstr "" +msgstr "Индија" #: deluge/ui/countries.py:111 msgid "Indonesia" -msgstr "" +msgstr "Индонезија" #: deluge/ui/countries.py:112 msgid "Iran, Islamic Republic of" -msgstr "" +msgstr "Иран, Исламска Република" #: deluge/ui/countries.py:113 msgid "Iraq" -msgstr "" +msgstr "Ирак" #: deluge/ui/countries.py:114 msgid "Ireland" -msgstr "" +msgstr "Ирска" #: deluge/ui/countries.py:115 msgid "Isle of Man" -msgstr "" +msgstr "Острво Ман" #: deluge/ui/countries.py:116 msgid "Israel" -msgstr "" +msgstr "Израел" #: deluge/ui/countries.py:117 msgid "Italy" -msgstr "" +msgstr "Италија" #: deluge/ui/countries.py:118 msgid "Jamaica" -msgstr "" +msgstr "Јамајка" #: deluge/ui/countries.py:119 msgid "Japan" -msgstr "" +msgstr "Јапан" #: deluge/ui/countries.py:120 msgid "Jersey" -msgstr "" +msgstr "Џерси" #: deluge/ui/countries.py:121 msgid "Jordan" -msgstr "" +msgstr "Јордан" #: deluge/ui/countries.py:122 msgid "Kazakhstan" -msgstr "" +msgstr "Казакистан" #: deluge/ui/countries.py:123 msgid "Kenya" -msgstr "" +msgstr "Кенија" #: deluge/ui/countries.py:124 msgid "Kiribati" -msgstr "" +msgstr "Кирибати" #: deluge/ui/countries.py:125 msgid "Korea, Democratic People's Republic of" -msgstr "" +msgstr "Кореја, Демократска Народна Република" #: deluge/ui/countries.py:126 msgid "Korea, Republic of" -msgstr "" +msgstr "Кореја, Република" #: deluge/ui/countries.py:127 msgid "Kuwait" -msgstr "" +msgstr "Кувајт" #: deluge/ui/countries.py:128 msgid "Kyrgyzstan" -msgstr "" +msgstr "Киргистан" #: deluge/ui/countries.py:129 msgid "Lao People's Democratic Republic" -msgstr "" +msgstr "Лао Народна Демократска Република" #: deluge/ui/countries.py:130 msgid "Latvia" -msgstr "" +msgstr "Летонија" #: deluge/ui/countries.py:131 msgid "Lebanon" -msgstr "" +msgstr "Либан" #: deluge/ui/countries.py:132 msgid "Lesotho" -msgstr "" +msgstr "Лесото" #: deluge/ui/countries.py:133 msgid "Liberia" -msgstr "" +msgstr "Либерија" #: deluge/ui/countries.py:134 msgid "Libyan Arab Jamahiriya" -msgstr "" +msgstr "Либијска Арапска Џамахирија" #: deluge/ui/countries.py:135 msgid "Liechtenstein" -msgstr "" +msgstr "Лихенштајн" #: deluge/ui/countries.py:136 msgid "Lithuania" -msgstr "" +msgstr "Литванија" #: deluge/ui/countries.py:137 msgid "Luxembourg" -msgstr "" +msgstr "Луксембург" #: deluge/ui/countries.py:138 msgid "Macao" -msgstr "" +msgstr "Макао" #: deluge/ui/countries.py:139 msgid "Macedonia, The Former Yugoslav Republic of" -msgstr "" +msgstr "Македонија, Бивша Југословенска Република" #: deluge/ui/countries.py:140 msgid "Madagascar" -msgstr "" +msgstr "Мадагаскар" #: deluge/ui/countries.py:141 msgid "Malawi" -msgstr "" +msgstr "Малави" #: deluge/ui/countries.py:142 msgid "Malaysia" -msgstr "" +msgstr "Малезија" #: deluge/ui/countries.py:143 msgid "Maldives" -msgstr "" +msgstr "Малдиви" #: deluge/ui/countries.py:144 msgid "Mali" -msgstr "" +msgstr "Мали" #: deluge/ui/countries.py:145 msgid "Malta" -msgstr "" +msgstr "Малта" #: deluge/ui/countries.py:146 msgid "Marshall Islands" -msgstr "" +msgstr "Маршалска острва" #: deluge/ui/countries.py:147 msgid "Martinique" -msgstr "" +msgstr "Мартиник" #: deluge/ui/countries.py:148 msgid "Mauritania" -msgstr "" +msgstr "Мауританија" #: deluge/ui/countries.py:149 msgid "Mauritius" -msgstr "" +msgstr "Маурицијус" #: deluge/ui/countries.py:150 msgid "Mayotte" -msgstr "" +msgstr "Мајот" #: deluge/ui/countries.py:151 msgid "Mexico" -msgstr "" +msgstr "Мексико" #: deluge/ui/countries.py:152 msgid "Micronesia, Federated States of" -msgstr "" +msgstr "Микронезија, Федералне Државе" #: deluge/ui/countries.py:153 msgid "Moldova" -msgstr "" +msgstr "Молдавија" #: deluge/ui/countries.py:154 msgid "Monaco" -msgstr "" +msgstr "Монако" #: deluge/ui/countries.py:155 msgid "Mongolia" -msgstr "" +msgstr "Монголија" #: deluge/ui/countries.py:156 msgid "Montenegro" -msgstr "" +msgstr "Црна Гора" #: deluge/ui/countries.py:157 msgid "Montserrat" -msgstr "" +msgstr "Монсерат" #: deluge/ui/countries.py:158 msgid "Morocco" -msgstr "" +msgstr "Мароко" #: deluge/ui/countries.py:159 msgid "Mozambique" -msgstr "" +msgstr "Мозамбик" #: deluge/ui/countries.py:160 msgid "Myanmar" -msgstr "" +msgstr "Бурма" #: deluge/ui/countries.py:161 msgid "Namibia" -msgstr "" +msgstr "Намибија" #: deluge/ui/countries.py:162 msgid "Nauru" -msgstr "" +msgstr "Науру" #: deluge/ui/countries.py:163 msgid "Nepal" -msgstr "" +msgstr "Непал" #: deluge/ui/countries.py:164 msgid "Netherlands" -msgstr "" +msgstr "Холандија" #: deluge/ui/countries.py:165 msgid "Netherlands Antilles" -msgstr "" +msgstr "Холандски Антили" #: deluge/ui/countries.py:166 msgid "New Caledonia" -msgstr "" +msgstr "Нова Каледонија" #: deluge/ui/countries.py:167 msgid "New Zealand" -msgstr "" +msgstr "Нови Зеланд" #: deluge/ui/countries.py:168 msgid "Nicaragua" -msgstr "" +msgstr "Никарагва" #: deluge/ui/countries.py:169 msgid "Niger" -msgstr "" +msgstr "Нигер" #: deluge/ui/countries.py:170 msgid "Nigeria" -msgstr "" +msgstr "Нигерија" #: deluge/ui/countries.py:171 msgid "Niue" -msgstr "" +msgstr "Ниуе" #: deluge/ui/countries.py:172 msgid "Norfolk Island" -msgstr "" +msgstr "Норфолк острво" #: deluge/ui/countries.py:173 msgid "Northern Mariana Islands" -msgstr "" +msgstr "Северна Маријанска острва" #: deluge/ui/countries.py:174 msgid "Norway" -msgstr "" +msgstr "Норвешка" #: deluge/ui/countries.py:175 msgid "Oman" -msgstr "" +msgstr "Оман" #: deluge/ui/countries.py:176 msgid "Pakistan" -msgstr "" +msgstr "Пакистан" #: deluge/ui/countries.py:177 msgid "Palau" -msgstr "" +msgstr "Палау" #: deluge/ui/countries.py:178 msgid "Palestinian Territory, Occupied" -msgstr "" +msgstr "Палестинска Територија, Окупирана" #: deluge/ui/countries.py:179 msgid "Panama" -msgstr "" +msgstr "Панама" #: deluge/ui/countries.py:180 msgid "Papua New Guinea" -msgstr "" +msgstr "Папуа Нова Гвинеја" #: deluge/ui/countries.py:181 msgid "Paraguay" -msgstr "" +msgstr "Парагвај" #: deluge/ui/countries.py:182 msgid "Peru" -msgstr "" +msgstr "Перу" #: deluge/ui/countries.py:183 msgid "Philippines" -msgstr "" +msgstr "Филипини" #: deluge/ui/countries.py:184 msgid "Pitcairn" -msgstr "" +msgstr "Питкарн" #: deluge/ui/countries.py:185 msgid "Poland" -msgstr "" +msgstr "Пољска" #: deluge/ui/countries.py:186 msgid "Portugal" -msgstr "" +msgstr "Португал" #: deluge/ui/countries.py:187 msgid "Puerto Rico" -msgstr "" +msgstr "Порторико" #: deluge/ui/countries.py:188 msgid "Qatar" -msgstr "" +msgstr "Катар" #: deluge/ui/countries.py:189 msgid "Reunion" -msgstr "" +msgstr "Реунион" #: deluge/ui/countries.py:190 msgid "Romania" -msgstr "" +msgstr "Румунија" #: deluge/ui/countries.py:191 msgid "Russian Federation" -msgstr "" +msgstr "Руска Федерација" #: deluge/ui/countries.py:192 msgid "Rwanda" -msgstr "" +msgstr "Руанда" #: deluge/ui/countries.py:193 msgid "Saint Barthelemy" -msgstr "" +msgstr "Сент Бартелеми" #: deluge/ui/countries.py:194 msgid "Saint Helena" -msgstr "" +msgstr "Света Јелена" #: deluge/ui/countries.py:195 msgid "Saint Kitts and Nevis" -msgstr "" +msgstr "Свети Китс и Невис" #: deluge/ui/countries.py:196 msgid "Saint Lucia" -msgstr "" +msgstr "Света Луција" #: deluge/ui/countries.py:197 msgid "Saint Martin" -msgstr "" +msgstr "Свети Мартен" #: deluge/ui/countries.py:198 msgid "Saint Pierre and Miquelon" -msgstr "" +msgstr "Свети Пјер и Микелон" #: deluge/ui/countries.py:199 msgid "Saint Vincent and the Grenadines" -msgstr "" +msgstr "Свети Винсент и Гренадини" #: deluge/ui/countries.py:200 msgid "Samoa" -msgstr "" +msgstr "Самоа" #: deluge/ui/countries.py:201 msgid "San Marino" -msgstr "" +msgstr "Сан Марино" #: deluge/ui/countries.py:202 msgid "Sao Tome and Principe" -msgstr "" +msgstr "Сао Томе и Принципе" #: deluge/ui/countries.py:203 msgid "Saudi Arabia" -msgstr "" +msgstr "Саудијска Арабија" #: deluge/ui/countries.py:204 msgid "Senegal" -msgstr "" +msgstr "Сенегал" #: deluge/ui/countries.py:205 msgid "Serbia" -msgstr "" +msgstr "Србија" #: deluge/ui/countries.py:206 msgid "Seychelles" -msgstr "" +msgstr "Сејшели" #: deluge/ui/countries.py:207 msgid "Sierra Leone" -msgstr "" +msgstr "Сјера Леоне" #: deluge/ui/countries.py:208 msgid "Singapore" -msgstr "" +msgstr "Сингапур" #: deluge/ui/countries.py:209 msgid "Slovakia" -msgstr "" +msgstr "Словачка" #: deluge/ui/countries.py:210 msgid "Slovenia" -msgstr "" +msgstr "Словенија" #: deluge/ui/countries.py:211 msgid "Solomon Islands" -msgstr "" +msgstr "Соломонска острва" #: deluge/ui/countries.py:212 msgid "Somalia" -msgstr "" +msgstr "Сомалија" #: deluge/ui/countries.py:213 msgid "South Africa" -msgstr "" +msgstr "Јужноафричка Република" #: deluge/ui/countries.py:214 msgid "South Georgia and the South Sandwich Islands" -msgstr "" +msgstr "Јужна Џорџија и Јужна Сендвичка острва" #: deluge/ui/countries.py:215 msgid "Spain" -msgstr "" +msgstr "Шпанија" #: deluge/ui/countries.py:216 msgid "Sri Lanka" -msgstr "" +msgstr "Шри Ланка" #: deluge/ui/countries.py:217 msgid "Sudan" -msgstr "" +msgstr "Судан" #: deluge/ui/countries.py:218 msgid "Suriname" -msgstr "" +msgstr "Суринам" #: deluge/ui/countries.py:219 msgid "Svalbard and Jan Mayen" -msgstr "" +msgstr "Свалбард и Јан Мајен" #: deluge/ui/countries.py:220 msgid "Swaziland" -msgstr "" +msgstr "Свазиленд" #: deluge/ui/countries.py:221 msgid "Sweden" -msgstr "" +msgstr "Шведска" #: deluge/ui/countries.py:222 msgid "Switzerland" -msgstr "" +msgstr "Швајцарска" #: deluge/ui/countries.py:223 msgid "Syrian Arab Republic" -msgstr "" +msgstr "Сиријска Арапска Република" #: deluge/ui/countries.py:224 msgid "Taiwan, Province of China" -msgstr "" +msgstr "Тајван, Кинеска Провинција" #: deluge/ui/countries.py:225 msgid "Tajikistan" -msgstr "" +msgstr "Таџикистан" #: deluge/ui/countries.py:226 msgid "Tanzania, United Republic of" -msgstr "" +msgstr "Танзанија, Сједињена Република" #: deluge/ui/countries.py:227 msgid "Thailand" -msgstr "" +msgstr "Тајланд" #: deluge/ui/countries.py:228 msgid "Timor-Leste" -msgstr "" +msgstr "Источни Тимор" #: deluge/ui/countries.py:229 msgid "Togo" -msgstr "" +msgstr "Того" #: deluge/ui/countries.py:230 msgid "Tokelau" -msgstr "" +msgstr "Токелау" #: deluge/ui/countries.py:231 msgid "Tonga" -msgstr "" +msgstr "Тонга" #: deluge/ui/countries.py:232 msgid "Trinidad and Tobago" -msgstr "" +msgstr "Тринидад и Тобаго" #: deluge/ui/countries.py:233 msgid "Tunisia" -msgstr "" +msgstr "Тунис" #: deluge/ui/countries.py:234 msgid "Turkey" -msgstr "" +msgstr "Турска" #: deluge/ui/countries.py:235 msgid "Turkmenistan" -msgstr "" +msgstr "Туркменистан" #: deluge/ui/countries.py:236 msgid "Turks and Caicos Islands" -msgstr "" +msgstr "Туркс и Каикос острва" #: deluge/ui/countries.py:237 msgid "Tuvalu" -msgstr "" +msgstr "Тувалу" #: deluge/ui/countries.py:238 msgid "Uganda" -msgstr "" +msgstr "Уганда" #: deluge/ui/countries.py:239 msgid "Ukraine" -msgstr "" +msgstr "Украjина" #: deluge/ui/countries.py:240 msgid "United Arab Emirates" -msgstr "" +msgstr "Уједињени Арапски Емирати" #: deluge/ui/countries.py:242 msgid "United States" -msgstr "" +msgstr "Сједињене Америчке Државе" #: deluge/ui/countries.py:243 msgid "United States Minor Outlying Islands" -msgstr "" +msgstr "Спољна ивична острва САД" #: deluge/ui/countries.py:244 msgid "Uruguay" -msgstr "" +msgstr "Уругвај" #: deluge/ui/countries.py:245 msgid "Uzbekistan" -msgstr "" +msgstr "Узбекистан" #: deluge/ui/countries.py:246 msgid "Vanuatu" -msgstr "" +msgstr "Вануату" #: deluge/ui/countries.py:247 msgid "Venezuela" -msgstr "" +msgstr "Венецуела" #: deluge/ui/countries.py:248 msgid "Viet Nam" -msgstr "" +msgstr "Вијетнам" #: deluge/ui/countries.py:249 msgid "Virgin Islands, British" -msgstr "" +msgstr "Британска Девичанска острва" #: deluge/ui/countries.py:250 msgid "Virgin Islands, U.S." -msgstr "" +msgstr "Америчка Девичанска острва" #: deluge/ui/countries.py:251 msgid "Wallis and Futuna" -msgstr "" +msgstr "Валис и Футуна" #: deluge/ui/countries.py:252 msgid "Western Sahara" -msgstr "" +msgstr "Западна Сахара" #: deluge/ui/countries.py:253 msgid "Yemen" -msgstr "" +msgstr "Јемен" #: deluge/ui/countries.py:254 msgid "Zambia" -msgstr "" +msgstr "Замбија" #: deluge/ui/countries.py:255 msgid "Zimbabwe" -msgstr "" +msgstr "Зимбабве" #: deluge/ui/client.py:629 deluge/ui/gtkui/connectionmanager.py:459 msgid "" "Deluge cannot find the 'deluged' executable, it is likely that you forgot to " "install the deluged package or it's not in your PATH." msgstr "" +"Делуге не може да нађе извршног „deluged“, вероватно сте заборавили да " +"инсталирате пакет „deluged“ или није у вашој ПУТАЊИ." #: deluge/ui/web/server.py:623 msgid "Starting server in PID" -msgstr "" +msgstr "Покрећем сервер у ПИБ-у" #: deluge/ui/web/js/deluge-all/ConnectionManager.js:76 msgid "Offline" @@ -1837,37 +1856,37 @@ #: deluge/ui/web/js/deluge-all/ConnectionManager.js:73 msgid "Online" -msgstr "На вези" +msgstr "На мрежи" #: deluge/ui/web/js/deluge-all/ConnectionManager.js:79 msgid "Connected" -msgstr "Конектован" +msgstr "Повезан" #: deluge/ui/web/json_api.py:829 msgid "Daemon doesn't exist" -msgstr "" +msgstr "Услужник не постоји" #: deluge/ui/web/json_api.py:835 msgid "Daemon not running" -msgstr "" +msgstr "Услужник није покренут" #: deluge/ui/console/statusbars.py:107 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:125 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:224 msgid "DHT" -msgstr "DHT" +msgstr "ДХТ" #: deluge/ui/gtkui/notification.py:57 msgid "Torrent complete" -msgstr "Завршен торент" +msgstr "Торент је завршен" #: deluge/ui/gtkui/notification.py:59 msgid "Including" -msgstr "" +msgstr "Укључујући" #: deluge/ui/gtkui/notification.py:59 msgid "files" -msgstr "" +msgstr "датотеке" #: deluge/ui/gtkui/notification.py:109 #, python-format @@ -1880,16 +1899,17 @@ "Thank you,\n" "Deluge" msgstr "" -"Овај е-маил је да вас обавестимо да је Deluge завршио са преузимањем " -"%(name)s , што укључује %(num_files)i датотека.\n" -"Да бисте престали да примате ова обавештења, просто искључите е-маил " -"обавештеља у Deluge подешавањима.\n" +"Овом ел. поштом вас обавештавамо да је Делуге преузео „%(name)s“ у " +"потпуности, са укупно %(num_files)i датотеке.\n" +"Да престанете да примате ова обавештења, једноставно искључите обавештавање " +"ел. поштом у подешавањима Делугеа.\n" +"\n" "Хвала вам,\n" -"Deluge" +"Делуге" #: deluge/ui/common.py:38 deluge/ui/web/js/deluge-all/UI.js:44 msgid "Downloading" -msgstr "" +msgstr "Преузимање" #: deluge/ui/common.py:39 deluge/ui/gtkui/glade/preferences_dialog.ui.h:99 #: deluge/ui/web/js/deluge-all/UI.js:45 @@ -1908,7 +1928,7 @@ #: deluge/ui/common.py:42 deluge/ui/web/js/deluge-all/UI.js:48 msgid "Queued" -msgstr "У ред чекања" +msgstr "У реду" #: deluge/ui/gtkui/torrentview.py:143 deluge/ui/gtkui/torrentview.py:229 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:116 @@ -1940,11 +1960,11 @@ #: deluge/ui/web/js/deluge-all/TorrentGrid.js:128 #: deluge/ui/web/js/deluge-all/details/FilesTab.js:52 msgid "Progress" -msgstr "Напредак" +msgstr "Напредовање" #: deluge/ui/gtkui/torrentview.py:260 deluge/ui/gtkui/torrentview.py:266 msgid "Seeders" -msgstr "Сејачи:" +msgstr "Сејачи" #: deluge/ui/gtkui/torrentview.py:251 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:141 @@ -1955,7 +1975,7 @@ #: deluge/ui/gtkui/torrentview.py:256 deluge/ui/gtkui/peers_tab.py:116 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:148 msgid "Down Speed" -msgstr "Брзина преузимања" +msgstr "Брзина пријема" #: deluge/ui/gtkui/torrentview.py:258 deluge/ui/gtkui/peers_tab.py:129 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:154 @@ -1965,17 +1985,17 @@ #: deluge/ui/gtkui/torrentview.py:260 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:256 msgid "Down Limit" -msgstr "" +msgstr "Ограничење пријема" #: deluge/ui/gtkui/torrentview.py:262 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:263 msgid "Up Limit" -msgstr "" +msgstr "Ограничење слања" #: deluge/ui/gtkui/torrentview.py:264 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:160 msgid "ETA" -msgstr "Процењено време" +msgstr "Време" #: deluge/ui/gtkui/torrentview.py:266 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:166 @@ -1985,12 +2005,12 @@ #: deluge/ui/gtkui/torrentview.py:268 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:173 msgid "Avail" -msgstr "Дост" +msgstr "Доступно" #: deluge/ui/gtkui/torrentview.py:270 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:180 msgid "Added" -msgstr "Додато" +msgstr "Додат" #: deluge/ui/gtkui/torrentview.py:276 #: deluge/ui/gtkui/createtorrentdialog.py:93 @@ -2002,7 +2022,7 @@ #: deluge/ui/gtkui/torrentview.py:288 msgid "Save Path" -msgstr "" +msgstr "Путања чувања" #: deluge/ui/gtkui/peers_tab.py:74 msgid "Address" @@ -2014,18 +2034,18 @@ #: deluge/ui/gtkui/new_release_dialog.py:46 msgid "Client Version" -msgstr "" +msgstr "Издање клијента:" #: deluge/ui/data/share/applications/deluge.desktop.in.h:1 #: deluge/ui/gtkui/systemtray.py:86 deluge/ui/gtkui/systemtray.py:169 #: deluge/ui/gtkui/systemtray.py:229 deluge/ui/gtkui/aboutdialog.py:28 #: deluge/ui/web/js/deluge-all/Toolbar.js:45 msgid "Deluge" -msgstr "Deluge" +msgstr "Делуге" #: deluge/ui/gtkui/systemtray.py:169 msgid "Not Connected..." -msgstr "" +msgstr "Неповезан..." #: deluge/ui/gtkui/systemtray.py:220 deluge/ui/gtkui/systemtray.py:224 #: deluge/ui/web/js/deluge-all/Statusbar.js:85 @@ -2044,7 +2064,7 @@ #: deluge/ui/web/js/deluge-all/Menus.js:204 #: deluge/ui/web/js/deluge-all/Toolbar.js:89 msgid "Down" -msgstr "Доле" +msgstr "Преузимање" #: deluge/ui/gtkui/systemtray.py:230 #: deluge/ui/gtkui/glade/path_combo_chooser.ui.h:34 @@ -2053,19 +2073,19 @@ #: deluge/ui/web/js/deluge-all/Toolbar.js:83 #: deluge/ui/web/js/deluge-all/FileBrowser.js:53 msgid "Up" -msgstr "Горе:" +msgstr "Слање" #: deluge/ui/web/js/deluge-all/Statusbar.js:143 msgid "Set Maximum Download Speed" -msgstr "Постави највећу брзину преузимања" +msgstr "Поставите највећу брзину преузимања" #: deluge/ui/web/js/deluge-all/Statusbar.js:191 msgid "Set Maximum Upload Speed" -msgstr "Постави највећу брзину слања" +msgstr "Поставите највећу брзину слања" #: deluge/ui/gtkui/common.py:73 msgid "Activated" -msgstr "Активирано" +msgstr "Покренуто" #: deluge/ui/gtkui/common.py:97 deluge/ui/gtkui/menubar.py:71 msgid "Other..." @@ -2076,61 +2096,61 @@ #: deluge/ui/web/js/deluge-all/details/FilesTab.js:40 #: deluge/ui/web/js/deluge-all/add/FilesTab.js:50 msgid "Filename" -msgstr "Име датотеке" +msgstr "Назив датотеке" #: deluge/ui/gtkui/createtorrentdialog.py:91 #: deluge/ui/gtkui/edittrackersdialog.py:70 #: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:76 msgid "Tier" -msgstr "Положај" +msgstr "Наслагач" #: deluge/ui/gtkui/createtorrentdialog.py:131 msgid "Choose a file" -msgstr "Изаберите фајл" +msgstr "Изаберите датотеку" #: deluge/ui/gtkui/createtorrentdialog.py:160 msgid "Choose a folder" -msgstr "Изаберите фолдер" +msgstr "Изаберите фасциклу" #: deluge/ui/gtkui/createtorrentdialog.py:238 #: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:2 msgid "Save .torrent file" -msgstr "Сачувај .torrent фајл" +msgstr "Сачувај датотеку „.torrent“" #: deluge/ui/gtkui/createtorrentdialog.py:249 #: deluge/ui/gtkui/addtorrentdialog.py:548 msgid "Torrent files" -msgstr "Торент фајлови" +msgstr "Датотеке торента" #: deluge/ui/gtkui/createtorrentdialog.py:253 #: deluge/ui/gtkui/addtorrentdialog.py:552 msgid "All files" -msgstr "Сви фајлови" +msgstr "Све датотеке" #: deluge/ui/gtkui/files_tab.py:33 deluge/ui/web/js/deluge-all/Menus.js:257 #: deluge/ui/web/js/deluge-all/Deluge.js:163 msgid "Do Not Download" -msgstr "" +msgstr "Не преузимај" #: deluge/ui/gtkui/files_tab.py:34 deluge/ui/web/js/deluge-all/Menus.js:262 #: deluge/ui/web/js/deluge-all/Deluge.js:164 msgid "Normal Priority" -msgstr "" +msgstr "Нормалан приоритет" #: deluge/ui/gtkui/files_tab.py:35 deluge/ui/web/js/deluge-all/Menus.js:267 #: deluge/ui/web/js/deluge-all/Deluge.js:165 msgid "High Priority" -msgstr "" +msgstr "Висок приоритет" #: deluge/ui/gtkui/files_tab.py:36 deluge/ui/web/js/deluge-all/Menus.js:272 #: deluge/ui/web/js/deluge-all/Deluge.js:166 msgid "Highest Priority" -msgstr "" +msgstr "Највиши приоритет" #: deluge/ui/gtkui/files_tab.py:153 #: deluge/ui/web/js/deluge-all/details/FilesTab.js:60 msgid "Priority" -msgstr "Приоритет" +msgstr "Првенство" #: deluge/ui/gtkui/addtorrentdialog.py:89 deluge/ui/gtkui/queuedtorrents.py:50 msgid "Torrent" @@ -2138,49 +2158,51 @@ #: deluge/ui/gtkui/addtorrentdialog.py:193 msgid "Invalid File" -msgstr "Неисправан фајл" +msgstr "Неисправна датотека" #: deluge/ui/gtkui/addtorrentdialog.py:231 msgid "Duplicate Torrent" -msgstr "Дупли торент" +msgstr "Двоструки торент" #: deluge/ui/gtkui/addtorrentdialog.py:231 msgid "You cannot add the same torrent twice." -msgstr "Не можеш да додаш исти торент два пута." +msgstr "Не можете додати исти торент два пута." #: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "Unable to set file priority!" -msgstr "Не могу да поставим приоритет фајла!" +msgstr "Не могу да поставим првенство датотеке!" #: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "" "File prioritization is unavailable when using Compact allocation. Would you " "like to switch to Full allocation?" msgstr "" +"Првенство датотеке није доступно када се користи збијена додела. Да ли " +"желите да се пребаците на потпуну доделу?" #: deluge/ui/gtkui/addtorrentdialog.py:534 msgid "Choose a .torrent file" -msgstr "Изабери .torrent датотеку" +msgstr "Изаберите „.torrent“ датотеку" #: deluge/ui/gtkui/addtorrentdialog.py:611 msgid "Invalid URL" -msgstr "Неисправни УРЛ" +msgstr "Неисправна адреса" #: deluge/ui/gtkui/addtorrentdialog.py:612 msgid "is not a valid URL." -msgstr "" +msgstr "није исправна адреса." #: deluge/ui/gtkui/addtorrentdialog.py:618 msgid "Downloading..." -msgstr "" +msgstr "Преузимам..." #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Download Failed" -msgstr "Преузимање неуспело." +msgstr "Преузимање није успело" #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Failed to download:" -msgstr "" +msgstr "Нисам успео да преузмем:" #: deluge/ui/gtkui/queuedtorrents.py:111 msgid " Torrents Queued" @@ -2188,12 +2210,12 @@ #: deluge/ui/gtkui/queuedtorrents.py:113 msgid " Torrent Queued" -msgstr " торент у реду" +msgstr " Торент у реду" #: deluge/ui/gtkui/preferences.py:71 #: deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js:85 msgid "Categories" -msgstr "" +msgstr "Категорије" #: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:42 @@ -2212,7 +2234,7 @@ #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:94 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:42 msgid "Bandwidth" -msgstr "Пропусни опсег" +msgstr "Проток" #: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:41 @@ -2234,65 +2256,67 @@ #: deluge/ui/gtkui/preferences.py:901 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:41 msgid "Daemon" -msgstr "Демон" +msgstr "Услужник" #: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:139 #: deluge/ui/web/js/deluge-all/preferences/ProxyPage.js:42 #: deluge/ui/web/js/deluge-all/preferences/ProxyPage.js:52 msgid "Proxy" -msgstr "" +msgstr "Посредник" #: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 #: deluge/ui/web/js/deluge-all/preferences/CachePage.js:41 msgid "Cache" -msgstr "" +msgstr "Остава" #: deluge/ui/gtkui/preferences.py:76 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:41 msgid "Plugins" -msgstr "Додаци" +msgstr "Прикључци" #: deluge/ui/gtkui/preferences.py:125 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:92 msgid "Plugin" -msgstr "Додатак" +msgstr "Прикључак" #: deluge/ui/gtkui/preferences.py:769 msgid "You must restart the deluge UI to change classic mode. Quit now?" msgstr "" +"Морате поново да покренете корисничко сучеље Делугеа да бисте променили " +"класични режим. Да изађем сада?" #: deluge/ui/gtkui/preferences.py:955 msgid "Select the Plugin" -msgstr "Одабери додатак" +msgstr "Одаберите прикључак" #: deluge/ui/gtkui/preferences.py:967 msgid "Plugin Eggs" -msgstr "Egg-ови додатака" +msgstr "Јаја прикључка" #: deluge/ui/gtkui/torrentdetails.py:93 msgid "_All" -msgstr "" +msgstr "_Све" #: deluge/ui/gtkui/torrentdetails.py:94 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:15 msgid "_Status" -msgstr "" +msgstr "_Стање" #: deluge/ui/gtkui/torrentdetails.py:95 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:28 msgid "_Details" -msgstr "_Детаљи" +msgstr "_Појединости" #: deluge/ui/gtkui/torrentdetails.py:96 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:29 msgid "_Files" -msgstr "Дато_теке" +msgstr "_Датотеке" #: deluge/ui/gtkui/torrentdetails.py:97 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:30 msgid "_Peers" -msgstr "" +msgstr "_Парњаци" #: deluge/ui/gtkui/torrentdetails.py:98 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:44 @@ -2314,19 +2338,19 @@ #: deluge/ui/gtkui/menubar.py:320 msgid "Choose a directory to move files to" -msgstr "Изаберите директоријум у који ће датотеке бити померене" +msgstr "Изаберите директоријум за премештање датотека" #: deluge/ui/web/js/deluge-all/Statusbar.js:96 msgid "Set Maximum Connections" -msgstr "Постави број највише веза" +msgstr "Поставите највише веза" #: deluge/ui/gtkui/menubar.py:440 msgid "Set Maximum Upload Slots" -msgstr "Постави највише места за слање" +msgstr "Поставите највише утичница за слање" #: deluge/ui/gtkui/gtkui.py:352 deluge/ui/gtkui/gtkui.py:379 msgid "Turn off Classic Mode?" -msgstr "Искључи Класични начин?" +msgstr "Да искључим класичан режим?" #: deluge/ui/gtkui/gtkui.py:353 msgid "" @@ -2334,14 +2358,14 @@ "\n" "You will either need to stop the daemon or turn off Classic Mode to continue." msgstr "" -"Изгледа да је Deluge демон процес (deluged) је већ покренут.\n" +"Изгледа да је процес услужника Делугеа (deluged) већ покренут.\n" "\n" -"Мораћете или да зауставите демон или да искључите Класични начин да " -"наставите." +"Мораћете или да зауставите услужника или да искључите класичан режим да " +"бисте наставили." #: deluge/ui/gtkui/gtkui.py:360 msgid "Enable Thin Client Mode?" -msgstr "" +msgstr "Да укључим режим мајушног клијента?" #: deluge/ui/gtkui/gtkui.py:361 msgid "" @@ -2349,10 +2373,15 @@ "\n" "To use Deluge standalone (Classic mode) please install libtorrent." msgstr "" +"Режим мајушног клијента је доступан само зато што библиотека „libtorrent“ " +"није инсталирана.\n" +"\n" +"Да користите самостојећи Делуге (класични режим) инсталирајте пакет " +"„libtorrent“." #: deluge/ui/gtkui/gtkui.py:348 msgid "Error Starting Core" -msgstr "Грешка у покретању Језгра" +msgstr "Грешка у покретању језгра" #: deluge/ui/gtkui/gtkui.py:375 msgid "" @@ -2361,68 +2390,68 @@ "\n" "Please see the details below for more information." msgstr "" -"Десила се грешка код покретања главне компоненте која је потребна да се " -"покрене Deluge у класичном начину.\n" +"Дошло је до грешке покретања кључне компоненте која је потребна за покретање " +"Делугеа у класичном режиму.\n" "\n" -"Моломо вас да погледате детаље испод за више информација." +"Погледајте детаље испод за више информација." #: deluge/ui/gtkui/gtkui.py:380 msgid "" "Since there was an error starting in Classic Mode would you like to continue " "by turning it off?" msgstr "" -"Пошти се десила грешка код покретања Класичног начина да ли би сте желели да " +"Пошто је дошло до грешке покретања класичног режима да ли желите да " "наставите тако што ћете га искључити?" #: deluge/ui/gtkui/gtkui.py:391 msgid "Error Starting Daemon" -msgstr "Грешка код покретања демона" +msgstr "Грешка покретања услужника" #: deluge/ui/gtkui/gtkui.py:392 msgid "" "There was an error starting the daemon process. Try running it from a " "console to see if there is an error." msgstr "" -"Десила се грешка код покретања демон процеса. Покушајте да га покренете из " -"конзоле да видите да ли постоји нека грешка." +"Дошло је до грешке покретања процеса услужника. Покушајте да га покренете из " +"конзоле да видите да ли има грешака." #: deluge/ui/gtkui/connectionmanager.py:161 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:168 #: deluge/ui/web/js/deluge-all/ConnectionManager.js:68 #: deluge/ui/web/js/deluge-all/details/StatusTab.js:39 msgid "Status" -msgstr "" +msgstr "Стање" #: deluge/ui/gtkui/connectionmanager.py:165 #: deluge/ui/web/js/deluge-all/ConnectionManager.js:84 msgid "Host" -msgstr "" +msgstr "Домаћин" #: deluge/ui/gtkui/connectionmanager.py:170 #: deluge/ui/web/js/deluge-all/ConnectionManager.js:90 msgid "Version" -msgstr "" +msgstr "Издање" #: deluge/ui/gtkui/connectionmanager.py:424 msgid "_Stop Daemon" -msgstr "" +msgstr "_Заустави услужника" #: deluge/ui/gtkui/connectionmanager.py:432 msgid "_Start Daemon" -msgstr "" +msgstr "_Покрени услужника" #: deluge/ui/gtkui/connectionmanager.py:458 #: deluge/ui/gtkui/connectionmanager.py:470 msgid "Unable to start daemon!" -msgstr "" +msgstr "Не могу да покренем услужника!" #: deluge/ui/gtkui/connectionmanager.py:471 msgid "Please examine the details for more information." -msgstr "" +msgstr "Проучите детаље за више података." #: deluge/ui/gtkui/connectionmanager.py:592 msgid "Error Adding Host" -msgstr "Грешка код додавања хоста" +msgstr "Грешка додавања домаћина" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:6 msgid "Torrents" @@ -2436,46 +2465,48 @@ #: deluge/ui/gtkui/dialogs.py:390 msgid "Password Protected" -msgstr "" +msgstr "Заштита лозинком" #: deluge/ui/gtkui/mainwindow.py:191 msgid "Enter your password to show Deluge..." -msgstr "" +msgstr "Упишите лозинку да прикажете Делуге..." #: deluge/ui/gtkui/mainwindow.py:235 msgid "Enter your password to Quit Deluge..." -msgstr "" +msgstr "Упишите лозинку да изађете из Делугеа..." #: deluge/ui/gtkui/mainwindow.py:315 msgid "D:" -msgstr "" +msgstr "П:" #: deluge/ui/gtkui/mainwindow.py:315 msgid "U:" -msgstr "" +msgstr "С:" #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Ауторска права %(year_start)s-%(year_end)s Тим Делугеа" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" "A peer-to-peer file sharing program\n" "utilizing the BitTorrent protocol." msgstr "" +"Програм за размену датотека од парњака\n" +"до парњака који користи протокол Бит-Торента." #: deluge/ui/gtkui/aboutdialog.py:36 msgid "Client:" -msgstr "" +msgstr "Клијент:" #: deluge/ui/gtkui/aboutdialog.py:39 msgid "Current Developers:" -msgstr "" +msgstr "Тренутни програмери:" #: deluge/ui/gtkui/aboutdialog.py:41 msgid "Past Developers or Contributors:" -msgstr "" +msgstr "Претходни програмери или доприносиоци:" #: deluge/ui/gtkui/aboutdialog.py:226 msgid "" @@ -2503,6 +2534,28 @@ "delete this exception statement from all source files in the program, then " "also delete it here." msgstr "" +"Овај програм је слободан софтвер; можете га расподељивати и/или мењати под " +"условима Гнуове опште јавне лиценце коју је објавила Задужбина слободног " +"софтвера; издања 3 лиценце или (по вашем избору) било којег новијег издања.\n" +"\n" +"Овај програм се расподељује у нади да ће бити користан, али БЕЗ ИКАКВЕ " +"ГАРАНЦИЈЕ; чак и без примењене гаранције ТРЖИШНЕ ВРЕДНОСТИ или " +"ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ. Погледајте Гнуову Општу јавну лиценцу за " +"више детаља.\n" +"\n" +"Требали сте да примите примерак Гнуове Опште јавне лиценце уз овај програм; " +"ако нисте, видите: .\n" +"\n" +"Поред тога, као посебан изузетак, носиоци ауторских права дају дозволу за " +"повезивање кода делова овог програма са ОпенССЛ библиотеком. Морате " +"испоштовати Гнуову Општу јавну лиценцу у свим аспектима за сав код коришћен " +"изван ОпенССЛ-а.\n" +"\n" +"Ако измените датотеку(е) са овим изузетком, можете проширити овај изузетак " +"на ваше издање датотеке(а), али нисте у обавези да то учините. Ако не желите " +"то да урадите, избришите ову изјаву изузетка из вашег издања. Ако избришете " +"ову изјаву изузетка из свих изворних датотека у програму, онда је такође и " +"овде избришите." #: deluge/ui/gtkui/aboutdialog.py:259 msgid "Server:" @@ -2510,12 +2563,12 @@ #: deluge/ui/gtkui/aboutdialog.py:262 msgid "libtorrent:" -msgstr "" +msgstr "библторент:" #: deluge/ui/gtkui/statusbar.py:128 #: deluge/ui/web/js/deluge-all/Statusbar.js:39 msgid "Not Connected" -msgstr "Није повезан" +msgstr "Неповезан" #: deluge/plugins/Stats/deluge/plugins/stats/data/tabs.glade:112 #: deluge/ui/gtkui/statusbar.py:145 @@ -2528,7 +2581,7 @@ #: deluge/ui/gtkui/statusbar.py:150 #: deluge/ui/web/js/deluge-all/Statusbar.js:104 msgid "Download Speed" -msgstr "Преузимање" +msgstr "Брзина преузимања" #: deluge/ui/gtkui/statusbar.py:155 #: deluge/ui/web/js/deluge-all/Statusbar.js:152 @@ -2538,16 +2591,16 @@ #: deluge/ui/gtkui/statusbar.py:160 #: deluge/ui/web/js/deluge-all/Statusbar.js:200 msgid "Protocol Traffic Download/Upload" -msgstr "Саобраћај протокола преузимање/слање" +msgstr "Протокол саобраћаја преузимања/слања" #: deluge/ui/gtkui/statusbar.py:163 #: deluge/ui/web/js/deluge-all/Statusbar.js:210 msgid "DHT Nodes" -msgstr "DHT чворови" +msgstr "Број ДХТ чворова" #: deluge/ui/gtkui/statusbar.py:168 msgid "Free Disk Space" -msgstr "" +msgstr "Слободан простор на диску" #: deluge/ui/gtkui/statusbar.py:172 msgid "No Incoming Connections!" @@ -2556,23 +2609,23 @@ #: deluge/ui/gtkui/filtertreeview.py:124 #: deluge/ui/web/js/deluge-all/FilterPanel.js:51 msgid "States" -msgstr "" +msgstr "Стања" #: deluge/ui/gtkui/filtertreeview.py:157 #: deluge/ui/web/js/deluge-all/FilterPanel.js:57 msgid "Labels" -msgstr "Ознаке" +msgstr "Натписи" #: deluge/ui/common.py:34 deluge/ui/gtkui/filtertreeview.py:130 #: deluge/ui/web/js/deluge-all/UI.js:40 msgid "All" -msgstr "Све" +msgstr "Сви" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:411 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:455 #: deluge/ui/common.py:35 deluge/ui/web/js/deluge-all/UI.js:41 msgid "Active" -msgstr "" +msgstr "Покренут" #: deluge/ui/gtkui/filtertreeview.py:132 deluge/ui/gtkui/filtertreeview.py:136 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:7 @@ -2582,7 +2635,7 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:45 msgid "Remove the selected torrent?" -msgstr "Уклони означени торент?" +msgstr "Да уклоним изабрани торент?" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:57 msgid "If you remove the data, it will be lost permanently." @@ -2601,11 +2654,11 @@ #: deluge/ui/web/js/deluge-all/Menus.js:224 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:332 msgid "Edit Trackers" -msgstr "Уреди пратиоце" +msgstr "Уредите пратиоце" #: deluge/ui/gtkui/glade/edit_trackers.glade:47 msgid "Edit Trackers" -msgstr "Уреди пратиоце" +msgstr "Уредите пратиоце" #: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:1 #: deluge/ui/web/js/deluge-all/AddTrackerWindow.js:40 @@ -2614,7 +2667,7 @@ #: deluge/ui/gtkui/glade/edit_trackers.glade:260 msgid "Add Trackers" -msgstr "Додај пратиоце" +msgstr "Додајте пратиоце" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:4 #: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:3 @@ -2629,7 +2682,7 @@ #: deluge/ui/gtkui/glade/edit_trackers.glade:416 msgid "Edit Tracker" -msgstr "Уреди пратиоца" +msgstr "Уредите пратиоца" #: deluge/ui/gtkui/glade/edit_trackers.edit.ui.h:2 #: deluge/ui/web/js/deluge-all/EditTrackerWindow.js:66 @@ -2639,12 +2692,12 @@ #: deluge/ui/gtkui/glade/tray_menu.ui.h:1 msgid "_Show Deluge" -msgstr "_Прикажи Deluge" +msgstr "Прикажи _Делуге" #: deluge/ui/gtkui/glade/main_window.ui.h:2 #: deluge/ui/gtkui/glade/tray_menu.ui.h:2 msgid "_Add Torrent" -msgstr "Дод_ај торент" +msgstr "_Додај торент" #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:2 msgid "_Pause All" @@ -2657,7 +2710,7 @@ #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:1 #: deluge/ui/gtkui/glade/tray_menu.ui.h:5 msgid "_Download Speed Limit" -msgstr "Ограничење брзине п_реузимања" +msgstr "Ограничење брзине _преузимања" #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:2 #: deluge/ui/gtkui/glade/tray_menu.ui.h:6 @@ -2666,27 +2719,27 @@ #: deluge/ui/gtkui/glade/tray_menu.ui.h:7 msgid "Quit & Shutdown Daemon" -msgstr "Изађи и угаси демона" +msgstr "Изађи и угаси услужника" #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:1 msgid "_Select All" -msgstr "Означи _све" +msgstr "Изабери _све" #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:4 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:4 msgid "Resume selected torrents." -msgstr "Настави означене торенте." +msgstr "Наставите са изабраним торентима." #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:3 msgid "Resu_me All" -msgstr "Наста_ви све" +msgstr "_Настави све" #: deluge/ui/gtkui/glade/main_window.ui.h:38 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:13 #: deluge/ui/web/js/deluge-all/Toolbar.js:94 #: deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js:47 msgid "Preferences" -msgstr "Подешавања" +msgstr "Поставке" #: deluge/ui/gtkui/glade/preferences_dialog.glade:76 msgid "Downloads" @@ -2694,7 +2747,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:188 msgid "Auto add .torrents from:" -msgstr "Аутоматски додај .торенте из:" +msgstr "Сам додај „.торенте“ из:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:48 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:69 @@ -2705,17 +2758,19 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:45 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:85 msgid "Copy of .torrent files to:" -msgstr "Копирај .торент датотеке у:" +msgstr "Умножи „.торент“ датотеке у:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:334 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:46 msgid "Delete copy of torrent file on remove" -msgstr "" +msgstr "Обриши умножак датотеке торента при уклањању" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:47 msgid "" "Delete the copy of the torrent file created when the torrent is removed" msgstr "" +"Обришите умножак датотеке торента која је направљена приликом уклањања " +"торента" #: deluge/ui/gtkui/glade/preferences_dialog.glade:339 msgid "Folders" @@ -2723,42 +2778,42 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:372 msgid "Use Full Allocation" -msgstr "Користи пуну алокацију" +msgstr "Користи пуну доделу" #: deluge/ui/gtkui/glade/preferences_dialog.glade:377 msgid "" "Full allocation preallocates all of the space that is needed for the torrent " "and prevents disk fragmentation" msgstr "" -"Пуна алокација унапред одваја простор који је потребан за торент и спречава " -"фрагментацију диска" +"Потпуна додела унапред додељује простор који је потребан за преузимање " +"торента и спречава распарчавање диска" #: deluge/ui/gtkui/glade/preferences_dialog.glade:389 msgid "Use Compact Allocation" -msgstr "Користи компактну алокацију" +msgstr "Користи збијену доделу" #: deluge/ui/gtkui/glade/preferences_dialog.glade:394 msgid "Compact allocation only allocates space as needed" -msgstr "Компактна алокација одваја простор само кад затреба" +msgstr "Збијена додела одваја простор само кад затреба" #: deluge/ui/gtkui/glade/preferences_dialog.glade:411 #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:544 msgid "Allocation" -msgstr "Алокација" +msgstr "Додела" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:50 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:106 msgid "Prioritize first and last pieces of torrent" -msgstr "Стави приоритет на почетне и завршне делове торента" +msgstr "Дај првенство првом и последњем делићу торента" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" -msgstr "Стави приоритет на прве и задње делове датотека у торенту" +msgstr "Дајте првенство првом и последњем делићу датотека у торенту" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:59 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:118 msgid "Add torrents in Paused state" -msgstr "" +msgstr "Додај торенте у паузираном стању" #: deluge/ui/gtkui/glade/preferences_dialog.glade:530 msgid "Network" @@ -2767,67 +2822,71 @@ #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:86 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:141 msgid "Use Random Ports" -msgstr "Користи насумичне портове" +msgstr "Користи насумичне прикључнике" #: deluge/ui/gtkui/glade/preferences_dialog.glade:574 msgid "Deluge will automatically choose a different port to use every time." -msgstr "Deluge ће аутоматски ваки пут изабрати различит прикључак." +msgstr "Делуге ће сваки пут сам изабрати други прикључник." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:106 msgid "Active Port:" -msgstr "Активан порт:" +msgstr "Радни прикључник:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:103 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:117 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:172 msgid "To:" -msgstr "За:" +msgstr "До:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:107 msgid "Test Active Port" -msgstr "Провери активан порт" +msgstr "Провери радни прикључник" #: deluge/ui/gtkui/glade/preferences_dialog.glade:732 msgid "Incoming Ports" -msgstr "Долазни портови" +msgstr "Прикључници долазног" #: deluge/ui/gtkui/glade/preferences_dialog.glade:849 msgid "Outgoing Ports" -msgstr "Одлазни портови" +msgstr "Прикључници одлазног" #: deluge/ui/gtkui/glade/preferences_dialog.glade:882 msgid "" "Enter the IP address of the interface to listen for incoming bittorrent " "connections on. Leave this empty if you want to use the default." msgstr "" +"Упишите ИП адресу сучеља за ослушкивање долазних веза битторента. Оставите " +"празним ако желите да користите основно." #: deluge/ui/gtkui/glade/preferences_dialog.glade:903 msgid "Interface" -msgstr "" +msgstr "Сучеље" #: deluge/ui/gtkui/glade/preferences_dialog.glade:938 msgid "" "The TOS byte set in the IP header of every packet sent to peers (including " "web seeds). Expects a Hex value." msgstr "" +"ТОС бајт подешен у ИП заглављу сваког пакета послатог парњацима (укључујући " +"веб сејаче). Очекује се хексадецимална вредност." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:129 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:247 msgid "Peer TOS Byte:" -msgstr "" +msgstr "ТОС бајт парњака:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:973 msgid "TOS" -msgstr "" +msgstr "ТОС" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:115 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:198 msgid "UPnP" -msgstr "UPnP" +msgstr "УПнП" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:116 msgid "Universal Plug and Play" -msgstr "" +msgstr "Универзално прикључивање и пуштање" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:117 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:204 @@ -2836,25 +2895,25 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:118 msgid "NAT Port Mapping Protocol" -msgstr "НАТ протокол за мапирање портова" +msgstr "НАТ протокол мапирања прикључника" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:119 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:211 msgid "Peer Exchange" -msgstr "Размена садруга" +msgstr "Размена парњака" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:123 #: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:218 msgid "LSD" -msgstr "" +msgstr "ЛСД" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:124 msgid "Local Service Discovery finds local peers on your network." -msgstr "" +msgstr "Месно откривање услуге налази месне парњаке на вашој мрежи." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:126 msgid "Distributed hash table may improve the amount of active connections." -msgstr "Расподељена хеш таблица може побољшати број активних конекција." +msgstr "Расподељена хеш табела може побољшати број радних веза." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1097 msgid "Network Extras" @@ -2862,7 +2921,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1135 msgid "Inbound:" -msgstr "Долазни:" +msgstr "Пријема:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:113 #: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:93 @@ -2876,8 +2935,8 @@ "Enabled\n" "Disabled" msgstr "" -"Захтевано\n" -"Омогућено\n" +"Приморано\n" +"Укључено\n" "Искључено" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1176 @@ -2892,11 +2951,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1203 msgid "Outbound:" -msgstr "Одлазни:" +msgstr "Слања:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1230 msgid "Encrypt entire stream" -msgstr "Шифрирај сав ток" +msgstr "Шифруј читав ток" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1255 msgid "Encryption" @@ -2916,41 +2975,41 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:68 msgid "The maximum upload speed for all torrents. Set -1 for unlimited." -msgstr "" -"Максимална брзина слања за све торенте. Вредност -1 значи неограничено." +msgstr "Највећа брзина слања за све торенте. Вредност -1 значи неограничено." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:92 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:177 msgid "Maximum Upload Speed (KiB/s):" -msgstr "Максимална брзина слања (KiB/s):" +msgstr "Највећа брзина слања (KiB/s):" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:70 msgid "The maximum number of connections allowed. Set -1 for unlimited." -msgstr "Максимални дозвољени број веза. Вредност -1 значи неограничено." +msgstr "Највећи дозвољени број веза. Вредност -1 значи неограничено." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:68 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:153 msgid "Maximum Connections:" -msgstr "Максимални број веза:" +msgstr "Највећи број веза:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:72 msgid "The maximum upload slots for all torrents. Set -1 for unlimited." msgstr "" -"Максималан број слотова за слање за све торенте. Ставите -1 за неограничено." +"Највећи број утичница за слање за све торенте. Вредност -1 значи " +"неограничено." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:161 msgid "Maximum Upload Slots:" -msgstr "Највише слотова за слање:" +msgstr "Највише утичница за слање:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:74 msgid "The maximum download speed for all torrents. Set -1 for unlimited." msgstr "" -"Максимална брзина преузимања за све торенте. Вредност -1 значи неограничено." +"Највећа брзина преузимања за све торенте. Вредност -1 значи неограничено." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:84 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:169 msgid "Maximum Download Speed (KiB/s):" -msgstr "Максимална брзина преузимања (KiB/s):" +msgstr "Највећа брзина преузимања (KiB/s):" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:77 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:128 @@ -2960,34 +3019,36 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:78 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:135 msgid "Rate limit IP overhead" -msgstr "" +msgstr "ИП преоптерећење ограничења протока" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:79 msgid "" "If checked, the estimated TCP/IP overhead is drained from the rate limiters, " "to avoid exceeding the limits with the total traffic" msgstr "" +"Ако је изабрано, процењено ТЦП/ИП преоптерећење се одвлачи из ограничавача " +"протока, како се ограничење не би превазишло укупним саобраћајем" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1589 msgid "Global Bandwidth Usage" -msgstr "Глобално заузеће протока" +msgstr "Опште заузеће протока" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:81 msgid "The maximum upload slots per torrent. Set -1 for unlimited." msgstr "" -"Највећи број слотова за слање по торенту. За неограничено поставите на -1." +"Највећи број утичница за слање по торенту. Вредност -1 значи неограничено." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:82 msgid "The maximum number of connections per torrent. Set -1 for unlimited." -msgstr "Највећи број веза по торенту. За неограничено поставите на -1." +msgstr "Највећи број веза по торенту. Вредност -1 значи неограничено." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1713 msgid "The maximum download speed per torrent. Set -1 for unlimited." -msgstr "" +msgstr "Највећа брзина преузимања за торент. Вредност -1 значи неограничено." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 msgid "The maximum upload speed per torrent. Set -1 for unlimited." -msgstr "" +msgstr "Највећа брзина слања за торент. Вредност -1 значи неограничено." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" @@ -2999,7 +3060,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1845 msgid "Enable" -msgstr "Омогући" +msgstr "Укључи" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1850 msgid "" @@ -3008,23 +3069,23 @@ "advantage of running Deluge as a daemon. You need to restart Deluge for this " "setting to take effect." msgstr "" -"Класични мод ће сакрити већину функционалности демона и учиниће да Deluge " -"одаје утисак једне апликације. Користите ово ако не желите да искористите " -"предности покретања Deluge-а као демона. Неопходно је да поново покренете " -"Deluge да би ово подешавање ступи на снагу." +"Класични режим ће сакрити већину функционалности услужника и учиниће да " +"Делуге изгледа као један програм. Користите ово ако не желите да искористите " +"предности покретања Делугеа као услужника. Треба поново да покренете Делуге " +"да ово подешавање ступи на снагу." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1860 msgid "Classic Mode" -msgstr "Класични мод" +msgstr "Класични режим" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:19 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:64 msgid "Show session speed in titlebar" -msgstr "Прикажи брзину сесије у насловној линији" +msgstr "Прикажи брзину сесије на траци наслова" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 msgid "Focus window when adding torrent" -msgstr "" +msgstr "Прозор у први план приликом додавања торента" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1923 msgid "Main Window" @@ -3032,39 +3093,39 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:63 msgid "Always show" -msgstr "Увек показуј" +msgstr "Увек прикажи" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:64 msgid "Bring the dialog to focus" -msgstr "Доведи дијалог у фокус" +msgstr "Принеси прозорче у први план" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1993 msgid "Add Torrents Dialog" -msgstr "Дијалог за додавање торената" +msgstr "Прозорче додавања торената" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:32 msgid "Enable system tray icon" -msgstr "Омогући икону у обавештајној зони" +msgstr "Укључи иконицу у фиоци система" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:35 msgid "Minimize to tray on close" -msgstr "Смањуј у обавештајну зону панела при затварању" +msgstr "Смањи у фиоку при затварању" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:36 msgid "Start in tray" -msgstr "Покрени у обавештајној зони" +msgstr "Покрени у фиоци" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2082 msgid "Enable Application Indicator" -msgstr "" +msgstr "Укључи указивач програма" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:37 msgid "Password protect system tray" -msgstr "Заштити лозинком обавештајну зону" +msgstr "Заштити лозинком фиоку система" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2170 msgid "System Tray" -msgstr "Обавештајна зона" +msgstr "Фиока система" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2228 msgid "Other" @@ -3072,14 +3133,14 @@ #: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:66 msgid "Be alerted about new releases" -msgstr "Будите обавештени о новим верзијама" +msgstr "Обавести ме о новим издањима" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2273 msgid "" "Deluge will check our servers and will tell you if a newer version has been " "released" msgstr "" -"Deluge ће проверити наше сервере и јавити Вам ако је објављена нова верзија" +"Делуге ће проверити наше сервере и јавити вам ако је објављено ново издање" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2292 msgid "Updates" @@ -3090,49 +3151,51 @@ "Help us improve Deluge by sending us your Python version, PyGTK version, OS " "and processor types. Absolutely no other information is sent." msgstr "" -"Помозите нам да унапредимо Deluge тако што ћете нам послати верзије Python-" -"а, PyGTK-а и оперативног система и тип процесора. Никакви други подаци неће " -"бити послати." +"Помозите нам да унапредимо Делуге тако што ћете нам послати издање Питона, " +"„PyGTK“-а и оперативног система и тип процесора. Никакви други подаци нам " +"нису потребни." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:170 #: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:90 msgid "Yes, please send anonymous statistics" -msgstr "Да, молим те шаљи анонимне статистике." +msgstr "Да, пошаљи анонимне резултате" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2367 msgid "System Information" -msgstr "Системске информације" +msgstr "Подаци о систему" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:172 msgid "Location:" -msgstr "" +msgstr "Место:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:173 msgid "" "If Deluge cannot find the database file at this location it will fallback to " "using DNS to resolve the peer's country." msgstr "" +"Ако Делуге не може да нађе датотеку базе података на овом месту пребациће се " +"на коришћење ДНС-а како би дознао државу парњака." #: deluge/ui/gtkui/glade/preferences_dialog.glade:2446 msgid "GeoIP Database" -msgstr "" +msgstr "База података ГеоИП-а" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:175 msgid "Associate Magnet links with Deluge" -msgstr "" +msgstr "Придружи магнетне везе Делугеу" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2559 msgid "Daemon" -msgstr "Демон" +msgstr "Услужник" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:176 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:57 msgid "Daemon port:" -msgstr "Порт демона:" +msgstr "Прикључник услужника:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2639 msgid "Port" -msgstr "Порт" +msgstr "Прикључник" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:178 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:78 @@ -3146,7 +3209,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:180 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:94 msgid "Periodically check the website for new releases" -msgstr "Периодично проверавај сајт за нове верзије" +msgstr "Повремено провери има ли на сајту новог издања" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2725 msgid "Other" @@ -3167,7 +3230,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:89 msgid "Total active:" -msgstr "Укупно активно:" +msgstr "Укупно активних:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:90 msgid "Total active downloading:" @@ -3211,13 +3274,13 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:3256 msgid "Proxy" -msgstr "" +msgstr "Посредник" #: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:66 #: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:75 #: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:49 msgid "Host:" -msgstr "Хост:" +msgstr "Домаћин:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3403 #: deluge/ui/gtkui/glade/preferences_dialog.glade:3590 @@ -3231,20 +3294,20 @@ "HTTP\n" "HTTP W/ Auth" msgstr "" -"Ниједно\n" -"Socksv4\n" -"Socksv5\n" -"Socksv5 са ауторизацијом\n" -"HTTP\n" -"HTTP са ауторизацијом" +"Ништа\n" +"Сокси4\n" +"Сокси5\n" +"Сокси5 са овлашћењем\n" +"ХТТП\n" +"ХТТП са овлашћењем" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3450 msgid "Peer" -msgstr "" +msgstr "Парњак" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3637 msgid "Web Seed" -msgstr "" +msgstr "Веб сејање" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3824 msgid "Tracker" @@ -3252,46 +3315,49 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:4015 msgid "DHT" -msgstr "DHT" +msgstr "ДХТ" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4071 msgid "Cache" -msgstr "" +msgstr "Остава" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:144 msgid "Cache Size (16 KiB blocks):" -msgstr "" +msgstr "Величина оставе (блокови од 16 KiB):" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:145 msgid "" "The number of seconds from the last cached write to a piece in the write " "cache, to when it's forcefully flushed to disk. Default is 60 seconds." msgstr "" +"Број секунди од последњег причуваног писања на комаду у остави писања, до " +"тренутка када је насилно изручен на диск. Основно је 60 секунди." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:146 #: deluge/ui/web/js/deluge-all/preferences/CachePage.js:70 msgid "Cache Expiry (seconds):" -msgstr "" +msgstr "Остава се празни (у секундама):" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:148 msgid "" "The total number of 16 KiB blocks written to disk since this session was " "started." msgstr "" +"Укупан број блокова од 16 KiB записаних на диск од почетка ове сесије." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:149 msgid "Blocks Written:" -msgstr "" +msgstr "Записаних блокова:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:150 msgid "" "The total number of write operations performed since this session was " "started." -msgstr "" +msgstr "Укупан број обављених радњи писања од почетка ове сесије." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:151 msgid "Writes:" -msgstr "" +msgstr "Писања:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:152 msgid "" @@ -3299,84 +3365,91 @@ "of saved write operations per total write operations, i.e. a kind of cache " "hit ratio for the write cache." msgstr "" +"Однос (записаних_блокова — писања) / записани_блокови представљају број " +"сачуваних операција писања од укупних операција писања, односно неку врсту " +"односа посете остави за оставу писања." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:153 msgid "Write Cache Hit Ratio:" -msgstr "" +msgstr "Однос посете остави писања:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4300 msgid "Write" -msgstr "" +msgstr "Писање" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:155 msgid "" "The number of blocks that were requested from the bittorrent engine (from " "peers), that were served from disk or cache." msgstr "" +"Број блокова који су затражени од погона битторента (од парњака), који су " +"послужени са диска или из оставе." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:156 msgid "Blocks Read:" -msgstr "" +msgstr "Читање блокова:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:157 msgid "The number of blocks that were served from cache." -msgstr "" +msgstr "Број блокова који су послужени из оставе." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:158 msgid "Blocks Read Hit:" -msgstr "" +msgstr "Покушај читања блокова:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:159 msgid "The cache hit ratio for the read cache." -msgstr "" +msgstr "Однос посете остави за оставу читања." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:160 msgid "Read Cache Hit Ratio:" -msgstr "" +msgstr "Однос посете остави читања:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:161 msgid "" "The total number of read operations performed since this session was started." -msgstr "" +msgstr "Укупан број обављених радњи читања од почетка ове сесије." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:162 msgid "Reads:" -msgstr "" +msgstr "Читања:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4434 msgid "Read" -msgstr "" +msgstr "Читање" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:164 msgid "" "The number of 16 KiB blocks currently in the disk cache. This includes both " "read and write cache." msgstr "" +"Број 16 KiB-них блокова тренутно у остави диска. Ту спадају и остава читања " +"и писања." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:165 msgid "Cache Size:" -msgstr "" +msgstr "Величина оставе:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:166 msgid "Read Cache Size:" -msgstr "" +msgstr "Величина оставе читања:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4515 msgid "Size" -msgstr "" +msgstr "Величина" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4558 msgid "Status" -msgstr "" +msgstr "Стање" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4619 msgid "Plugins" -msgstr "Додаци" +msgstr "Прикључци" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:184 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:49 msgid "Version:" -msgstr "Верзија:" +msgstr "Издање:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:185 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:6 @@ -3387,24 +3460,24 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:186 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:51 msgid "Homepage:" -msgstr "Страна пројекта:" +msgstr "Матична страница:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:187 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:50 msgid "Author Email:" -msgstr "" +msgstr "Ел. пошта аутора:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4872 msgid "_Install Plugin" -msgstr "_Инсталирај додатак" +msgstr "_Инсталирај прикључак" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4915 msgid "_Rescan Plugins" -msgstr "П_регледај додатке" +msgstr "_Прегледај прикључке" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4968 msgid "_Find More Plugins" -msgstr "" +msgstr "_Нађи још прикључака" #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:1 msgid "Queued Torrents" @@ -3416,11 +3489,11 @@ #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:3 msgid "Automatically add torrents on connect" -msgstr "Аутоматски додај торенте при прикључењу" +msgstr "Сам додај торенте приликом повезивања" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:1 msgid "Create Torrent" -msgstr "Направи торент" +msgstr "Направите торент" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:34 msgid "Create Torrent" @@ -3434,11 +3507,11 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:3 msgid "Fol_der" -msgstr "Фас_цикла" +msgstr "_Фасцикла" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:4 msgid "_Remote Path" -msgstr "Уда_љена путања" +msgstr "_Удаљена путања" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:230 msgid "Files" @@ -3447,17 +3520,17 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:22 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:7 msgid "Comments:" -msgstr "Коментари:" +msgstr "Напомене:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:188 #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:8 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:135 msgid "Info" -msgstr "" +msgstr "Подаци" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:10 msgid "Webseeds" -msgstr "" +msgstr "Веб сејачи" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:11 msgid "Piece Size:" @@ -3476,6 +3549,16 @@ "8 MiB\n" "16 MiB\n" msgstr "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1 MiB\n" +"2 MiB\n" +"4 MiB\n" +"8 MiB\n" +"16 MiB\n" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:12 msgid "Set Private Flag" @@ -3505,11 +3588,11 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:1 msgid "Save .torrent as" -msgstr "Сними .torrent као" +msgstr "Сачувај „.torrent“ као" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:913 msgid "Save .torrent file" -msgstr "Сними .torrent датотеку" +msgstr "Сачувај „.torrent“ датотеку" #: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:1 msgid "Add Host" @@ -3528,35 +3611,35 @@ #: deluge/ui/gtkui/glade/connection_manager.ui.h:2 msgid "_Start local daemon" -msgstr "Пок_рени локалног демона" +msgstr "_Покрени месног услужника" #: deluge/ui/gtkui/glade/connection_manager.ui.h:3 msgid "Automatically connect to selected host on start-up" -msgstr "Аутоматски се повежи на одабрани хост при покретању" +msgstr "Сам се повежи са изабраним домаћином при покретању" #: deluge/ui/gtkui/glade/connection_manager.ui.h:4 msgid "Automatically start localhost if needed" -msgstr "Аутоматски покрени localhost ако је потребно" +msgstr "Сам покрени месног домаћина ако је потребно" #: deluge/ui/gtkui/glade/connection_manager.ui.h:5 msgid "Do not show this dialog on start-up" -msgstr "Не показуј овај дијалог при покретању" +msgstr "Не приказуј ово прозорче при покретању" #: deluge/ui/gtkui/glade/main_window.ui.h:3 msgid "_Create Torrent" -msgstr "" +msgstr "_Направи торент" #: deluge/ui/gtkui/glade/main_window.ui.h:4 msgid "Quit & _Shutdown Daemon" -msgstr "" +msgstr "Изађи и _угаси услужника" #: deluge/ui/gtkui/glade/main_window.ui.h:5 msgid "_Edit" -msgstr "Ур_еди" +msgstr "_Уреди" #: deluge/ui/gtkui/glade/main_window.ui.h:6 msgid "_Connection Manager" -msgstr "" +msgstr "Управник _веза" #: deluge/ui/gtkui/glade/main_window.ui.h:7 msgid "_Torrent" @@ -3568,19 +3651,19 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:9 msgid "_Toolbar" -msgstr "Палета _алата" +msgstr "Трака _алата" #: deluge/ui/gtkui/glade/main_window.ui.h:10 msgid "_Sidebar" -msgstr "" +msgstr "_Бочна површ" #: deluge/ui/gtkui/glade/main_window.ui.h:11 msgid "Status_bar" -msgstr "" +msgstr "Трака _стања" #: deluge/ui/gtkui/glade/main_window.ui.h:12 msgid "T_abs" -msgstr "" +msgstr "_Језичци" #: deluge/ui/gtkui/glade/main_window.ui.h:13 msgid "_Columns" @@ -3588,27 +3671,27 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:15 msgid "S_idebar" -msgstr "" +msgstr "Бо_чна површ" #: deluge/ui/gtkui/glade/main_window.ui.h:16 msgid "Show _Zero Hits" -msgstr "" +msgstr "Прикажи _нулте резултате" #: deluge/ui/gtkui/glade/main_window.ui.h:17 msgid "Show _Trackers" -msgstr "" +msgstr "Прикажи _пратиоце" #: deluge/ui/gtkui/glade/main_window.ui.h:18 msgid "_Help" -msgstr "П_омоћ" +msgstr "По_моћ" #: deluge/ui/gtkui/glade/main_window.ui.h:19 msgid "_Homepage" -msgstr "" +msgstr "_Матична страница" #: deluge/ui/gtkui/glade/main_window.ui.h:20 msgid "_FAQ" -msgstr "" +msgstr "_ЧПП" #: deluge/ui/gtkui/glade/main_window.ui.h:21 msgid "Frequently Asked Questions" @@ -3616,11 +3699,11 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:22 msgid "_Community" -msgstr "" +msgstr "_Заједница" #: deluge/ui/gtkui/glade/main_window.ui.h:23 msgid "Add torrent" -msgstr "Додај торент" +msgstr "Додајте торент" #: deluge/ui/gtkui/glade/main_window.ui.h:24 msgid "Add Torrent" @@ -3628,7 +3711,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:25 msgid "Remove torrent" -msgstr "Уклони торент" +msgstr "Уклоните торент" #: deluge/ui/gtkui/glade/main_window.ui.h:26 #: deluge/ui/gtkui/glade/remove_torrent_dialog.ui.h:1 @@ -3636,11 +3719,11 @@ #: deluge/ui/web/js/deluge-all/RemoveWindow.js:39 #: deluge/ui/web/js/deluge-all/RemoveWindow.js:57 msgid "Remove Torrent" -msgstr "Уклони торент" +msgstr "Уклоните торент" #: deluge/ui/gtkui/glade/main_window.ui.h:30 msgid "Pause the selected torrents" -msgstr "Паузирај означене торенте" +msgstr "Паузирајте изабране торенте" #: deluge/ui/gtkui/glade/main_window.ui.h:31 #: deluge/ui/web/js/deluge-all/Menus.js:88 @@ -3650,7 +3733,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:32 msgid "Resume the selected torrents" -msgstr "Настави означене торенте" +msgstr "Наставите са изабраним торентима" #: deluge/ui/gtkui/glade/main_window.ui.h:33 #: deluge/ui/web/js/deluge-all/Menus.js:94 @@ -3660,7 +3743,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:34 msgid "Queue Torrent Up" -msgstr "Промовиши торент у реду чекања" +msgstr "Померите на горе торент у реду чекања" #: deluge/ui/gtkui/glade/main_window.ui.h:35 msgid "Queue Up" @@ -3668,7 +3751,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:36 msgid "Queue Torrent Down" -msgstr "Деградирај торент у реду чекања" +msgstr "Померите на доле торент у реду чекања" #: deluge/ui/gtkui/glade/main_window.ui.h:37 msgid "Queue Down" @@ -3680,7 +3763,7 @@ #: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:3 msgid "_Do Not Download" -msgstr "Не п_реузимај" +msgstr "Не _преузимај" #: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:4 msgid "_Normal Priority" @@ -3692,23 +3775,23 @@ #: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:6 msgid "Hi_ghest Priority" -msgstr "Најви_ши приоритет" +msgstr "Највиши _приоритет" #: deluge/ui/gtkui/glade/main_window.glade:718 msgid "Auto Managed:" -msgstr "" +msgstr "Само-управљан:" #: deluge/ui/gtkui/glade/main_window.glade:759 msgid "Seed Rank:" -msgstr "" +msgstr "Пласман сејања:" #: deluge/ui/gtkui/glade/main_window.glade:774 msgid "Seeding Time:" -msgstr "" +msgstr "Време сејања:" #: deluge/ui/gtkui/glade/main_window.glade:800 msgid "Active Time:" -msgstr "" +msgstr "Време деловања:" #: deluge/ui/gtkui/glade/main_window.glade:857 msgid "Tracker Status:" @@ -3720,15 +3803,15 @@ #: deluge/ui/gtkui/glade/main_window.glade:941 msgid "Peers:" -msgstr "Парњаци:" +msgstr "Број парњака:" #: deluge/ui/gtkui/glade/main_window.glade:967 msgid "Seeders:" -msgstr "Сејачи:" +msgstr "Број сејача:" #: deluge/ui/gtkui/glade/main_window.glade:985 msgid "Pieces:" -msgstr "Делова:" +msgstr "Број делова:" #: deluge/ui/gtkui/glade/main_window.glade:1007 msgid "ETA:" @@ -3736,11 +3819,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:1029 msgid "Up Speed:" -msgstr "" +msgstr "Брзина слања:" #: deluge/ui/gtkui/glade/main_window.glade:1051 msgid "Down Speed:" -msgstr "" +msgstr "Брзина пријема:" #: deluge/ui/gtkui/glade/main_window.glade:1070 msgid "Next Announce:" @@ -3752,27 +3835,27 @@ #: deluge/ui/gtkui/glade/main_window.glade:1108 msgid "Uploaded:" -msgstr "Послато:" +msgstr "Послато је:" #: deluge/ui/gtkui/glade/main_window.glade:1127 msgid "Downloaded:" -msgstr "Преузето:" +msgstr "Преузето је:" #: deluge/ui/gtkui/glade/main_window.glade:1188 msgid "Date Added:" -msgstr "Додато дана:" +msgstr "Датум додавања:" #: deluge/ui/gtkui/glade/main_window.glade:1307 msgid "Comments:" -msgstr "" +msgstr "Напомене:" #: deluge/ui/gtkui/glade/main_window.glade:1336 msgid "# of files:" -msgstr "# датотека:" +msgstr "Бр. датотека:" #: deluge/ui/gtkui/glade/main_window.glade:1368 msgid "Hash:" -msgstr "" +msgstr "Хеш:" #: deluge/ui/gtkui/glade/main_window.glade:1398 msgid "Tracker:" @@ -3780,7 +3863,7 @@ #: deluge/ui/gtkui/glade/main_window.glade:1418 msgid "Total Size:" -msgstr "Укупна величина:" +msgstr "Величина:" #: deluge/ui/gtkui/glade/main_window.glade:1456 msgid "Name:" @@ -3792,47 +3875,46 @@ #: deluge/ui/gtkui/glade/main_window.glade:1510 msgid "Status:" -msgstr "Статус:" +msgstr "Стање:" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:40 msgid "Move completed:" -msgstr "" +msgstr "Премести завршене:" #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:300 msgid "Private" -msgstr "" +msgstr "Приватно" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:38 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:308 msgid "Prioritize First/Last" -msgstr "Приоритет на почетне/завршне" +msgstr "Првенство првом/последњем" #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:48 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:8 msgid "_Edit Trackers" -msgstr "Ур_еди пратиоце" +msgstr "_Уреди пратиоце" #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "Уклони торент?" +msgstr "Да уклоним торент?" #: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" -msgstr "" -"Јесте ли сигурни да желите да уклоните означени торент?" +msgstr "Да ли сигурно желите да уклоните изабрани торент?" #: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" -msgstr "Придружени .torrent ће бити обрисан!" +msgstr "Придружени „.torrent“ биће обрисан!" #: deluge/ui/gtkui/glade/main_window.glade:2408 msgid "The downloaded data will be deleted!" -msgstr "Преузети подаци ће бити брисани!" +msgstr "Преузети подаци биће обрисани!" #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:2 msgid "Remove Selected Torrent" -msgstr "Уклони означени торент" +msgstr "Уклони изабрани торент" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:1 msgid "New Release" @@ -3844,31 +3926,31 @@ #: deluge/ui/gtkui/glade/main_window.glade:2560 msgid "Available Version:" -msgstr "Доступна верзија:" +msgstr "Доступно издање:" #: deluge/ui/gtkui/glade/main_window.glade:2583 msgid "Current Version:" -msgstr "Тренутна верзија:" +msgstr "Тренутно издање:" #: deluge/ui/gtkui/glade/main_window.glade:2594 msgid "Server Version" -msgstr "" +msgstr "Издање сервера:" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:7 msgid "Do not show this dialog in the future" -msgstr "Не приказуј овај дијалог убудуће" +msgstr "Не приказуј више ово прозорче" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:2 msgid "_Goto Website" -msgstr "" +msgstr "_Иди на веб страницу" #: deluge/ui/gtkui/glade/main_window.tabs.menu_peer.ui.h:1 msgid "_Add Peer" -msgstr "" +msgstr "_Додај парњака" #: deluge/ui/gtkui/glade/main_window.tabs.menu_peer.ui.h:2 msgid "Add a peer by its IP" -msgstr "" +msgstr "Додај парњака према његовој ИП" #: deluge/ui/gtkui/glade/torrent_menu.glade:11 msgid "_Open Folder" @@ -3876,15 +3958,15 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:2 msgid "_Pause" -msgstr "" +msgstr "_Паузирај" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:3 msgid "Resu_me" -msgstr "Наста_ви" +msgstr "_Настави" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:5 msgid "Opt_ions" -msgstr "Опц_ије" +msgstr "_Опције" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:6 msgid "_Queue" @@ -3896,27 +3978,27 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:9 msgid "_Remove Torrent" -msgstr "Уклони то_рент" +msgstr "Уклони _торент" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:10 msgid "_Force Re-check" -msgstr "" +msgstr "_Приморај поновну проверу" #: deluge/ui/gtkui/glade/torrent_menu.glade:191 msgid "Move _Storage" -msgstr "Премести _складиште" +msgstr "_Складиште премештања" #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:3 msgid "_Connection Limit" -msgstr "" +msgstr "Ограничење _везе" #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:4 msgid "Upload _Slot Limit" -msgstr "Ограничење места за слање" +msgstr "Ограничење _утичнице за слање" #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:6 msgid "_Auto Managed" -msgstr "" +msgstr "_Самостално управљан" #: deluge/ui/gtkui/glade/move_storage_dialog.glade:9 msgid "Move Storage" @@ -3933,19 +4015,19 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:1 #: deluge/ui/web/js/deluge-all/add/AddWindow.js:37 msgid "Add Torrents" -msgstr "Додај торенте" +msgstr "Додајте торенте" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:3 msgid "_URL" -msgstr "_URL" +msgstr "_Адреса" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:4 msgid "Info_hash" -msgstr "Info_hash" +msgstr "Хеш _података" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:5 msgid "_Remove" -msgstr "Укл_они" +msgstr "_Уклони" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:271 msgid "Torrents" @@ -3953,11 +4035,11 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:7 msgid "Fi_les" -msgstr "Да_тотеке" +msgstr "_Датотеке" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:469 msgid "Move Completed Location" -msgstr "" +msgstr "Место за премештање завршених" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:506 msgid "Full" @@ -3965,15 +4047,15 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:522 msgid "Compact" -msgstr "Компактно" +msgstr "Збијено" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:597 msgid "Max Down Speed:" -msgstr "Највећа брз. скидања:" +msgstr "Најв. брзина пријема:" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:609 msgid "Max Up Speed:" -msgstr "Највећа брз. слања:" +msgstr "Најв. брзина слања:" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:10 msgid "Add In _Paused State" @@ -3982,11 +4064,11 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:11 #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:137 msgid "Prioritize First/Last Pieces" -msgstr "Ставља приоритет на почетне/завршне делове" +msgstr "Дај првенство првом/последњем делу" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:33 msgid "Revert To Defaults" -msgstr "Врати на подразумевано" +msgstr "Врати на основно" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:32 msgid "Apply To All" @@ -3994,54 +4076,57 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.url.ui.h:1 msgid "Add URL" -msgstr "Додај URL" +msgstr "Додај адресу" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1052 msgid "From URL" -msgstr "Са URL-а" +msgstr "Са адресе" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:1 msgid "Add Infohash" -msgstr "" +msgstr "Додај хеш података" #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1211 msgid "From Infohash" -msgstr "" +msgstr "Из хеша података" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:3 msgid "Infohash:" -msgstr "" +msgstr "Хеш података:" #: deluge/ui/gtkui/glade/other_dialog.ui.h:1 msgid "label" -msgstr "ознака" +msgstr "натпис" #: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:1 msgid "Add Peer" -msgstr "" +msgstr "Додај парњака" #: deluge/ui/gtkui/glade/dgtkpopups.glade:187 msgid "Add Peer" -msgstr "" +msgstr "Додајте парњака" #: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:2 msgid "hostname:port" -msgstr "" +msgstr "домаћин:прикључник" #: deluge/ui/data/share/applications/deluge.desktop.in.h:2 msgid "BitTorrent Client" -msgstr "" +msgstr "Клијент Бит-Торента" #: deluge/ui/data/share/applications/deluge.desktop.in.h:3 msgid "Deluge BitTorrent Client" -msgstr "" +msgstr "Делуге клијент Бит-Торента" #: deluge/ui/data/share/applications/deluge.desktop.in.h:4 msgid "Download and share files over BitTorrent" -msgstr "" - -#~ msgid "Up:" -#~ msgstr "Слањ:" +msgstr "Преузимајте и делите датотеке преко Бит-Торента" #~ msgid "Down:" #~ msgstr "Преуз:" + +#~ msgid "Upload Slots:\t" +#~ msgstr "Утичница слања:\t" + +#~ msgid "Up:" +#~ msgstr "Слање:" diff -Nru deluge-1.3.12/deluge/i18n/sv.po deluge-1.3.13/deluge/i18n/sv.po --- deluge-1.3.12/deluge/i18n/sv.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/sv.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/te.po deluge-1.3.13/deluge/i18n/te.po --- deluge-1.3.12/deluge/i18n/te.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/te.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/th.po deluge-1.3.13/deluge/i18n/th.po --- deluge-1.3.12/deluge/i18n/th.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/th.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/tr.po deluge-1.3.13/deluge/i18n/tr.po --- deluge-1.3.12/deluge/i18n/tr.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/tr.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2015-09-08 23:31+0000\n" -"Last-Translator: Şâkir Aşçı \n" +"PO-Revision-Date: 2016-06-04 20:25+0000\n" +"Last-Translator: Reddet \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -127,7 +127,7 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:178 #, python-format msgid "Finished Torrent \"%(name)s\"" -msgstr "\"%(name)s\" adlı torrent tamamlandı" +msgstr "\"%(name)s\" Adlı Torrent Tamamlandı" #: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:180 #, python-format @@ -2451,7 +2451,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:6 msgid "Torrents" -msgstr "Torentler" +msgstr "Torrentler" #: deluge/ui/gtkui/dialogs.py:170 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:183 @@ -2726,7 +2726,7 @@ #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:4 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:4 msgid "Resume selected torrents." -msgstr "Seçili torentleri sürdür." +msgstr "Seçili torrentleri sürdür" #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:3 msgid "Resu_me All" @@ -2801,11 +2801,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:50 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:106 msgid "Prioritize first and last pieces of torrent" -msgstr "Torentin ilk ve son parçalarına öncelik ver" +msgstr "Torrentin ilk ve son parçalarına öncelik ver" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" -msgstr "Torentteki dosyaların ilk ve son parçalarına öncelik ver" +msgstr "Torrentteki dosyaların ilk ve son parçalarına öncelik ver" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:59 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:118 @@ -2972,7 +2972,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:68 msgid "The maximum upload speed for all torrents. Set -1 for unlimited." -msgstr "Tüm torentler için azami gönderim hızı. Sınırsız için -1 yazınız." +msgstr "Tüm torrentler için azami gönderim hızı. Sınırsız için -1 yazınız." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:92 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:177 @@ -2991,7 +2991,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:72 msgid "The maximum upload slots for all torrents. Set -1 for unlimited." msgstr "" -"Bütün torentler için azami gönderim yuvası. Sınırsız için -1 yazınız." +"Bütün torrentler için azami gönderim yuvası. Sınırsız için -1 yazınız." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:161 msgid "Maximum Upload Slots:" @@ -2999,7 +2999,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:74 msgid "The maximum download speed for all torrents. Set -1 for unlimited." -msgstr "Bütün torentler için azami indirme hızı. Sınırsız için -1 yazınız." +msgstr "Bütün torrentler için azami indirme hızı. Sınırsız için -1 yazınız." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:84 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:169 @@ -3051,7 +3051,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" -msgstr "Bir torrentin Bantgenişliği Kullanımı" +msgstr "Her Torrentin Bantgenişliği Kullanımı" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1812 msgid "Interface" @@ -3099,7 +3099,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1993 msgid "Add Torrents Dialog" -msgstr "Torent İletişimi Ekle" +msgstr "Torrent İletişimi Ekle" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:32 msgid "Enable system tray icon" @@ -3237,7 +3237,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:91 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:110 msgid "Do not count slow torrents" -msgstr "Yavaş torentleri sayma" +msgstr "Yavaş torrentleri sayma" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2994 msgid "Active Torrents" @@ -3264,7 +3264,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:98 msgid "Remove torrent when share ratio reached" -msgstr "Paylaşım oranına ulaşınca torenti sil" +msgstr "Paylaşım oranına ulaşınca torrenti sil" #: deluge/ui/gtkui/glade/preferences_dialog.glade:3192 msgid "Seeding" @@ -3479,15 +3479,15 @@ #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:1 msgid "Queued Torrents" -msgstr "Kuyruktaki Torentler" +msgstr "Kuyruktaki Torrentler" #: deluge/ui/gtkui/glade/queuedtorrents.glade:47 msgid "Add Queued Torrents" -msgstr "Kuyruktaki Torentleri Ekle" +msgstr "Kuyruktaki Torrentleri Ekle" #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:3 msgid "Automatically add torrents on connect" -msgstr "Bağlanıldığında torentleri otomatik ekle" +msgstr "Bağlanıldığında torrentleri otomatik ekle" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:1 msgid "Create Torrent" @@ -3641,7 +3641,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:7 msgid "_Torrent" -msgstr "_Torent" +msgstr "_Torrent" #: deluge/ui/gtkui/glade/main_window.ui.h:8 msgid "_View" @@ -3717,11 +3717,11 @@ #: deluge/ui/web/js/deluge-all/RemoveWindow.js:39 #: deluge/ui/web/js/deluge-all/RemoveWindow.js:57 msgid "Remove Torrent" -msgstr "Torrent Kaldır" +msgstr "Torrenti Kaldır" #: deluge/ui/gtkui/glade/main_window.ui.h:30 msgid "Pause the selected torrents" -msgstr "Seçili torentleri duraklat" +msgstr "Seçili torrentleri duraklat" #: deluge/ui/gtkui/glade/main_window.ui.h:31 #: deluge/ui/web/js/deluge-all/Menus.js:88 @@ -3731,7 +3731,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:32 msgid "Resume the selected torrents" -msgstr "Seçili torentleri sürdür" +msgstr "Seçili torrentleri sürdür" #: deluge/ui/gtkui/glade/main_window.ui.h:33 #: deluge/ui/web/js/deluge-all/Menus.js:94 @@ -3895,12 +3895,13 @@ #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "Torenti Sil?" +msgstr "Torrenti Sil?" #: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" -msgstr "Seçilmiş torenti silmek istediğinize emin misiniz?" +msgstr "" +"Seçilmiş torrenti silmek istediğinize emin misiniz?" #: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" @@ -4013,7 +4014,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:1 #: deluge/ui/web/js/deluge-all/add/AddWindow.js:37 msgid "Add Torrents" -msgstr "Torentleri Ekle" +msgstr "Torrentleri Ekle" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:3 msgid "_URL" @@ -4029,7 +4030,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:271 msgid "Torrents" -msgstr "Torentler" +msgstr "Torrentler" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:7 msgid "Fi_les" diff -Nru deluge-1.3.12/deluge/i18n/uk.po deluge-1.3.13/deluge/i18n/uk.po --- deluge-1.3.12/deluge/i18n/uk.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/uk.po 2016-07-20 14:23:28.000000000 +0000 @@ -8,14 +8,14 @@ "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2015-08-09 13:37+0100\n" -"PO-Revision-Date: 2015-08-09 11:13+0000\n" -"Last-Translator: Cas \n" +"PO-Revision-Date: 2016-05-02 05:11+0000\n" +"Last-Translator: Микола Ткач \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" @@ -143,7 +143,7 @@ msgstr "" "Мета цього листа повідомити, що Deluge закінчив завантаження \"%(name)s\", " "який включає в себе %(num_files)i файлів.\n" -"Щоб припинити отримування повідомлень такого типу просто відключіть " +"Щоб припинити отримування повідомлень такого типу просто відімкніть " "сповіщення по пошті в налаштуваннях Deluge.\n" "\n" "З повагою,\n" @@ -155,7 +155,7 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:164 msgid "Popup notification is not enabled." -msgstr "Спливаючі вікна не включені." +msgstr "Виринаючі вікна не увімкнено." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:166 msgid "pynotify is not installed" @@ -167,11 +167,11 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:176 msgid "Notification popup shown" -msgstr "Показувати спливаюче вікно" +msgstr "Показувати виринаюче вікно" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:180 msgid "Sound notification not enabled" -msgstr "Звук сповіщення не включено" +msgstr "Звук сповіщення не увімкнено" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:182 msgid "pygame is not installed" @@ -188,7 +188,7 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:221 msgid "Finished Torrent" -msgstr "Завантажено Торрент" +msgstr "Завантажено Торент" #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:222 #, python-format @@ -196,7 +196,7 @@ "The torrent \"%(name)s\" including %(num_files)i file(s) has finished " "downloading." msgstr "" -"Завантаження торренту \"%(name)s\", що містить %(num_files)i файл(-и/-ів) " +"Завантаження торенту \"%(name)s\", що містить %(num_files)i файл(-и/-ів) " "завершено." #: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:266 @@ -214,11 +214,11 @@ #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:81 msgid "Tray icon blinks enabled" -msgstr "Увімкнути мерехтіння іконки в системному лотку" +msgstr "Увімкнути мерехтіння піктограми у системній таці" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:93 msgid "Popups enabled" -msgstr "Дозволити спливаючі вікна" +msgstr "Дозволити виринаючі вікна" #: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:108 msgid "Sound enabled" @@ -329,18 +329,18 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:531 #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:41 msgid "Select A Folder" -msgstr "Оберіть папку" +msgstr "Оберіть теку" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:69 msgid "Create torrent name sub-folder" -msgstr "Створити підпапку з назвою торента" +msgstr "Створити підтеку з назвою торента" #: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:73 msgid "" "This option will create a sub-folder using the torrent's name within the " "selected extract folder and put the extracted files there." msgstr "" -"Ця опція, в обраній папці, буде створювати під папки, з назвами торрентів і " +"Ця опція, в обраній теці, буде створювати підтеки, з назвами торентів і " "зберігати файли туди." #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:65 @@ -351,15 +351,15 @@ #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:30 msgid "Torrent Complete" -msgstr "Торрент завершено" +msgstr "Торент завершено" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:31 msgid "Torrent Added" -msgstr "Торрент додано" +msgstr "Торент додано" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 msgid "Torrent Removed" -msgstr "" +msgstr "Торент вилучено" #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 #: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 @@ -404,7 +404,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:43 msgid "Invalid magic code" -msgstr "Невірний чарівний код" +msgstr "Невірний чарунок" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:48 msgid "Invalid version" @@ -414,7 +414,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:139 #: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:178 msgid "Blocklist" -msgstr "Список блокувань" +msgstr "Перелік блокувань" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:32 #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:436 @@ -432,7 +432,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:154 msgid "Import blocklist on startup" -msgstr "Імпортувати блокліст при запуску" +msgstr "Імпортувати перелік блокувань при запуску" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:176 #: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:94 @@ -459,7 +459,7 @@ #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:313 msgid "Blocklist is up to date" -msgstr "Блокліст вже оновлений" +msgstr "Перелік блокувань вже оновлений" #: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:333 msgid "Options" @@ -509,7 +509,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:124 msgid "Watch folder does not exist." -msgstr "Папка в котрій ви зараз не існуе." +msgstr "Теки в котрій Ви зараз не існує." #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:129 #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:404 @@ -523,7 +523,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/config.glade:41 msgid "Watch Folders:" -msgstr "Дивитися папки:" +msgstr "Дивитися теки:" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:7 msgid "AutoAdd Error" @@ -531,23 +531,23 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:7 msgid "Watch Folder Properties" -msgstr "Дивитися властивості папки" +msgstr "Дивитися властивості теки" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:151 msgid "Enable this watch folder" -msgstr "Відобразити цю папку" +msgstr "Відобразити цю теку" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:173 msgid "Watch Folder" -msgstr "Дивитися папку" +msgstr "Дивитися теку" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:211 msgid "Delete .torrent after adding" -msgstr "Після додання видалити .torrent" +msgstr "Після додавання вилучити .torrent" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:232 msgid "Append extension after adding:" -msgstr "Додати розширення після добавки:" +msgstr "Додати розширення після додавання:" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:254 msgid ".added" @@ -555,7 +555,7 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:367 msgid "Torrent File Action" -msgstr "Дія торрент файла" +msgstr "Дія торент файлу" #: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:269 msgid "Set download location" @@ -622,7 +622,7 @@ #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:43 #: deluge/ui/web/js/deluge-all/details/OptionsTab.js:253 msgid "Remove at ratio" -msgstr "Видалити при коефіцієнті" +msgstr "Вилучити при коефіцієнті" #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:992 #: deluge/ui/web/render/tab_status.html:18 @@ -710,7 +710,7 @@ #: deluge/plugins/Label/deluge/plugins/label/core.py:297 msgid "Unknown Torrent" -msgstr "Невідомий торрент" +msgstr "Невідомий торент" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:174 #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:164 @@ -726,7 +726,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 msgid "Upload Slots:" -msgstr "" +msgstr "Завантажити слоти:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 #: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 @@ -750,7 +750,7 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:512 msgid "Apply per torrent max settings:" -msgstr "Застосувати максимальні параметри для всіх торрентів:" +msgstr "Застосувати максимальні параметри для усіх торентів:" #: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:529 msgid "Maximum" @@ -821,8 +821,8 @@ #: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:22 msgid "Use the sidebar to add,edit and remove labels. \n" msgstr "" -"Використовувати бічну панель для додання, редагування та видалення міток. " -"\n" +"Використовувати бічну панель для додавання, редагування та вилучення " +"міток. \n" #: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:32 msgid "Labels" @@ -842,7 +842,7 @@ #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:46 msgid "_Remove Label" -msgstr "Видалити мітку" +msgstr "Вилучити мітку" #: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:47 msgid "_Add Label" @@ -867,7 +867,7 @@ #: deluge/ui/countries.py:12 msgid "Algeria" -msgstr "Алжир" +msgstr "Алжір" #: deluge/ui/countries.py:13 msgid "American Samoa" @@ -979,7 +979,7 @@ #: deluge/ui/countries.py:40 msgid "British Indian Ocean Territory" -msgstr "Британські території у Індійському океані" +msgstr "Бритійські території у Індійському океані" #: deluge/ui/countries.py:41 msgid "Brunei Darussalam" @@ -1019,7 +1019,7 @@ #: deluge/ui/countries.py:50 msgid "Central African Republic" -msgstr "Центрально-африканська Республіка" +msgstr "Центрально Африканська Республіка" #: deluge/ui/countries.py:51 msgid "Chad" @@ -1179,7 +1179,7 @@ #: deluge/ui/countries.py:90 deluge/ui/countries.py:241 msgid "United Kingdom" -msgstr "Великобританія" +msgstr "Об'єднане Королівство" #: deluge/ui/countries.py:91 msgid "Ghana" @@ -1195,7 +1195,7 @@ #: deluge/ui/countries.py:94 msgid "Greenland" -msgstr "Гренландія" +msgstr "Гренляндія" #: deluge/ui/countries.py:95 msgid "Grenada" @@ -1255,7 +1255,7 @@ #: deluge/ui/countries.py:109 msgid "Iceland" -msgstr "Ісландія" +msgstr "Ісляндія" #: deluge/ui/countries.py:110 msgid "India" @@ -1275,7 +1275,7 @@ #: deluge/ui/countries.py:114 msgid "Ireland" -msgstr "Ірландія" +msgstr "Ірляндія" #: deluge/ui/countries.py:115 msgid "Isle of Man" @@ -1447,7 +1447,7 @@ #: deluge/ui/countries.py:157 msgid "Montserrat" -msgstr "Монтсеррат" +msgstr "Монтсерат" #: deluge/ui/countries.py:158 msgid "Morocco" @@ -1475,11 +1475,11 @@ #: deluge/ui/countries.py:164 msgid "Netherlands" -msgstr "Голандія" +msgstr "Нідерлянди" #: deluge/ui/countries.py:165 msgid "Netherlands Antilles" -msgstr "Нідерландські Антильські Острови" +msgstr "Нідерляндські Антильські Острови" #: deluge/ui/countries.py:166 msgid "New Caledonia" @@ -1487,7 +1487,7 @@ #: deluge/ui/countries.py:167 msgid "New Zealand" -msgstr "Нова Зеландія" +msgstr "Нова Зеляндія" #: deluge/ui/countries.py:168 msgid "Nicaragua" @@ -1595,7 +1595,7 @@ #: deluge/ui/countries.py:194 msgid "Saint Helena" -msgstr "Острів св. Єлени" +msgstr "Острів св. Олени" #: deluge/ui/countries.py:195 msgid "Saint Kitts and Nevis" @@ -1679,7 +1679,7 @@ #: deluge/ui/countries.py:215 msgid "Spain" -msgstr "Іспанія" +msgstr "Еспанія" #: deluge/ui/countries.py:216 msgid "Sri Lanka" @@ -1842,8 +1842,8 @@ "Deluge cannot find the 'deluged' executable, it is likely that you forgot to " "install the deluged package or it's not in your PATH." msgstr "" -"Deluge не може знайти виконуваний \"deluged \" файл, цілком ймовірно, що ви " -"забули встановити deluged пакети або його немає в вашому шляху." +"Deluge не може знайти виконуваний \"deluged \" файл, цілком ймовірно, що Ви " +"забули встановити deluged пакунки або його немає у Вашому шляху." #: deluge/ui/web/server.py:623 msgid "Starting server in PID" @@ -1855,15 +1855,15 @@ #: deluge/ui/web/js/deluge-all/ConnectionManager.js:73 msgid "Online" -msgstr "В мережі" +msgstr "У мережі" #: deluge/ui/web/js/deluge-all/ConnectionManager.js:79 msgid "Connected" -msgstr "Підключено" +msgstr "Під’єднано" #: deluge/ui/web/json_api.py:829 msgid "Daemon doesn't exist" -msgstr "Демон не існує" +msgstr "Демону не існує" #: deluge/ui/web/json_api.py:835 msgid "Daemon not running" @@ -1877,7 +1877,7 @@ #: deluge/ui/gtkui/notification.py:57 msgid "Torrent complete" -msgstr "Торрент закінчений" +msgstr "Торент закінчений" #: deluge/ui/gtkui/notification.py:59 msgid "Including" @@ -1901,7 +1901,7 @@ "Це є інформативне повідомлення, що Deluge завершив завантаження %(name)s , " "що включає %(num_files)i файлів.\n" "\n" -"Для припинення надсилання таких повідомлень необхідно просто відключити " +"Для припинення надсилання таких повідомлень необхідно просто відімкнути " "повідомлення на ел. скриньку у налаштуваннях Deluge.\n" "\n" "Дякую, \n" @@ -1960,11 +1960,11 @@ #: deluge/ui/web/js/deluge-all/TorrentGrid.js:128 #: deluge/ui/web/js/deluge-all/details/FilesTab.js:52 msgid "Progress" -msgstr "Прогрес" +msgstr "Поступ" #: deluge/ui/gtkui/torrentview.py:260 deluge/ui/gtkui/torrentview.py:266 msgid "Seeders" -msgstr "Роздаючі" +msgstr "Поширювачі" #: deluge/ui/gtkui/torrentview.py:251 #: deluge/ui/web/js/deluge-all/TorrentGrid.js:141 @@ -2110,7 +2110,7 @@ #: deluge/ui/gtkui/createtorrentdialog.py:160 msgid "Choose a folder" -msgstr "Виберіть теку" +msgstr "Оберіть теку" #: deluge/ui/gtkui/createtorrentdialog.py:238 #: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:2 @@ -2120,12 +2120,12 @@ #: deluge/ui/gtkui/createtorrentdialog.py:249 #: deluge/ui/gtkui/addtorrentdialog.py:548 msgid "Torrent files" -msgstr "Файли торрента" +msgstr "Файли торентів" #: deluge/ui/gtkui/createtorrentdialog.py:253 #: deluge/ui/gtkui/addtorrentdialog.py:552 msgid "All files" -msgstr "Всі файли" +msgstr "Усі файли" #: deluge/ui/gtkui/files_tab.py:33 deluge/ui/web/js/deluge-all/Menus.js:257 #: deluge/ui/web/js/deluge-all/Deluge.js:163 @@ -2154,7 +2154,7 @@ #: deluge/ui/gtkui/addtorrentdialog.py:89 deluge/ui/gtkui/queuedtorrents.py:50 msgid "Torrent" -msgstr "Торрент" +msgstr "Торент" #: deluge/ui/gtkui/addtorrentdialog.py:193 msgid "Invalid File" @@ -2186,11 +2186,11 @@ #: deluge/ui/gtkui/addtorrentdialog.py:611 msgid "Invalid URL" -msgstr "Невірний URL" +msgstr "Невірна URL" #: deluge/ui/gtkui/addtorrentdialog.py:612 msgid "is not a valid URL." -msgstr "не коректний URL." +msgstr "не коректна URL." #: deluge/ui/gtkui/addtorrentdialog.py:618 msgid "Downloading..." @@ -2198,7 +2198,7 @@ #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Download Failed" -msgstr "Завантаження провалене" +msgstr "Помилка завантаження" #: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Failed to download:" @@ -2206,11 +2206,11 @@ #: deluge/ui/gtkui/queuedtorrents.py:111 msgid " Torrents Queued" -msgstr " Торрентів в черзі" +msgstr " Торентів в черзі" #: deluge/ui/gtkui/queuedtorrents.py:113 msgid " Torrent Queued" -msgstr " Торрентів в черзі" +msgstr " Торентів в черзі" #: deluge/ui/gtkui/preferences.py:71 #: deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js:85 @@ -2273,22 +2273,22 @@ #: deluge/ui/gtkui/preferences.py:76 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:41 msgid "Plugins" -msgstr "Плагіни" +msgstr "Втулки" #: deluge/ui/gtkui/preferences.py:125 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:92 msgid "Plugin" -msgstr "Плагін" +msgstr "Втулка" #: deluge/ui/gtkui/preferences.py:769 msgid "You must restart the deluge UI to change classic mode. Quit now?" msgstr "" -"Необхідно перезапустити інтерфейс deluge для зміни режиму на класичний. " +"Необхідно перезапустити інтерфейс deluge для зміни режиму на клясичний. " "Вийти зараз?" #: deluge/ui/gtkui/preferences.py:955 msgid "Select the Plugin" -msgstr "Виберіть плагін" +msgstr "Виберіть втулку" #: deluge/ui/gtkui/preferences.py:967 msgid "Plugin Eggs" @@ -2350,7 +2350,7 @@ #: deluge/ui/gtkui/gtkui.py:352 deluge/ui/gtkui/gtkui.py:379 msgid "Turn off Classic Mode?" -msgstr "Виключити Класичний режим?" +msgstr "Вимкнути Клясичний режим?" #: deluge/ui/gtkui/gtkui.py:353 msgid "" @@ -2360,7 +2360,7 @@ msgstr "" "Схоже, що демон процесу Deluge (deluged) вже запущений.\n" "\n" -"Для продовження необхідно зупинити демона або відключити Класичний режим." +"Для продовження необхідно зупинити демона або відімкнути Клясичний режим." #: deluge/ui/gtkui/gtkui.py:360 msgid "Enable Thin Client Mode?" @@ -2374,7 +2374,7 @@ msgstr "" "Доступний лише режим тонкого клієнта, тому що libtorrent не встановлено.\n" "\n" -"Щоб використовувати Deluge самостійно (в класичному режимі), будь ласка, " +"Щоб використовувати Deluge самостійно (в клясичному режимі), будь ласка, " "встановіть libtorrent." #: deluge/ui/gtkui/gtkui.py:348 @@ -2389,7 +2389,7 @@ "Please see the details below for more information." msgstr "" "Сталася помилка під час запуску компоненту ядра, що необхідний для роботи " -"Deluge в класичному режимі.\n" +"Deluge в клясичному режимі.\n" "\n" "Детальніше дивіться нижче." @@ -2398,8 +2398,8 @@ "Since there was an error starting in Classic Mode would you like to continue " "by turning it off?" msgstr "" -"Виникла помилка під час запуску у класичному режимі. Продовжити, вимкнувши " -"класичний режим?" +"Виникла помилка під час запуску у клясичному режимі. Продовжити, вимкнувши " +"клясичний режим?" #: deluge/ui/gtkui/gtkui.py:391 msgid "Error Starting Daemon" @@ -2411,7 +2411,7 @@ "console to see if there is an error." msgstr "" "Відбулася помилка при запуску демона. Спробуйте запустити демон з консолі, " -"щоб побачити детальну інформацію." +"щоб побачити докладну інформацію." #: deluge/ui/gtkui/connectionmanager.py:161 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:168 @@ -2453,7 +2453,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:6 msgid "Torrents" -msgstr "Торренти" +msgstr "Торенти" #: deluge/ui/gtkui/dialogs.py:170 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:183 @@ -2467,11 +2467,11 @@ #: deluge/ui/gtkui/mainwindow.py:191 msgid "Enter your password to show Deluge..." -msgstr "Введіть ваш пароль щоб показати Deluge..." +msgstr "Уведіть Ваш пароль щоб показати Deluge..." #: deluge/ui/gtkui/mainwindow.py:235 msgid "Enter your password to Quit Deluge..." -msgstr "Введіть ваш пароль щоб вийти з Deluge..." +msgstr "Уведіть Ваш пароль щоб вийти з Deluge..." #: deluge/ui/gtkui/mainwindow.py:315 msgid "D:" @@ -2484,14 +2484,14 @@ #: deluge/ui/gtkui/aboutdialog.py:33 #, python-format msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" -msgstr "" +msgstr "Авторське право %(year_start)s-%(year_end)s команда Deluge" #: deluge/ui/gtkui/aboutdialog.py:35 msgid "" "A peer-to-peer file sharing program\n" "utilizing the BitTorrent protocol." msgstr "" -"Точка-обміну файлами програма\n" +"Точка-обміну файлами проґрама\n" "з використанням BitTorrent протокол." #: deluge/ui/gtkui/aboutdialog.py:36 @@ -2532,28 +2532,28 @@ "delete this exception statement from all source files in the program, then " "also delete it here." msgstr "" -"Ця програма є вільним програмним забезпеченням, ви можете розповсюджувати та " +"Ця проґрама є вільним проґрамним забезпеченням, Ви можете розповсюджувати та " "/ або модифікувати його на умовах GNU General Public License, опублікованій " "Free Software Foundation, версії 3, або (за вашим вибором) будь-якої " "пізнішої версії.\n" "\n" -"Ця програма поширюється в надії, що вона буде корисною, але БЕЗ БУДЬ-ЯКИХ " -"ГАРАНТІЙ, навіть без гарантій КОМЕРЦІЙНОЇ ЦІННОСТІ чи ПРИДАТНОСТІ ДЛЯ " +"Ця проґрама поширюється зі сподіванням, що вона буде корисною, але БЕЗ БУДЬ-" +"ЯКИХ ЗАПОРУК, навіть без запорук КОМЕРЦІЙНОЇ ЦІННОСТІ чи ПРИДАТНОСТІ ДЛЯ " "КОНКРЕТНИХ ЦІЛЕЙ. Див громадської ліцензії GNU General ліцензії для більш " "докладної інформації.\n" "\n" "Ви повинні були отримати копію Public License GNU General разом з цією " -"програмою, якщо ні, див .\n" +"проґрамою, якщо ні, див .\n" "\n" "Крім того, в якості особливого винятку, власників авторських прав дати " -"дозвіл, щоб зв'язати код частини цієї програми з бібліотекою OpenSSL. Ви " +"дозвіл, щоб зв'язати код частини цієї проґрами з бібліотекою OpenSSL. Ви " "повинні коритися GNU General Public License у всіх відношеннях для всіх код, " "що використовується, крім OpenSSL.\n" "\n" "Якщо ви зміните файл (и) з виключенням цього, ви можете розширити це виняток " "для вашої версії файлу (ів), але ви не зобов'язані це робити. Якщо ви не " -"хочете зробити це, видаліть це виняток заява від вашої версії. Якщо ви " -"видалите це виняток заява всі вихідні файли в програму, то і видаляти її тут." +"хочете зробити це, вилучіть це виняток заява від вашої версії. Якщо ви " +"вилучите це виняток заява всі вихідні файли в проґраму, то і вилучати її тут." #: deluge/ui/gtkui/aboutdialog.py:259 msgid "Server:" @@ -2633,19 +2633,19 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:45 msgid "Remove the selected torrent?" -msgstr "Видалити вибраний торрент?" +msgstr "Вилучити вибраний торент?" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:57 msgid "If you remove the data, it will be lost permanently." -msgstr "Якщо ви видалете дані, то вони втратяться назавжди." +msgstr "Якщо Ви вилучите дані, то вони втратяться назавжди." #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:117 msgid "Remove With _Data" -msgstr "Видалити з даними" +msgstr "Вилучити з даними" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:155 msgid "Remove _Torrent" -msgstr "Видалити _торрент" +msgstr "Вилучити _торент" #: deluge/ui/gtkui/glade/edit_trackers.ui.h:1 #: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:40 @@ -2695,7 +2695,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:2 #: deluge/ui/gtkui/glade/tray_menu.ui.h:2 msgid "_Add Torrent" -msgstr "_Додати торрент" +msgstr "_Додати торент" #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:2 msgid "_Pause All" @@ -2726,7 +2726,7 @@ #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:4 #: deluge/ui/gtkui/glade/torrent_menu.ui.h:4 msgid "Resume selected torrents." -msgstr "Відновити вибрані торренти." +msgstr "Відновити вибрані торенти." #: deluge/ui/gtkui/glade/filtertree_menu.ui.h:3 msgid "Resu_me All" @@ -2761,12 +2761,12 @@ #: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:334 #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:46 msgid "Delete copy of torrent file on remove" -msgstr "Видалити копію торрент-файла" +msgstr "Вилучити копію торент-файлу" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:47 msgid "" "Delete the copy of the torrent file created when the torrent is removed" -msgstr "Видалити копію торрент-файла, створеного, коли торрент був видалений" +msgstr "Вилучити копію торент-файлу, створеного, коли торент був вилучений" #: deluge/ui/gtkui/glade/preferences_dialog.glade:339 msgid "Folders" @@ -2800,16 +2800,16 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:50 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:106 msgid "Prioritize first and last pieces of torrent" -msgstr "Робити пріорітетними перші і останні частини торрента" +msgstr "Робити пріоритетними перші і останні частини торенту" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" -msgstr "Робити пріорітетними перші і останні частини файлу" +msgstr "Робити пріоритетними перші і останні частини файлу" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:59 #: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:118 msgid "Add torrents in Paused state" -msgstr "Додати торренти у режимі паузи." +msgstr "Додати торенти у режимі паузи." #: deluge/ui/gtkui/glade/preferences_dialog.glade:530 msgid "Network" @@ -2851,7 +2851,7 @@ "Enter the IP address of the interface to listen for incoming bittorrent " "connections on. Leave this empty if you want to use the default." msgstr "" -"Вкажіть IP-адресу інтерфейсу для вхідних bittorent-з'єднань. Залишіть " +"Вкажіть IP-адресу інтерфейсу для вхідних bittorent-з'єднань. Залиште " "порожнім, якщо хочете використовувати типову." #: deluge/ui/gtkui/glade/preferences_dialog.glade:903 @@ -2863,7 +2863,7 @@ "The TOS byte set in the IP header of every packet sent to peers (including " "web seeds). Expects a Hex value." msgstr "" -"TOS байт , який знаходиться в заголовку IP пакета, відправляється " +"TOS байт , який знаходиться в заголовку IP пакунку, відправляється " "учасникам(включаючи інтернет-роздачі). Очікується шістнадцяткове значення." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:129 @@ -2973,7 +2973,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:68 msgid "The maximum upload speed for all torrents. Set -1 for unlimited." msgstr "" -"Максимальна швидкість роздачі для всіх торрентів. Поставте -1 для " +"Максимальна швидкість роздачі для всіх торентів. Поставте -1 для " "необмеженої швидкості." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:92 @@ -2984,7 +2984,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:70 msgid "The maximum number of connections allowed. Set -1 for unlimited." msgstr "" -"Максимальнo дозволена кількість з'єднань. Установіть -1 для необмеженої." +"Максимальнo дозволена кількість з'єднань. Встановіть -1 для необмеженої." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:68 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:153 @@ -2994,7 +2994,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:72 msgid "The maximum upload slots for all torrents. Set -1 for unlimited." msgstr "" -"Максимальна швидкість відвантаження для всіх торрентів. Встановити -1 для " +"Максимальна швидкість відвантаження для всіх торентів. Встановити -1 для " "безлімітного." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:161 @@ -3004,7 +3004,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:74 msgid "The maximum download speed for all torrents. Set -1 for unlimited." msgstr "" -"Максимальна швидкість завантаження для всіх потоків. Установіть -1 для " +"Максимальна швидкість завантаження для всіх потоків. Встановіть -1 для " "необмеженої." #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:84 @@ -3015,7 +3015,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:77 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:128 msgid "Ignore limits on local network" -msgstr "Ігнорувати обмеження для локальної мережі" +msgstr "Нехтувати обмеження для локальної мережі" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:78 #: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:135 @@ -3036,27 +3036,27 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:81 msgid "The maximum upload slots per torrent. Set -1 for unlimited." -msgstr "Максимум слотів для роздачі для одного торрента. -1 необмежено." +msgstr "Максимум слотів для роздачі для одного торенту. -1 необмежено." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:82 msgid "The maximum number of connections per torrent. Set -1 for unlimited." msgstr "" -"Максимальна кількість з'єднань одного потоку. Установіть -1 для необмеженої." +"Максимальна кількість з'єднань одного потоку. Встановіть -1 для необмеженої." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1713 msgid "The maximum download speed per torrent. Set -1 for unlimited." msgstr "" -"Максимальна швидкість завантаження на один торрент. Встановіть -1 для " +"Максимальна швидкість завантаження на один торент. Встановіть -1 для " "необмеженої." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 msgid "The maximum upload speed per torrent. Set -1 for unlimited." msgstr "" -"Максимальна швидкість роздачі на один торрент. Встановіть -1 для необмеженої." +"Максимальна швидкість роздачі на один торент. Встановіть -1 для необмеженої." #: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" -msgstr "Завнтаженість смуги пропускання для одного потоку" +msgstr "Завантаженість смуги пропускання для одного потоку" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1812 msgid "Interface" @@ -3073,23 +3073,23 @@ "advantage of running Deluge as a daemon. You need to restart Deluge for this " "setting to take effect." msgstr "" -"Класичний режим ховає більшість функцій сервіса, при цьому Deluge буде " -"виглядати як єдина програма. Включіть цей параметр, якщо ви не бажаєте " -"використовувати всі можливості Deluge як сервіса. Ви повинні перезавантажити " -"Deluge, щоб зміни вступили в силу." +"Клясичний режим ховає більшість функцій сервісу, при цьому Deluge буде " +"виглядати як єдина проґрама. Включіть цей параметр, якщо ви не бажаєте " +"використовувати всі можливості Deluge як сервісу. Ви повинні перезавантажити " +"Deluge, щоб зміни було застосовано" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1860 msgid "Classic Mode" -msgstr "Класичний режим" +msgstr "Клясичний режим" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:19 #: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:64 msgid "Show session speed in titlebar" -msgstr "Показувати швидкість у рядку заголовка" +msgstr "Показувати швидкість у рядку заголовку" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 msgid "Focus window when adding torrent" -msgstr "При додаванні торента виводити вікно на передній план" +msgstr "При додаванні торенту виводити вікно на передній план" #: deluge/ui/gtkui/glade/preferences_dialog.glade:1923 msgid "Main Window" @@ -3105,31 +3105,31 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:1993 msgid "Add Torrents Dialog" -msgstr "Діалог додавання торрентів" +msgstr "Діалог додавання торентів" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:32 msgid "Enable system tray icon" -msgstr "Ввімкнути піктограму у системному лотку" +msgstr "Увімкнути піктограму у системній таці" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:35 msgid "Minimize to tray on close" -msgstr "Згорнути в трей при закритті" +msgstr "Згорнути у тацю при закритті" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:36 msgid "Start in tray" -msgstr "Згортати в трей при запуску" +msgstr "Згортати у тацю при запуску" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2082 msgid "Enable Application Indicator" -msgstr "Включити індикатор програми" +msgstr "Увімкнути індикатор проґрами" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:37 msgid "Password protect system tray" -msgstr "Захистити паролем системний лоток" +msgstr "Захистити паролем системну тацю" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2170 msgid "System Tray" -msgstr "Системний Лоток" +msgstr "Системна Таця" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2228 msgid "Other" @@ -3203,7 +3203,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:178 #: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:78 msgid "Allow Remote Connections" -msgstr "Дозводити віддалені з'єднання" +msgstr "Дозволити віддалені з'єднання" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2682 msgid "Connections" @@ -3225,7 +3225,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:86 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:62 msgid "Queue new torrents to top" -msgstr "Добавляти нові торренти на початок" +msgstr "Додавати нові торенти на початок" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:88 msgid "Total active seeding:" @@ -3242,16 +3242,16 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:91 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:110 msgid "Do not count slow torrents" -msgstr "Не враховувати повільні торренти" +msgstr "Не враховувати повільні торенти" #: deluge/ui/gtkui/glade/preferences_dialog.glade:2994 msgid "Active Torrents" -msgstr "Активні торрени" +msgstr "Активні торенти" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:94 #: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:130 msgid "Share Ratio Limit:" -msgstr "Коефіцієнт обмеження роздічі:" +msgstr "Коефіцієнт обмеження роздачі:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:95 msgid "Seed Time Ratio:" @@ -3269,7 +3269,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:98 msgid "Remove torrent when share ratio reached" -msgstr "Видалити торрент коли коефіцієнт розданого досягне." +msgstr "Вилучити торент коли коефіцієнт розданого досягне." #: deluge/ui/gtkui/glade/preferences_dialog.glade:3192 msgid "Seeding" @@ -3334,8 +3334,7 @@ "cache, to when it's forcefully flushed to disk. Default is 60 seconds." msgstr "" "Час (в секундах) від останнього кешованого запису частини в кеші запису до " -"того, як примусово скинути кеш цієї частини на диск. За замовчуванням 60 " -"секунд." +"того, як примусово скинути кеш цієї частини на диск. Типово 60 секунд." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:146 #: deluge/ui/web/js/deluge-all/preferences/CachePage.js:70 @@ -3370,13 +3369,13 @@ "of saved write operations per total write operations, i.e. a kind of cache " "hit ratio for the write cache." msgstr "" -"Співвідношення (блоков_запісано - операцій_запісу) / блоков_запісано " -"представляє відношення кількості збережених операцій запису до їх загальної " -"кількості, тобто ефективність кеша запису." +"Співвідношення (блоків_записано - операцій_запису) / блоків_записано " +"представляє відношення кількости збережених операцій запису до їх загальної " +"кількости, тобто дієвість кешу запису." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:153 msgid "Write Cache Hit Ratio:" -msgstr "Відсоток влучності в кеш:" +msgstr "Відсоток влучности в кеш:" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4300 msgid "Write" @@ -3396,19 +3395,19 @@ #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:157 msgid "The number of blocks that were served from cache." -msgstr "Число блоків, які обслужені з кешу." +msgstr "Число блоків, які обслуговані з кешу." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:158 msgid "Blocks Read Hit:" -msgstr "Зчитано блоків з кеша:" +msgstr "Зчитано блоків з кешу:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:159 msgid "The cache hit ratio for the read cache." -msgstr "Коефіцієнт ефективності кеша читання." +msgstr "Коефіцієнт дієвости кешу читання." #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:160 msgid "Read Cache Hit Ratio:" -msgstr "Відсоток читання з кеша:" +msgstr "Відсоток читання з кешу:" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:161 msgid "" @@ -3450,7 +3449,7 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:4619 msgid "Plugins" -msgstr "Плагінів" +msgstr "Втулок" #: deluge/ui/gtkui/glade/preferences_dialog.ui.h:184 #: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:49 @@ -3475,11 +3474,11 @@ #: deluge/ui/gtkui/glade/preferences_dialog.glade:4872 msgid "_Install Plugin" -msgstr "Встановити плагін" +msgstr "Встановити втулку" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4915 msgid "_Rescan Plugins" -msgstr "Пересканувати плагіни" +msgstr "Пересканувати втулки" #: deluge/ui/gtkui/glade/preferences_dialog.glade:4968 msgid "_Find More Plugins" @@ -3487,15 +3486,15 @@ #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:1 msgid "Queued Torrents" -msgstr "Торренти в черзі" +msgstr "Торенти в черзі" #: deluge/ui/gtkui/glade/queuedtorrents.glade:47 msgid "Add Queued Torrents" -msgstr "Додати в чергу торренти" +msgstr "Додати до черги торенти" #: deluge/ui/gtkui/glade/queuedtorrents.ui.h:3 msgid "Automatically add torrents on connect" -msgstr "Автоматично додавати торренти при з'єднанні" +msgstr "Автоматично додавати торенти при з'єднанні" #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:1 msgid "Create Torrent" @@ -3517,7 +3516,7 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:4 msgid "_Remote Path" -msgstr "Видалити шлях" +msgstr "Вилучити шлях" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:230 msgid "Files" @@ -3572,11 +3571,11 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:13 msgid "Add this torrent to the session" -msgstr "Додати цей торрент в чергу" +msgstr "Додати цей торент до черги" #: deluge/ui/gtkui/glade/create_torrent_dialog.remote_path.ui.h:1 msgid "Enter Remote Path" -msgstr "Ввести віддалений шлях" +msgstr "Увести віддалений шлях" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:730 msgid "Remote Path" @@ -3590,7 +3589,7 @@ #: deluge/ui/gtkui/glade/create_torrent_dialog.progress.ui.h:1 msgid "Creating Torrent" -msgstr "Створення торрента" +msgstr "Створення торенту" #: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:1 msgid "Save .torrent as" @@ -3609,15 +3608,15 @@ #: deluge/ui/web/js/deluge-all/ConnectionManager.js:43 #: deluge/ui/web/js/deluge-all/Toolbar.js:100 msgid "Connection Manager" -msgstr "Менеджер з’єднань" +msgstr "Керівник з’єднань" #: deluge/ui/gtkui/glade/connection_manager.glade:240 msgid "Connection Manager" -msgstr "Менеджер з’єднань" +msgstr "Керівник з’єднань" #: deluge/ui/gtkui/glade/connection_manager.ui.h:2 msgid "_Start local daemon" -msgstr "Запустити локальний демон" +msgstr "Запустити локального демона" #: deluge/ui/gtkui/glade/connection_manager.ui.h:3 msgid "Automatically connect to selected host on start-up" @@ -3633,7 +3632,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:3 msgid "_Create Torrent" -msgstr "_Створити торрент" +msgstr "_Створити торент" #: deluge/ui/gtkui/glade/main_window.ui.h:4 msgid "Quit & _Shutdown Daemon" @@ -3641,15 +3640,15 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:5 msgid "_Edit" -msgstr "_Правка" +msgstr "З_міни" #: deluge/ui/gtkui/glade/main_window.ui.h:6 msgid "_Connection Manager" -msgstr "_Менеджер з'єднань" +msgstr "_Керівник з'єднань" #: deluge/ui/gtkui/glade/main_window.ui.h:7 msgid "_Torrent" -msgstr "_Торрент" +msgstr "_Торент" #: deluge/ui/gtkui/glade/main_window.ui.h:8 msgid "_View" @@ -3657,7 +3656,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:9 msgid "_Toolbar" -msgstr "_Панель інструментів" +msgstr "Панель _знарядь" #: deluge/ui/gtkui/glade/main_window.ui.h:10 msgid "_Sidebar" @@ -3701,7 +3700,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:21 msgid "Frequently Asked Questions" -msgstr "FAQ" +msgstr "Типові Питання-Відповіді" #: deluge/ui/gtkui/glade/main_window.ui.h:22 msgid "_Community" @@ -3709,15 +3708,15 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:23 msgid "Add torrent" -msgstr "Додати торрент" +msgstr "Додати торент" #: deluge/ui/gtkui/glade/main_window.ui.h:24 msgid "Add Torrent" -msgstr "Додати торрент" +msgstr "Додати торент" #: deluge/ui/gtkui/glade/main_window.ui.h:25 msgid "Remove torrent" -msgstr "Вилучити торрент" +msgstr "Вилучити торент" #: deluge/ui/gtkui/glade/main_window.ui.h:26 #: deluge/ui/gtkui/glade/remove_torrent_dialog.ui.h:1 @@ -3729,7 +3728,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:30 msgid "Pause the selected torrents" -msgstr "Призупинити вибрані торренти" +msgstr "Призупинити вибрані торенти" #: deluge/ui/gtkui/glade/main_window.ui.h:31 #: deluge/ui/web/js/deluge-all/Menus.js:88 @@ -3739,7 +3738,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:32 msgid "Resume the selected torrents" -msgstr "Відновити обрані торренти" +msgstr "Відновити обрані торенти" #: deluge/ui/gtkui/glade/main_window.ui.h:33 #: deluge/ui/web/js/deluge-all/Menus.js:94 @@ -3753,7 +3752,7 @@ #: deluge/ui/gtkui/glade/main_window.ui.h:35 msgid "Queue Up" -msgstr "Перемістити вверх" +msgstr "Перемістити вгору" #: deluge/ui/gtkui/glade/main_window.ui.h:36 msgid "Queue Torrent Down" @@ -3809,11 +3808,11 @@ #: deluge/ui/gtkui/glade/main_window.glade:941 msgid "Peers:" -msgstr "Викачуючі:" +msgstr "Отримувачі:" #: deluge/ui/gtkui/glade/main_window.glade:967 msgid "Seeders:" -msgstr "Роздаючі:" +msgstr "Поширювачі:" #: deluge/ui/gtkui/glade/main_window.glade:985 msgid "Pieces:" @@ -3903,24 +3902,24 @@ #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "Вилучити торрент?" +msgstr "Вилучити торент?" #: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" -msgstr "Ви впевнені, що хочете вилучити вибраний торрент?" +msgstr "Ви впевнені, що хочете вилучити вибраний торент?" #: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" -msgstr "Пов'язаний .torrent файл буде видалено!" +msgstr "Пов'язаний .torrent файл буде вилучено!" #: deluge/ui/gtkui/glade/main_window.glade:2408 msgid "The downloaded data will be deleted!" -msgstr "Завантажені файли будуть видалені!" +msgstr "Завантажені файли будуть вилучені!" #: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:2 msgid "Remove Selected Torrent" -msgstr "Вилучити вибраний торрент" +msgstr "Вилучити вибраний торент" #: deluge/ui/gtkui/glade/main_window.new_release.ui.h:1 msgid "New Release" @@ -3964,7 +3963,7 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:2 msgid "_Pause" -msgstr "_Пауза" +msgstr "Пр_изупинити" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:3 msgid "Resu_me" @@ -3984,11 +3983,11 @@ #: deluge/ui/gtkui/glade/torrent_menu.ui.h:9 msgid "_Remove Torrent" -msgstr "_Вилучити торрент" +msgstr "_Вилучити торент" #: deluge/ui/gtkui/glade/torrent_menu.ui.h:10 msgid "_Force Re-check" -msgstr "Форсована перевірка" +msgstr "_Примусова перевірка" #: deluge/ui/gtkui/glade/torrent_menu.glade:191 msgid "Move _Storage" @@ -4004,7 +4003,7 @@ #: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:6 msgid "_Auto Managed" -msgstr "Автоматичне управління" +msgstr "Автоматичне керування" #: deluge/ui/gtkui/glade/move_storage_dialog.glade:9 msgid "Move Storage" @@ -4021,7 +4020,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:1 #: deluge/ui/web/js/deluge-all/add/AddWindow.js:37 msgid "Add Torrents" -msgstr "Додати торренти" +msgstr "Додати торенти" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:3 msgid "_URL" @@ -4037,7 +4036,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:271 msgid "Torrents" -msgstr "Торренти" +msgstr "Торенти" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:7 msgid "Fi_les" @@ -4070,7 +4069,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:11 #: deluge/ui/web/js/deluge-all/add/OptionsTab.js:137 msgid "Prioritize First/Last Pieces" -msgstr "Пріорітетні перші/останні частинки" +msgstr "Пріоритетні перші/останні частинки" #: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:33 msgid "Revert To Defaults" @@ -4086,7 +4085,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1052 msgid "From URL" -msgstr "Відкрити адресуURL" +msgstr "Відкрити адресу URL" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:1 msgid "Add Infohash" @@ -4094,7 +4093,7 @@ #: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1211 msgid "From Infohash" -msgstr "З хеша даних" +msgstr "З хешу даних" #: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:3 msgid "Infohash:" diff -Nru deluge-1.3.12/deluge/i18n/ur.po deluge-1.3.13/deluge/i18n/ur.po --- deluge-1.3.12/deluge/i18n/ur.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/ur.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/vi.po deluge-1.3.13/deluge/i18n/vi.po --- deluge-1.3.12/deluge/i18n/vi.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/vi.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/zh_CN.po deluge-1.3.13/deluge/i18n/zh_CN.po --- deluge-1.3.12/deluge/i18n/zh_CN.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/zh_CN.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/i18n/zh_HK.po deluge-1.3.13/deluge/i18n/zh_HK.po --- deluge-1.3.12/deluge/i18n/zh_HK.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/zh_HK.po 2016-07-20 14:23:28.000000000 +0000 @@ -1,104 +1,135 @@ # Chinese (Hong Kong) translation for deluge -# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 +# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the deluge package. -# FIRST AUTHOR , 2008. +# FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: deluge\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-01-02 19:16+0000\n" -"PO-Revision-Date: 2008-09-24 15:38+0000\n" -"Last-Translator: hoball \n" +"POT-Creation-Date: 2015-08-09 13:37+0100\n" +"PO-Revision-Date: 2015-12-04 15:54+0000\n" +"Last-Translator: tomoe_musashi \n" "Language-Team: Chinese (Hong Kong) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-27 19:52+0000\n" -"X-Generator: Launchpad (build 14868)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" -#: deluge/common.py:274 +#: deluge/pluginmanagerbase.py:173 +msgid "Not available" +msgstr "不可用" + +#: deluge/common.py:260 msgid "KiB" -msgstr "" +msgstr "KiB" -#: deluge/common.py:277 +#: deluge/common.py:261 msgid "MiB" -msgstr "" +msgstr "MiB" -#: deluge/common.py:279 +#: deluge/common.py:262 msgid "GiB" -msgstr "" +msgstr "GiB" + +#: deluge/common.py:310 +msgid "K" +msgstr "K" + +#: deluge/common.py:313 +msgid "M" +msgstr "M" #: deluge/common.py:315 -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:638 -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:652 -#: deluge/plugins/label/label/data/label_options.glade:132 -#: deluge/plugins/label/label/data/label_options.glade:195 -#: deluge/ui/console/statusbars.py:96 deluge/ui/console/statusbars.py:101 -#: deluge/ui/gtkui/systemtray.py:251 deluge/ui/gtkui/systemtray.py:255 -#: deluge/ui/gtkui/systemtray.py:271 deluge/ui/gtkui/systemtray.py:277 -#: deluge/ui/gtkui/systemtray.py:422 deluge/ui/gtkui/systemtray.py:427 -#: deluge/ui/gtkui/menubar.py:436 deluge/ui/gtkui/menubar.py:437 -#: deluge/ui/gtkui/status_tab.py:62 deluge/ui/gtkui/statusbar.py:363 -#: deluge/ui/gtkui/statusbar.py:373 deluge/ui/gtkui/statusbar.py:378 -#: deluge/ui/gtkui/statusbar.py:390 deluge/ui/gtkui/statusbar.py:401 -#: deluge/ui/gtkui/statusbar.py:418 deluge/ui/gtkui/statusbar.py:429 -#: deluge/ui/gtkui/glade/main_window.glade:1834 -#: deluge/ui/gtkui/glade/main_window.glade:1846 +msgid "G" +msgstr "G" + +#: deluge/common.py:353 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:857 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:872 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:337 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:408 +#: deluge/ui/console/statusbars.py:96 deluge/ui/console/statusbars.py:104 +#: deluge/ui/gtkui/systemtray.py:222 deluge/ui/gtkui/systemtray.py:226 +#: deluge/ui/gtkui/systemtray.py:243 deluge/ui/gtkui/systemtray.py:250 +#: deluge/ui/gtkui/systemtray.py:401 deluge/ui/gtkui/menubar.py:422 +#: deluge/ui/gtkui/menubar.py:424 deluge/ui/gtkui/status_tab.py:41 +#: deluge/ui/gtkui/statusbar.py:338 deluge/ui/gtkui/statusbar.py:348 +#: deluge/ui/gtkui/statusbar.py:353 deluge/ui/gtkui/statusbar.py:365 +#: deluge/ui/gtkui/statusbar.py:367 deluge/ui/gtkui/statusbar.py:399 +#: deluge/ui/gtkui/statusbar.py:412 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:34 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:76 +#: deluge/ui/web/js/deluge-all/Statusbar.js:144 +#: deluge/ui/web/js/deluge-all/Statusbar.js:192 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:114 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:141 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" -#: deluge/common.py:318 +#: deluge/common.py:356 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" -#: deluge/common.py:320 +#: deluge/common.py:358 msgid "GiB/s" -msgstr "" +msgstr "GiB/s" -#: deluge/core/filtermanager.py:94 deluge/core/torrentmanager.py:973 -#: deluge/ui/gtkui/filtertreeview.py:78 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:282 +#: deluge/ui/common.py:43 deluge/ui/common.py:47 +#: deluge/ui/gtkui/statusbar.py:309 deluge/ui/gtkui/filtertreeview.py:131 +#: deluge/ui/web/js/deluge-all/Statusbar.js:313 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:317 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:373 +#: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:107 +#: deluge/ui/web/js/deluge-all/UI.js:49 deluge/ui/web/js/deluge-all/UI.js:52 +#: deluge/ui/web/js/deluge-all/details/StatusTab.js:121 +#: deluge/ui/web/js/deluge-all/add/AddWindow.js:209 msgid "Error" msgstr "錯誤" -#: deluge/core/torrentmanager.py:939 +#: deluge/ui/common.py:49 deluge/ui/web/js/deluge-all/UI.js:54 +#: deluge/ui/web/js/deluge-all/details/StatusTab.js:123 msgid "Announce OK" -msgstr "" +msgstr "通告完成" -#: deluge/core/torrentmanager.py:955 +#: deluge/ui/common.py:50 deluge/ui/web/js/deluge-all/UI.js:55 +#: deluge/ui/web/js/deluge-all/details/StatusTab.js:124 msgid "Announce Sent" -msgstr "" +msgstr "通告已送出" -#: deluge/core/torrentmanager.py:963 +#: deluge/ui/common.py:48 deluge/ui/web/js/deluge-all/UI.js:53 +#: deluge/ui/web/js/deluge-all/details/StatusTab.js:122 msgid "Warning" msgstr "警告" -#: deluge/plugins/notifications/notifications/core.py:142 -#: deluge/plugins/notifications/notifications/core.py:175 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:123 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:156 #, python-format msgid "There was an error sending the notification email: %s" -msgstr "" +msgstr "在傳送通知電郵時發生錯誤:%s" -#: deluge/plugins/notifications/notifications/core.py:161 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:142 #, python-format msgid "The server didn't reply properly to the helo greeting: %s" -msgstr "" +msgstr "伺服器對問候沒有正常回應:%s" -#: deluge/plugins/notifications/notifications/core.py:166 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:147 #, python-format msgid "The server didn't accept the username/password combination: %s" -msgstr "" +msgstr "伺服器不接受該帳號/密碼組合:%s" -#: deluge/plugins/notifications/notifications/core.py:190 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:171 msgid "Notification email sent." -msgstr "" +msgstr "通知電郵已送出。" -#: deluge/plugins/notifications/notifications/core.py:198 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:178 #, python-format msgid "Finished Torrent \"%(name)s\"" -msgstr "" +msgstr "完成種子「%(name)s」" -#: deluge/plugins/notifications/notifications/core.py:200 +#: deluge/plugins/Notifications/deluge/plugins/notifications/core.py:180 #, python-format msgid "" "This email is to inform you that Deluge has finished downloading " @@ -109,347 +140,376 @@ "Thank you,\n" "Deluge." msgstr "" +"這封電子郵件是來提醒您,Deluge 已經完成下載「%(name)s」,當中包含了 %(num_files)i 項檔案。\n" +"若要停止接收這類提醒,請在 Deluge 的偏好設定內關閉電郵通知。\n" +"\n" +"謝謝您,\n" +"Deluge" -#: deluge/plugins/notifications/notifications/gtkui.py:178 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:159 msgid "Notification Blink shown" -msgstr "" +msgstr "顯示閃爍通知" -#: deluge/plugins/notifications/notifications/gtkui.py:183 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:164 msgid "Popup notification is not enabled." -msgstr "" +msgstr "彈出通知未被啟用。" -#: deluge/plugins/notifications/notifications/gtkui.py:185 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:166 msgid "pynotify is not installed" -msgstr "" +msgstr "pynotify 未被安裝" -#: deluge/plugins/notifications/notifications/gtkui.py:193 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:173 msgid "pynotify failed to show notification" -msgstr "" +msgstr "pynotify 顯示通知失敗" -#: deluge/plugins/notifications/notifications/gtkui.py:196 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:176 msgid "Notification popup shown" -msgstr "" +msgstr "顯示通知彈出視窗" -#: deluge/plugins/notifications/notifications/gtkui.py:200 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:180 msgid "Sound notification not enabled" -msgstr "" +msgstr "音效通知未被啟用" -#: deluge/plugins/notifications/notifications/gtkui.py:202 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:182 msgid "pygame is not installed" -msgstr "" +msgstr "pygame 未被安裝" -#: deluge/plugins/notifications/notifications/gtkui.py:214 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:194 #, python-format msgid "Sound notification failed %s" -msgstr "" +msgstr "音效通知失敗 %s" -#: deluge/plugins/notifications/notifications/gtkui.py:218 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:198 msgid "Sound notification Success" -msgstr "" +msgstr "音效通知成功" -#: deluge/plugins/notifications/notifications/gtkui.py:241 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:221 msgid "Finished Torrent" -msgstr "" +msgstr "種子已完成" -#: deluge/plugins/notifications/notifications/gtkui.py:242 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:222 #, python-format msgid "" -"The torrent \"%(name)s\" including %(num_files)i has finished downloading." +"The torrent \"%(name)s\" including %(num_files)i file(s) has finished " +"downloading." msgstr "" -#: deluge/plugins/notifications/notifications/gtkui.py:646 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:266 +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:297 +msgid "Notifications" +msgstr "通知" + +#: deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py:616 msgid "Choose Sound File" -msgstr "" +msgstr "選擇音效檔案" -#: deluge/plugins/notifications/notifications/data/config.glade:29 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:29 msgid "Notifications" -msgstr "" +msgstr "通知" -#: deluge/plugins/notifications/notifications/data/config.glade:81 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:81 msgid "Tray icon blinks enabled" -msgstr "" +msgstr "啟用系統匣圖示閃爍" -#: deluge/plugins/notifications/notifications/data/config.glade:93 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:93 msgid "Popups enabled" -msgstr "" +msgstr "啟用彈出視窗" -#: deluge/plugins/notifications/notifications/data/config.glade:108 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:108 msgid "Sound enabled" -msgstr "" +msgstr "啟用音效" -#: deluge/plugins/notifications/notifications/data/config.glade:144 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:144 msgid "UI Notifications" -msgstr "" +msgstr "使用者介面通知" -#: deluge/plugins/notifications/notifications/data/config.glade:175 -#: deluge/ui/gtkui/glade/connection_manager.glade:28 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:175 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:131 +#: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:2 msgid "Hostname:" -msgstr "" +msgstr "主機名稱:" -#: deluge/plugins/notifications/notifications/data/config.glade:199 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3358 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3542 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3726 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3912 -#: deluge/ui/gtkui/glade/connection_manager.glade:56 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:199 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:132 +#: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:3 +#: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:73 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:84 +#: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:58 +#: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:151 msgid "Port:" -msgstr "" +msgstr "連接埠:" -#: deluge/plugins/notifications/notifications/data/config.glade:231 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3439 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3623 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3807 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3994 -#: deluge/ui/gtkui/glade/connection_manager.glade:143 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:231 +#: deluge/ui/gtkui/dialogs.py:197 deluge/ui/gtkui/dialogs.py:258 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:133 +#: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:5 +#: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:85 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:96 msgid "Username:" -msgstr "" +msgstr "使用者名稱:" -#: deluge/plugins/notifications/notifications/data/config.glade:255 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2129 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3306 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3490 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3674 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3858 -#: deluge/ui/gtkui/glade/connection_manager.glade:132 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:255 +#: deluge/ui/gtkui/dialogs.py:205 deluge/ui/gtkui/dialogs.py:286 +#: deluge/ui/gtkui/dialogs.py:397 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:38 +#: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:4 +#: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:91 +#: deluge/ui/web/js/deluge-all/LoginWindow.js:70 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:105 msgid "Password:" -msgstr "" +msgstr "密碼:" -#: deluge/plugins/notifications/notifications/data/config.glade:360 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:360 msgid "Recipients" -msgstr "" +msgstr "收件人" -#: deluge/plugins/notifications/notifications/data/config.glade:383 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:383 msgid "Server requires TLS/SSL" -msgstr "" +msgstr "伺服器需要 TLS/SSL" -#: deluge/plugins/notifications/notifications/data/config.glade:398 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:633 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:783 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:398 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:102 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:108 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:163 msgid "From:" -msgstr "" +msgstr "從:" -#: deluge/plugins/notifications/notifications/data/config.glade:421 -#: deluge/ui/gtkui/preferences.py:91 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:421 +#: deluge/ui/gtkui/preferences.py:123 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:2 +#: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:65 +#: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:83 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:81 msgid "Enabled" -msgstr "" +msgstr "已啟用" -#: deluge/plugins/notifications/notifications/data/config.glade:443 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:443 msgid "Email Notifications" -msgstr "" +msgstr "電郵通知" -#: deluge/plugins/notifications/notifications/data/config.glade:460 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:460 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:147 +#: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:51 +#: deluge/ui/web/js/deluge-all/preferences/CachePage.js:52 msgid "Settings" -msgstr "" +msgstr "設定" -#: deluge/plugins/notifications/notifications/data/config.glade:495 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:495 msgid "" "This configuration does not mean that you'll actually receive notifications " "for all these events." -msgstr "" +msgstr "這個設定不代表您實際上可接受到所有這些事件的通知。" -#: deluge/plugins/notifications/notifications/data/config.glade:513 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:513 msgid "Subscriptions" -msgstr "" +msgstr "訂閱" -#: deluge/plugins/notifications/notifications/data/config.glade:594 +#: deluge/plugins/Notifications/deluge/plugins/notifications/data/config.glade:594 msgid "Sound Customization" +msgstr "音效自訂" + +#: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:32 +#: deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py:38 +msgid "Extractor" msgstr "" -#: deluge/plugins/extractor/extractor/data/extractor_prefs.glade:27 +#: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:27 msgid "Extract to:" -msgstr "" +msgstr "解壓縮到:" -#: deluge/plugins/extractor/extractor/data/extractor_prefs.glade:41 -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:130 -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:306 -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:384 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:162 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:228 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:288 -#: deluge/ui/gtkui/glade/main_window.glade:2031 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:373 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:134 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:318 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:438 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:531 +#: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:41 msgid "Select A Folder" -msgstr "" +msgstr "選擇資料夾" -#: deluge/plugins/extractor/extractor/data/extractor_prefs.glade:69 +#: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:69 msgid "Create torrent name sub-folder" -msgstr "" +msgstr "以種子名稱建立子資料夾" -#: deluge/plugins/extractor/extractor/data/extractor_prefs.glade:73 +#: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:73 msgid "" "This option will create a sub-folder using the torrent's name within the " "selected extract folder and put the extracted files there." -msgstr "" +msgstr "這個選項將會以種子名稱建立子資料夾,之後將檔案解壓縮到那裏。" -#: deluge/plugins/extractor/extractor/data/extractor_prefs.glade:87 -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:53 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2847 -#: deluge/ui/gtkui/glade/main_window.glade:2183 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:705 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:65 +#: deluge/plugins/Extractor/deluge/plugins/extractor/data/extractor_prefs.glade:87 +#: deluge/ui/gtkui/glade/path_combo_chooser.ui.h:3 msgid "General" -msgstr "" +msgstr "一般" -#: deluge/plugins/execute/execute/gtkui.py:51 +#: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:30 msgid "Torrent Complete" -msgstr "" +msgstr "Torrent 完成" -#: deluge/plugins/execute/execute/gtkui.py:52 +#: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:31 msgid "Torrent Added" -msgstr "" +msgstr "Torrent 已加入" + +#: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:32 +msgid "Torrent Removed" +msgstr "Torrent 已移除" -#: deluge/plugins/execute/execute/gtkui.py:77 -#: deluge/plugins/execute/execute/gtkui.py:88 +#: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:58 +#: deluge/plugins/Execute/deluge/plugins/execute/gtkui.py:68 msgid "Execute" -msgstr "" +msgstr "執行" -#: deluge/plugins/execute/execute/data/execute_prefs.glade:29 +#: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:29 msgid "Event" -msgstr "" +msgstr "事件" -#: deluge/plugins/execute/execute/data/execute_prefs.glade:41 +#: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:41 msgid "Command" -msgstr "" +msgstr "指令" -#: deluge/plugins/execute/execute/data/execute_prefs.glade:112 +#: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:112 msgid "Add Command" -msgstr "" +msgstr "新增指令" -#: deluge/plugins/execute/execute/data/execute_prefs.glade:151 +#: deluge/plugins/Execute/deluge/plugins/execute/data/execute_prefs.glade:151 msgid "Commands" -msgstr "" +msgstr "指令" -#: deluge/plugins/blocklist/blocklist/webui.py:49 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:19 msgid "Emule IP list (GZip)" -msgstr "" +msgstr "Emule IP 清單 (GZip)" -#: deluge/plugins/blocklist/blocklist/webui.py:50 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:20 msgid "SafePeer Text (Zipped)" -msgstr "" +msgstr "SafePeer 文字檔 (已壓縮)" -#: deluge/plugins/blocklist/blocklist/webui.py:51 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:21 msgid "PeerGuardian Text (Uncompressed)" -msgstr "" +msgstr "PeerGuardian 文字檔 (未壓縮)" -#: deluge/plugins/blocklist/blocklist/webui.py:52 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/webui.py:22 msgid "PeerGuardian P2B (GZip)" -msgstr "" +msgstr "PeerGuardian P2B (GZip)" -#: deluge/plugins/blocklist/blocklist/peerguardian.py:31 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:39 msgid "Invalid leader" -msgstr "" +msgstr "無效的 Leader" -#: deluge/plugins/blocklist/blocklist/peerguardian.py:35 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:43 msgid "Invalid magic code" -msgstr "" +msgstr "無效的 Magic Code" -#: deluge/plugins/blocklist/blocklist/peerguardian.py:40 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/peerguardian.py:48 msgid "Invalid version" -msgstr "" +msgstr "無效的版本" -#: deluge/plugins/blocklist/blocklist/gtkui.py:67 -#: deluge/plugins/blocklist/blocklist/gtkui.py:155 -#: deluge/plugins/blocklist/blocklist/gtkui.py:186 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:52 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:139 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/gtkui.py:178 msgid "Blocklist" -msgstr "" +msgstr "封鎖清單" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:27 -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:385 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1018 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:32 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:436 +#: deluge/ui/gtkui/glade/add_torrent_dialog.url.ui.h:3 msgid "URL:" -msgstr "" +msgstr "URL:" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:91 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:107 msgid "Days" -msgstr "" +msgstr "日" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:117 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:138 msgid "Check for new list every:" -msgstr "" +msgstr "每過多久檢查新清單:" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:133 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:154 msgid "Import blocklist on startup" -msgstr "" +msgstr "啟動時匯入封鎖清單" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:153 -#: deluge/plugins/webui/webui/data/config.glade:94 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4173 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:176 +#: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:94 msgid "Settings" -msgstr "" +msgstr "設定" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:190 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:216 msgid "Download the blocklist file if necessary and import the file." -msgstr "" +msgstr "下載封鎖清單(如果需要)並匯入檔案。" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:210 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:240 msgid "Check Download and Import" -msgstr "" +msgstr "檢查下載並匯入" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:232 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:262 msgid "Download a new blocklist file and import it." -msgstr "" +msgstr "下載新的封鎖清單並匯入該檔案。" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:252 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:286 msgid "Force Download and Import" -msgstr "" +msgstr "強制下載並匯入" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:276 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:313 msgid "Blocklist is up to date" -msgstr "" +msgstr "封鎖清單為最新" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:293 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:472 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:333 msgid "Options" -msgstr "" +msgstr "選項" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:397 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3427 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3611 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3795 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3982 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:449 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:48 msgid "Type:" -msgstr "" +msgstr "類型:" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:409 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:462 msgid "Date:" -msgstr "" +msgstr "日期:" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:421 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:475 msgid "File Size:" -msgstr "" +msgstr "檔案大小:" -#: deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade:441 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4822 +#: deluge/plugins/Blocklist/deluge/plugins/blocklist/data/blocklist_pref.glade:496 msgid "Info" -msgstr "" +msgstr "資訊" + +#: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:32 +#: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:39 +msgid "WebUi" +msgstr "WebUi" -#: deluge/plugins/webui/webui/gtkui.py:97 +#: deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py:76 msgid "" "The Deluge web interface is not installed, please install the\n" "interface and try again" msgstr "" -#: deluge/plugins/webui/webui/data/config.glade:27 +#: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:27 msgid "Enable web interface" -msgstr "" +msgstr "啟用網頁介面" -#: deluge/plugins/webui/webui/data/config.glade:41 +#: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:41 msgid "Enable SSL" -msgstr "" +msgstr "啟用 SSL" -#: deluge/plugins/webui/webui/data/config.glade:60 +#: deluge/plugins/WebUi/deluge/plugins/webui/data/config.glade:60 msgid "Listening port:" -msgstr "" +msgstr "聆聽埠:" -#: deluge/plugins/autoadd/autoadd/core.py:136 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:124 msgid "Watch folder does not exist." msgstr "" -#: deluge/plugins/autoadd/autoadd/core.py:139 -#: deluge/plugins/autoadd/autoadd/core.py:308 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:129 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/core.py:404 msgid "Path does not exist." +msgstr "路徑不存在。" + +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:387 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:391 +msgid "AutoAdd" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/config.glade:41 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/config.glade:41 msgid "Watch Folders:" msgstr "" @@ -457,228 +517,255 @@ msgid "AutoAdd Error" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:78 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:7 msgid "Watch Folder Properties" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:143 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:151 msgid "Enable this watch folder" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:164 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:173 msgid "Watch Folder" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:195 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:211 msgid "Delete .torrent after adding" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:211 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:232 msgid "Append extension after adding:" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:228 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:254 msgid ".added" -msgstr "" +msgstr ".added" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:248 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:367 msgid "Torrent File Action" -msgstr "" +msgstr "Torrent 檔案動作" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:275 +#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:269 msgid "Set download location" -msgstr "" +msgstr "設定下載位置" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:325 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:396 +#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:319 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:393 msgid "Download Location" -msgstr "" +msgstr "下載位置" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:353 +#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:346 msgid "Set move completed location" -msgstr "" +msgstr "設定檔案下載完成後移動的位置" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:418 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:569 msgid "Move Completed" -msgstr "" +msgstr "完成後移動的位置" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:444 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:599 msgid "Label: " -msgstr "" +msgstr "標籤: " -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:475 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:632 msgid "Label" -msgstr "" +msgstr "標籤" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:492 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:652 msgid "Main" -msgstr "" +msgstr "主要" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:524 -#: deluge/ui/gtkui/glade/main_window.glade:1811 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:726 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:123 msgid "Max Upload Speed:" -msgstr "" +msgstr "最高上傳速度:" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:541 -#: deluge/ui/gtkui/glade/main_window.glade:1798 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:551 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:743 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:150 msgid "Max Connections:" -msgstr "" +msgstr "最大連接數:" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:558 -#: deluge/ui/gtkui/glade/main_window.glade:1861 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:565 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:760 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:173 msgid "Max Upload Slots:" -msgstr "" +msgstr "最大上傳連接數量:" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:665 -#: deluge/ui/gtkui/glade/main_window.glade:1824 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:885 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:97 msgid "Max Download Speed:" -msgstr "" +msgstr "最高下載速度:" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:691 -#: deluge/ui/gtkui/glade/main_window.glade:1900 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:634 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:912 msgid "Bandwidth" -msgstr "" +msgstr "頻寬" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:722 -#: deluge/plugins/label/label/data/label_options.glade:349 -#: deluge/ui/gtkui/glade/main_window.glade:1952 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:951 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:583 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:42 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:225 msgid "Stop seed at ratio:" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:746 -#: deluge/plugins/label/label/data/label_options.glade:364 -#: deluge/ui/gtkui/glade/main_window.glade:1993 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:976 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:599 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:43 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:253 msgid "Remove at ratio" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:762 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:992 +#: deluge/ui/web/render/tab_status.html:18 msgid "Auto Managed:" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:890 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1131 msgid "Add Paused:" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:936 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1184 msgid "Queue to:" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:954 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1203 +#: deluge/ui/web/js/deluge-all/Menus.js:192 msgid "Top" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:967 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1218 +#: deluge/ui/web/js/deluge-all/Menus.js:210 msgid "Bottom" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:1017 -#: deluge/ui/gtkui/glade/main_window.glade:2069 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1278 msgid "Queue" msgstr "" -#: deluge/plugins/autoadd/autoadd/data/autoadd_options.glade:1037 -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:624 -#: deluge/ui/gtkui/glade/connection_manager.glade:457 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:1301 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:6 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:14 +#: deluge/ui/web/js/deluge-all/Menus.js:99 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:49 +#: deluge/ui/web/js/deluge-all/add/OptionsTab.js:40 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:95 msgid "Options" +msgstr "選項" + +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:162 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:285 +msgid "Scheduler" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:238 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:227 msgid "Download Limit:" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:247 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:236 msgid "Upload Limit:" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:256 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:245 msgid "Active Torrents:" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:265 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:254 msgid "Active Downloading:" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:274 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:263 msgid "Active Seeding:" msgstr "" -#: deluge/plugins/scheduler/scheduler/gtkui.py:288 +#: deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py:277 msgid "Slow Settings" msgstr "" -#: deluge/plugins/label/label/core.py:189 +#: deluge/plugins/Label/deluge/plugins/label/core.py:171 msgid "Invalid label, valid characters:[a-z0-9_-]" msgstr "" -#: deluge/plugins/label/label/core.py:190 +#: deluge/plugins/Label/deluge/plugins/label/core.py:172 msgid "Empty Label" msgstr "" -#: deluge/plugins/label/label/core.py:191 +#: deluge/plugins/Label/deluge/plugins/label/core.py:173 msgid "Label already exists" msgstr "" -#: deluge/plugins/label/label/core.py:199 -#: deluge/plugins/label/label/core.py:279 -#: deluge/plugins/label/label/core.py:314 +#: deluge/plugins/Label/deluge/plugins/label/core.py:181 +#: deluge/plugins/Label/deluge/plugins/label/core.py:261 +#: deluge/plugins/Label/deluge/plugins/label/core.py:296 msgid "Unknown Label" msgstr "" -#: deluge/plugins/label/label/core.py:315 +#: deluge/plugins/Label/deluge/plugins/label/core.py:297 msgid "Unknown Torrent" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:7 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:174 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:164 msgid "Label Options" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:36 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:252 msgid "Label Options" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:158 -msgid "Upload Slots:\t" +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:368 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:35 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:73 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:30 +msgid "Upload Slots:" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:171 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:382 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:32 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:69 msgid "Upload Speed:" -msgstr "" +msgstr "上傳速度:" -#: deluge/plugins/label/label/data/label_options.glade:184 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:396 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:33 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:75 msgid "Download Speed:" -msgstr "" +msgstr "下載速度:" -#: deluge/plugins/label/label/data/label_options.glade:226 +#: deluge/plugins/Stats/deluge/plugins/stats/data/config.glade:168 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:444 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:31 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:71 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:28 msgid "Connections:" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:270 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:512 msgid "Apply per torrent max settings:" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:283 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:529 msgid "Maximum" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:336 -#: deluge/ui/gtkui/glade/main_window.glade:1930 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:569 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:41 +#: deluge/ui/web/js/deluge-all/Menus.js:181 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:215 msgid "Auto Managed" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:410 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:666 msgid "Apply Queue settings:" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:426 -#: deluge/ui/gtkui/preferences.py:77 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:686 +#: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:75 +#: deluge/ui/web/js/deluge-all/Menus.js:186 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:196 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:41 msgid "Queue" -msgstr "" +msgstr "佇列" -#: deluge/plugins/label/label/data/label_options.glade:453 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:204 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:714 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:44 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:76 msgid "Move completed to:" msgstr "" @@ -690,60 +777,68 @@ msgid "Location" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:560 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:841 msgid "(1 line per tracker)" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:576 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:856 msgid "Automatically apply label:" -msgstr "" +msgstr "自動套用標籤:" -#: deluge/plugins/label/label/data/label_options.glade:593 -#: deluge/ui/gtkui/filtertreeview.py:70 -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:462 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:877 +#: deluge/ui/gtkui/filtertreeview.py:129 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:9 +#: deluge/ui/web/js/deluge-all/FilterPanel.js:53 msgid "Trackers" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:646 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:8 msgid "Add Label" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:680 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:94 msgid "Add Label" msgstr "" -#: deluge/plugins/label/label/data/label_options.glade:711 +#: deluge/plugins/Label/deluge/plugins/label/data/label_options.glade:130 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:23 +#: deluge/ui/web/js/deluge-all/details/DetailsTab.js:47 msgid "Name:" msgstr "" -#: deluge/plugins/label/label/data/label_pref.glade:22 +#: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:22 msgid "Use the sidebar to add,edit and remove labels. \n" msgstr "" -#: deluge/plugins/label/label/data/label_pref.glade:32 +#: deluge/plugins/Label/deluge/plugins/label/data/label_pref.glade:32 msgid "Labels" msgstr "" -#: deluge/plugins/label/label/gtkui/__init__.py:77 -#: deluge/plugins/label/label/gtkui/__init__.py:111 -#: deluge/plugins/label/label/gtkui/submenu.py:48 -#: deluge/plugins/label/label/gtkui/label_config.py:59 -#: deluge/plugins/label/label/gtkui/label_config.py:66 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/__init__.py:47 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/__init__.py:80 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py:30 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/label_config.py:34 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/label_config.py:41 msgid "Label" msgstr "標籤" -#: deluge/plugins/label/label/gtkui/sidebar_menu.py:66 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:45 msgid "Label _Options" msgstr "" -#: deluge/plugins/label/label/gtkui/sidebar_menu.py:67 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:46 msgid "_Remove Label" -msgstr "" +msgstr "移除標籤(_R)" -#: deluge/plugins/label/label/gtkui/sidebar_menu.py:68 +#: deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py:47 msgid "_Add Label" msgstr "" +#: deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py:24 +#: deluge/ui/gtkui/filtertreeview.py:196 +msgid "No Label" +msgstr "" + #: deluge/ui/countries.py:9 msgid "Afghanistan" msgstr "" @@ -1728,64 +1823,53 @@ msgid "Zimbabwe" msgstr "" -#: deluge/ui/web/server.py:661 +#: deluge/ui/client.py:629 deluge/ui/gtkui/connectionmanager.py:459 +msgid "" +"Deluge cannot find the 'deluged' executable, it is likely that you forgot to " +"install the deluged package or it's not in your PATH." +msgstr "" + +#: deluge/ui/web/server.py:623 msgid "Starting server in PID" msgstr "" -#: deluge/ui/web/json_api.py:733 deluge/ui/web/json_api.py:750 -#: deluge/ui/web/json_api.py:759 deluge/ui/web/json_api.py:762 -#: deluge/ui/web/json_api.py:769 deluge/ui/gtkui/connectionmanager.py:75 -#: deluge/ui/gtkui/connectionmanager.py:215 -#: deluge/ui/gtkui/connectionmanager.py:246 -#: deluge/ui/gtkui/connectionmanager.py:283 -#: deluge/ui/gtkui/connectionmanager.py:296 -#: deluge/ui/gtkui/connectionmanager.py:378 -#: deluge/ui/gtkui/connectionmanager.py:389 -#: deluge/ui/gtkui/connectionmanager.py:453 -#: deluge/ui/gtkui/connectionmanager.py:570 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:76 msgid "Offline" msgstr "" -#: deluge/ui/web/json_api.py:755 deluge/ui/gtkui/connectionmanager.py:76 -#: deluge/ui/gtkui/connectionmanager.py:274 -#: deluge/ui/gtkui/connectionmanager.py:382 -#: deluge/ui/gtkui/connectionmanager.py:553 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:73 msgid "Online" msgstr "" -#: deluge/ui/web/json_api.py:775 deluge/ui/gtkui/connectionmanager.py:77 -#: deluge/ui/gtkui/connectionmanager.py:313 -#: deluge/ui/gtkui/connectionmanager.py:372 -#: deluge/ui/gtkui/connectionmanager.py:382 -#: deluge/ui/gtkui/connectionmanager.py:441 -#: deluge/ui/gtkui/connectionmanager.py:553 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:79 msgid "Connected" msgstr "" -#: deluge/ui/web/json_api.py:802 +#: deluge/ui/web/json_api.py:829 msgid "Daemon doesn't exist" msgstr "" -#: deluge/ui/web/json_api.py:808 +#: deluge/ui/web/json_api.py:835 msgid "Daemon not running" msgstr "" -#: deluge/ui/console/statusbars.py:104 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1071 +#: deluge/ui/console/statusbars.py:107 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:125 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:224 msgid "DHT" msgstr "" -#: deluge/ui/gtkui/notification.py:79 +#: deluge/ui/gtkui/notification.py:57 msgid "Torrent complete" msgstr "" -#: deluge/ui/gtkui/notification.py:80 +#: deluge/ui/gtkui/notification.py:59 msgid "Including" msgstr "" -#: deluge/ui/gtkui/notification.py:80 +#: deluge/ui/gtkui/notification.py:59 msgid "files" -msgstr "" +msgstr "檔案" #: deluge/ui/gtkui/notification.py:109 #, python-format @@ -1799,348 +1883,470 @@ "Deluge" msgstr "" -#: deluge/ui/gtkui/torrentview.py:213 +#: deluge/ui/common.py:38 deluge/ui/web/js/deluge-all/UI.js:44 +msgid "Downloading" +msgstr "" + +#: deluge/ui/common.py:39 deluge/ui/gtkui/glade/preferences_dialog.ui.h:99 +#: deluge/ui/web/js/deluge-all/UI.js:45 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:123 +msgid "Seeding" +msgstr "播種中" + +#: deluge/ui/common.py:40 deluge/ui/web/js/deluge-all/UI.js:46 +msgid "Paused" +msgstr "" + +#: deluge/ui/common.py:37 deluge/ui/common.py:41 +#: deluge/ui/web/js/deluge-all/UI.js:43 deluge/ui/web/js/deluge-all/UI.js:47 +msgid "Checking" +msgstr "檢查中" + +#: deluge/ui/common.py:42 deluge/ui/web/js/deluge-all/UI.js:48 +msgid "Queued" +msgstr "" + +#: deluge/ui/gtkui/torrentview.py:143 deluge/ui/gtkui/torrentview.py:229 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:116 msgid "Name" msgstr "名稱" -#: deluge/ui/gtkui/torrentview.py:216 -#: deluge/ui/gtkui/createtorrentdialog.py:90 deluge/ui/gtkui/files_tab.py:143 -#: deluge/ui/gtkui/addtorrentdialog.py:124 +#: deluge/ui/gtkui/torrentview.py:233 +#: deluge/ui/gtkui/createtorrentdialog.py:78 deluge/ui/gtkui/files_tab.py:127 +#: deluge/ui/gtkui/addtorrentdialog.py:110 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:167 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:122 +#: deluge/ui/web/js/deluge-all/details/FilesTab.js:44 +#: deluge/ui/web/js/deluge-all/add/FilesTab.js:54 msgid "Size" msgstr "" -#: deluge/ui/gtkui/torrentview.py:219 +#: deluge/ui/gtkui/torrentview.py:236 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:235 msgid "Downloaded" msgstr "已下載" -#: deluge/ui/gtkui/torrentview.py:222 +#: deluge/ui/gtkui/torrentview.py:239 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:242 msgid "Uploaded" msgstr "" -#: deluge/ui/gtkui/torrentview.py:225 deluge/ui/gtkui/torrentview.py:555 -#: deluge/ui/gtkui/peers_tab.py:129 deluge/ui/gtkui/files_tab.py:156 +#: deluge/ui/gtkui/torrentview.py:244 deluge/ui/gtkui/peers_tab.py:103 +#: deluge/ui/gtkui/files_tab.py:140 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:128 +#: deluge/ui/web/js/deluge-all/details/FilesTab.js:52 msgid "Progress" msgstr "" -#: deluge/ui/gtkui/torrentview.py:229 deluge/ui/gtkui/torrentview.py:235 +#: deluge/ui/gtkui/torrentview.py:260 deluge/ui/gtkui/torrentview.py:266 msgid "Seeders" -msgstr "" +msgstr "播種者" -#: deluge/ui/gtkui/torrentview.py:232 deluge/ui/gtkui/torrentview.py:235 +#: deluge/ui/gtkui/torrentview.py:251 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:141 +#: deluge/ui/web/js/deluge-all/details/PeersTab.js:63 msgid "Peers" msgstr "" -#: deluge/ui/gtkui/torrentview.py:237 deluge/ui/gtkui/peers_tab.py:142 +#: deluge/ui/gtkui/torrentview.py:256 deluge/ui/gtkui/peers_tab.py:116 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:148 msgid "Down Speed" -msgstr "" +msgstr "下載速度" -#: deluge/ui/gtkui/torrentview.py:239 deluge/ui/gtkui/peers_tab.py:155 +#: deluge/ui/gtkui/torrentview.py:258 deluge/ui/gtkui/peers_tab.py:129 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:154 msgid "Up Speed" -msgstr "" +msgstr "上傳速度" -#: deluge/ui/gtkui/torrentview.py:241 +#: deluge/ui/gtkui/torrentview.py:260 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:256 msgid "Down Limit" msgstr "" -#: deluge/ui/gtkui/torrentview.py:243 +#: deluge/ui/gtkui/torrentview.py:262 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:263 msgid "Up Limit" msgstr "" -#: deluge/ui/gtkui/torrentview.py:245 +#: deluge/ui/gtkui/torrentview.py:264 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:160 msgid "ETA" msgstr "" -#: deluge/ui/gtkui/torrentview.py:247 +#: deluge/ui/gtkui/torrentview.py:266 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:166 msgid "Ratio" msgstr "" -#: deluge/ui/gtkui/torrentview.py:249 +#: deluge/ui/gtkui/torrentview.py:268 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:173 msgid "Avail" msgstr "" -#: deluge/ui/gtkui/torrentview.py:251 +#: deluge/ui/gtkui/torrentview.py:270 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:180 msgid "Added" -msgstr "" +msgstr "已新增" -#: deluge/ui/gtkui/torrentview.py:253 -#: deluge/ui/gtkui/createtorrentdialog.py:105 -#: deluge/ui/gtkui/edittrackersdialog.py:86 +#: deluge/ui/gtkui/torrentview.py:276 +#: deluge/ui/gtkui/createtorrentdialog.py:93 +#: deluge/ui/gtkui/edittrackersdialog.py:72 +#: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:80 +#: deluge/ui/web/js/deluge-all/TorrentGrid.js:201 msgid "Tracker" msgstr "" -#: deluge/ui/gtkui/torrentview.py:257 +#: deluge/ui/gtkui/torrentview.py:288 msgid "Save Path" msgstr "" -#: deluge/ui/gtkui/peers_tab.py:100 +#: deluge/ui/gtkui/peers_tab.py:74 msgid "Address" msgstr "網址" -#: deluge/ui/gtkui/peers_tab.py:116 +#: deluge/ui/gtkui/peers_tab.py:90 msgid "Client" msgstr "用戶端" -#: deluge/ui/gtkui/new_release_dialog.py:72 +#: deluge/ui/gtkui/new_release_dialog.py:46 msgid "Client Version" msgstr "" -#: deluge/ui/gtkui/systemtray.py:201 deluge/ui/gtkui/systemtray.py:258 -#: deluge/ui/gtkui/aboutdialog.py:55 -#: deluge/data/share/applications/deluge.desktop.in.h:2 +#: deluge/ui/data/share/applications/deluge.desktop.in.h:1 +#: deluge/ui/gtkui/systemtray.py:86 deluge/ui/gtkui/systemtray.py:169 +#: deluge/ui/gtkui/systemtray.py:229 deluge/ui/gtkui/aboutdialog.py:28 +#: deluge/ui/web/js/deluge-all/Toolbar.js:45 msgid "Deluge" msgstr "" -#: deluge/ui/gtkui/systemtray.py:201 +#: deluge/ui/gtkui/systemtray.py:169 msgid "Not Connected..." msgstr "" -#: deluge/ui/gtkui/systemtray.py:249 deluge/ui/gtkui/systemtray.py:253 -#: deluge/ui/gtkui/systemtray.py:423 deluge/ui/gtkui/common.py:67 -#: deluge/ui/gtkui/statusbar.py:397 deluge/ui/gtkui/statusbar.py:425 -#: deluge/ui/gtkui/statusbar.py:452 +#: deluge/ui/gtkui/systemtray.py:220 deluge/ui/gtkui/systemtray.py:224 +#: deluge/ui/web/js/deluge-all/Statusbar.js:85 +#: deluge/ui/web/js/deluge-all/Statusbar.js:133 +#: deluge/ui/web/js/deluge-all/Statusbar.js:181 +#: deluge/ui/web/js/deluge-all/Menus.js:119 +#: deluge/ui/web/js/deluge-all/Menus.js:138 +#: deluge/ui/web/js/deluge-all/Menus.js:157 +#: deluge/ui/web/js/deluge-all/Menus.js:176 msgid "Unlimited" -msgstr "" +msgstr "無限制" -#: deluge/ui/gtkui/systemtray.py:258 +#: deluge/ui/gtkui/systemtray.py:229 +#: deluge/ui/gtkui/glade/path_combo_chooser.ui.h:36 +#: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:107 +#: deluge/ui/web/js/deluge-all/Menus.js:204 +#: deluge/ui/web/js/deluge-all/Toolbar.js:89 msgid "Down" msgstr "" -#: deluge/ui/gtkui/systemtray.py:259 +#: deluge/ui/gtkui/systemtray.py:230 +#: deluge/ui/gtkui/glade/path_combo_chooser.ui.h:34 +#: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:102 +#: deluge/ui/web/js/deluge-all/Menus.js:198 +#: deluge/ui/web/js/deluge-all/Toolbar.js:83 +#: deluge/ui/web/js/deluge-all/FileBrowser.js:53 msgid "Up" msgstr "" -#: deluge/ui/gtkui/systemtray.py:403 deluge/ui/gtkui/menubar.py:436 -#: deluge/ui/gtkui/statusbar.py:401 +#: deluge/ui/web/js/deluge-all/Statusbar.js:143 msgid "Set Maximum Download Speed" -msgstr "" +msgstr "設定最高下載速度" -#: deluge/ui/gtkui/systemtray.py:417 deluge/ui/gtkui/menubar.py:437 -#: deluge/ui/gtkui/statusbar.py:429 +#: deluge/ui/web/js/deluge-all/Statusbar.js:191 msgid "Set Maximum Upload Speed" -msgstr "" - -#: deluge/ui/gtkui/systemtray.py:426 deluge/ui/gtkui/common.py:124 -#: deluge/ui/gtkui/common.py:125 deluge/ui/gtkui/menubar.py:81 -#: deluge/ui/gtkui/statusbar.py:399 deluge/ui/gtkui/statusbar.py:427 -#: deluge/ui/gtkui/statusbar.py:454 -msgid "Other..." -msgstr "" - -#: deluge/ui/gtkui/systemtray.py:470 -msgid "Deluge is password protected!" -msgstr "" - -#: deluge/ui/gtkui/systemtray.py:476 -msgid "Enter your password to continue" -msgstr "" +msgstr "設定最高上傳速度" -#: deluge/ui/gtkui/common.py:70 +#: deluge/ui/gtkui/common.py:73 msgid "Activated" msgstr "" -#: deluge/ui/gtkui/createtorrentdialog.py:80 deluge/ui/gtkui/files_tab.py:122 -#: deluge/ui/gtkui/addtorrentdialog.py:111 +#: deluge/ui/gtkui/common.py:97 deluge/ui/gtkui/menubar.py:71 +msgid "Other..." +msgstr "其他..." + +#: deluge/ui/gtkui/createtorrentdialog.py:68 deluge/ui/gtkui/files_tab.py:106 +#: deluge/ui/gtkui/addtorrentdialog.py:97 +#: deluge/ui/web/js/deluge-all/details/FilesTab.js:40 +#: deluge/ui/web/js/deluge-all/add/FilesTab.js:50 msgid "Filename" -msgstr "" +msgstr "檔案名稱" -#: deluge/ui/gtkui/createtorrentdialog.py:103 -#: deluge/ui/gtkui/edittrackersdialog.py:84 +#: deluge/ui/gtkui/createtorrentdialog.py:91 +#: deluge/ui/gtkui/edittrackersdialog.py:70 +#: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:76 msgid "Tier" msgstr "" -#: deluge/ui/gtkui/createtorrentdialog.py:143 +#: deluge/ui/gtkui/createtorrentdialog.py:131 msgid "Choose a file" -msgstr "" +msgstr "選擇檔案" -#: deluge/ui/gtkui/createtorrentdialog.py:172 +#: deluge/ui/gtkui/createtorrentdialog.py:160 msgid "Choose a folder" msgstr "" -#: deluge/ui/gtkui/createtorrentdialog.py:241 +#: deluge/ui/gtkui/createtorrentdialog.py:238 +#: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:2 msgid "Save .torrent file" -msgstr "" +msgstr "儲存 .torrent 檔案" -#: deluge/ui/gtkui/createtorrentdialog.py:253 -#: deluge/ui/gtkui/addtorrentdialog.py:563 +#: deluge/ui/gtkui/createtorrentdialog.py:249 +#: deluge/ui/gtkui/addtorrentdialog.py:548 msgid "Torrent files" -msgstr "" +msgstr "Torrent 檔案" -#: deluge/ui/gtkui/createtorrentdialog.py:257 -#: deluge/ui/gtkui/addtorrentdialog.py:567 +#: deluge/ui/gtkui/createtorrentdialog.py:253 +#: deluge/ui/gtkui/addtorrentdialog.py:552 msgid "All files" -msgstr "" +msgstr "所有檔案" -#: deluge/ui/gtkui/files_tab.py:56 +#: deluge/ui/gtkui/files_tab.py:33 deluge/ui/web/js/deluge-all/Menus.js:257 +#: deluge/ui/web/js/deluge-all/Deluge.js:163 msgid "Do Not Download" msgstr "" -#: deluge/ui/gtkui/files_tab.py:57 +#: deluge/ui/gtkui/files_tab.py:34 deluge/ui/web/js/deluge-all/Menus.js:262 +#: deluge/ui/web/js/deluge-all/Deluge.js:164 msgid "Normal Priority" msgstr "" -#: deluge/ui/gtkui/files_tab.py:58 +#: deluge/ui/gtkui/files_tab.py:35 deluge/ui/web/js/deluge-all/Menus.js:267 +#: deluge/ui/web/js/deluge-all/Deluge.js:165 msgid "High Priority" msgstr "" -#: deluge/ui/gtkui/files_tab.py:59 +#: deluge/ui/gtkui/files_tab.py:36 deluge/ui/web/js/deluge-all/Menus.js:272 +#: deluge/ui/web/js/deluge-all/Deluge.js:166 msgid "Highest Priority" msgstr "" -#: deluge/ui/gtkui/files_tab.py:169 +#: deluge/ui/gtkui/files_tab.py:153 +#: deluge/ui/web/js/deluge-all/details/FilesTab.js:60 msgid "Priority" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:103 -#: deluge/ui/gtkui/queuedtorrents.py:76 +#: deluge/ui/gtkui/addtorrentdialog.py:89 deluge/ui/gtkui/queuedtorrents.py:50 msgid "Torrent" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:215 +#: deluge/ui/gtkui/addtorrentdialog.py:193 msgid "Invalid File" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:220 +#: deluge/ui/gtkui/addtorrentdialog.py:231 msgid "Duplicate Torrent" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:220 +#: deluge/ui/gtkui/addtorrentdialog.py:231 msgid "You cannot add the same torrent twice." msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:501 +#: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "Unable to set file priority!" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:501 +#: deluge/ui/gtkui/addtorrentdialog.py:537 msgid "" "File prioritization is unavailable when using Compact allocation. Would you " "like to switch to Full allocation?" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:550 +#: deluge/ui/gtkui/addtorrentdialog.py:534 msgid "Choose a .torrent file" -msgstr "" +msgstr "選擇 .torrent 檔案" -#: deluge/ui/gtkui/addtorrentdialog.py:632 +#: deluge/ui/gtkui/addtorrentdialog.py:611 msgid "Invalid URL" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:632 +#: deluge/ui/gtkui/addtorrentdialog.py:612 msgid "is not a valid URL." msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:636 +#: deluge/ui/gtkui/addtorrentdialog.py:618 msgid "Downloading..." msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:678 +#: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Download Failed" msgstr "" -#: deluge/ui/gtkui/addtorrentdialog.py:678 +#: deluge/ui/gtkui/addtorrentdialog.py:660 msgid "Failed to download:" msgstr "" -#: deluge/ui/gtkui/queuedtorrents.py:136 +#: deluge/ui/gtkui/queuedtorrents.py:111 msgid " Torrents Queued" msgstr "" -#: deluge/ui/gtkui/queuedtorrents.py:138 +#: deluge/ui/gtkui/queuedtorrents.py:113 msgid " Torrent Queued" msgstr "" -#: deluge/ui/gtkui/preferences.py:72 +#: deluge/ui/gtkui/preferences.py:71 +#: deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js:85 msgid "Categories" msgstr "" -#: deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:42 msgid "Downloads" msgstr "" -#: deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:51 msgid "Network" msgstr "" -#: deluge/ui/gtkui/preferences.py:76 +#: deluge/plugins/Stats/deluge/plugins/stats/data/tabs.glade:94 +#: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:31 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:88 +#: deluge/ui/web/js/deluge-all/add/OptionsTab.js:94 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:42 msgid "Bandwidth" msgstr "" -#: deluge/ui/gtkui/preferences.py:77 +#: deluge/ui/console/modes/preferences.py:82 deluge/ui/gtkui/preferences.py:75 +#: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:41 +#: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:53 msgid "Interface" msgstr "" -#: deluge/ui/gtkui/preferences.py:77 +#: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:181 +#: deluge/ui/web/js/deluge-all/Statusbar.js:90 +#: deluge/ui/web/js/deluge-all/Statusbar.js:138 +#: deluge/ui/web/js/deluge-all/Statusbar.js:186 +#: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:42 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:85 msgid "Other" msgstr "" -#: deluge/ui/gtkui/preferences.py:77 +#: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/gtkui/preferences.py:901 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:41 msgid "Daemon" msgstr "" -#: deluge/ui/gtkui/preferences.py:77 +#: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:139 +#: deluge/ui/web/js/deluge-all/preferences/ProxyPage.js:42 +#: deluge/ui/web/js/deluge-all/preferences/ProxyPage.js:52 msgid "Proxy" msgstr "" -#: deluge/ui/gtkui/preferences.py:78 +#: deluge/ui/console/modes/preferences.py:83 deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/web/js/deluge-all/preferences/CachePage.js:41 msgid "Cache" msgstr "" -#: deluge/ui/gtkui/preferences.py:78 +#: deluge/ui/gtkui/preferences.py:76 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:41 msgid "Plugins" msgstr "" -#: deluge/ui/gtkui/preferences.py:93 +#: deluge/ui/gtkui/preferences.py:125 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:92 msgid "Plugin" msgstr "" -#: deluge/ui/gtkui/preferences.py:894 +#: deluge/ui/gtkui/preferences.py:769 +msgid "You must restart the deluge UI to change classic mode. Quit now?" +msgstr "" + +#: deluge/ui/gtkui/preferences.py:955 msgid "Select the Plugin" msgstr "" -#: deluge/ui/gtkui/preferences.py:905 +#: deluge/ui/gtkui/preferences.py:967 msgid "Plugin Eggs" msgstr "" -#: deluge/ui/gtkui/menubar.py:77 +#: deluge/ui/gtkui/torrentdetails.py:93 +msgid "_All" +msgstr "" + +#: deluge/ui/gtkui/torrentdetails.py:94 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:15 +msgid "_Status" +msgstr "狀態(_S)" + +#: deluge/ui/gtkui/torrentdetails.py:95 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:28 +msgid "_Details" +msgstr "" + +#: deluge/ui/gtkui/torrentdetails.py:96 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:29 +msgid "_Files" +msgstr "檔案(_F)" + +#: deluge/ui/gtkui/torrentdetails.py:97 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:30 +msgid "_Peers" +msgstr "" + +#: deluge/ui/gtkui/torrentdetails.py:98 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:44 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:34 +msgid "_Options" +msgstr "選項(_O)" + +#: deluge/ui/gtkui/menubar.py:67 msgid "Set Unlimited" msgstr "" -#: deluge/ui/gtkui/menubar.py:89 deluge/ui/gtkui/status_tab.py:128 +#: deluge/ui/gtkui/menubar.py:79 msgid "On" msgstr "" -#: deluge/ui/gtkui/menubar.py:92 deluge/ui/gtkui/status_tab.py:130 +#: deluge/ui/gtkui/menubar.py:82 msgid "Off" msgstr "" -#: deluge/ui/gtkui/menubar.py:319 +#: deluge/ui/gtkui/menubar.py:320 msgid "Choose a directory to move files to" msgstr "" -#: deluge/ui/gtkui/menubar.py:438 deluge/ui/gtkui/statusbar.py:456 +#: deluge/ui/web/js/deluge-all/Statusbar.js:96 msgid "Set Maximum Connections" msgstr "" -#: deluge/ui/gtkui/menubar.py:439 +#: deluge/ui/gtkui/menubar.py:440 msgid "Set Maximum Upload Slots" msgstr "" -#: deluge/ui/gtkui/gtkui.py:302 deluge/ui/gtkui/gtkui.py:317 +#: deluge/ui/gtkui/gtkui.py:352 deluge/ui/gtkui/gtkui.py:379 msgid "Turn off Classic Mode?" msgstr "" -#: deluge/ui/gtkui/gtkui.py:303 +#: deluge/ui/gtkui/gtkui.py:353 msgid "" "It appears that a Deluge daemon process (deluged) is already running.\n" "\n" "You will either need to stop the daemon or turn off Classic Mode to continue." msgstr "" -#: deluge/ui/gtkui/gtkui.py:312 +#: deluge/ui/gtkui/gtkui.py:360 +msgid "Enable Thin Client Mode?" +msgstr "" + +#: deluge/ui/gtkui/gtkui.py:361 +msgid "" +"Thin client mode is only available because libtorrent is not installed.\n" +"\n" +"To use Deluge standalone (Classic mode) please install libtorrent." +msgstr "" + +#: deluge/ui/gtkui/gtkui.py:348 msgid "Error Starting Core" msgstr "" -#: deluge/ui/gtkui/gtkui.py:313 +#: deluge/ui/gtkui/gtkui.py:375 msgid "" "There was an error starting the core component which is required to run " "Deluge in Classic Mode.\n" @@ -2148,101 +2354,114 @@ "Please see the details below for more information." msgstr "" -#: deluge/ui/gtkui/gtkui.py:318 +#: deluge/ui/gtkui/gtkui.py:380 msgid "" "Since there was an error starting in Classic Mode would you like to continue " "by turning it off?" msgstr "" -#: deluge/ui/gtkui/gtkui.py:342 +#: deluge/ui/gtkui/gtkui.py:391 msgid "Error Starting Daemon" msgstr "" -#: deluge/ui/gtkui/gtkui.py:343 +#: deluge/ui/gtkui/gtkui.py:392 msgid "" "There was an error starting the daemon process. Try running it from a " "console to see if there is an error." msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:149 +#: deluge/ui/gtkui/connectionmanager.py:161 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:168 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:68 +#: deluge/ui/web/js/deluge-all/details/StatusTab.js:39 msgid "Status" -msgstr "" +msgstr "狀態" -#: deluge/ui/gtkui/connectionmanager.py:153 +#: deluge/ui/gtkui/connectionmanager.py:165 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:84 msgid "Host" msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:158 +#: deluge/ui/gtkui/connectionmanager.py:170 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:90 msgid "Version" msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:386 +#: deluge/ui/gtkui/connectionmanager.py:424 msgid "_Stop Daemon" msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:394 +#: deluge/ui/gtkui/connectionmanager.py:432 msgid "_Start Daemon" msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:415 -#: deluge/ui/gtkui/connectionmanager.py:425 +#: deluge/ui/gtkui/connectionmanager.py:458 +#: deluge/ui/gtkui/connectionmanager.py:470 msgid "Unable to start daemon!" msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:416 -msgid "" -"Deluge cannot find the 'deluged' executable, it is likely that you forgot to " -"install the deluged package or it's not in your PATH." -msgstr "" - -#: deluge/ui/gtkui/connectionmanager.py:426 +#: deluge/ui/gtkui/connectionmanager.py:471 msgid "Please examine the details for more information." msgstr "" -#: deluge/ui/gtkui/connectionmanager.py:510 +#: deluge/ui/gtkui/connectionmanager.py:592 msgid "Error Adding Host" msgstr "" -#: deluge/ui/gtkui/removetorrentdialog.py:78 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:6 msgid "Torrents" msgstr "" -#: deluge/ui/gtkui/dialogs.py:174 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4730 +#: deluge/ui/gtkui/dialogs.py:170 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:183 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:52 msgid "Details:" msgstr "" -#: deluge/ui/gtkui/mainwindow.py:237 -msgid "Down:" +#: deluge/ui/gtkui/dialogs.py:390 +msgid "Password Protected" +msgstr "" + +#: deluge/ui/gtkui/mainwindow.py:191 +msgid "Enter your password to show Deluge..." +msgstr "輸入你的密碼以顯示 Deluge..." + +#: deluge/ui/gtkui/mainwindow.py:235 +msgid "Enter your password to Quit Deluge..." msgstr "" -#: deluge/ui/gtkui/mainwindow.py:237 -msgid "Up:" +#: deluge/ui/gtkui/mainwindow.py:315 +msgid "D:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:59 -msgid "Copyright 2007-2014 Deluge Team" +#: deluge/ui/gtkui/mainwindow.py:315 +msgid "U:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:61 +#: deluge/ui/gtkui/aboutdialog.py:33 +#, python-format +msgid "Copyright %(year_start)s-%(year_end)s Deluge Team" +msgstr "" + +#: deluge/ui/gtkui/aboutdialog.py:35 msgid "" "A peer-to-peer file sharing program\n" "utilizing the BitTorrent protocol." msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:62 +#: deluge/ui/gtkui/aboutdialog.py:36 msgid "Client:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:65 +#: deluge/ui/gtkui/aboutdialog.py:39 msgid "Current Developers:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:67 +#: deluge/ui/gtkui/aboutdialog.py:41 msgid "Past Developers or Contributors:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:252 +#: deluge/ui/gtkui/aboutdialog.py:226 msgid "" "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 " @@ -2269,90 +2488,82 @@ "also delete it here." msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:287 +#: deluge/ui/gtkui/aboutdialog.py:259 msgid "Server:" msgstr "" -#: deluge/ui/gtkui/aboutdialog.py:290 +#: deluge/ui/gtkui/aboutdialog.py:262 msgid "libtorrent:" msgstr "" -#: deluge/ui/gtkui/statusbar.py:146 +#: deluge/ui/gtkui/statusbar.py:128 +#: deluge/ui/web/js/deluge-all/Statusbar.js:39 msgid "Not Connected" msgstr "" -#: deluge/ui/gtkui/statusbar.py:163 +#: deluge/plugins/Stats/deluge/plugins/stats/data/tabs.glade:112 +#: deluge/ui/gtkui/statusbar.py:145 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:179 +#: deluge/ui/web/js/deluge-all/Statusbar.js:57 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:69 msgid "Connections" msgstr "連線" -#: deluge/ui/gtkui/statusbar.py:168 +#: deluge/ui/gtkui/statusbar.py:150 +#: deluge/ui/web/js/deluge-all/Statusbar.js:104 msgid "Download Speed" -msgstr "" +msgstr "下載速度" -#: deluge/ui/gtkui/statusbar.py:173 +#: deluge/ui/gtkui/statusbar.py:155 +#: deluge/ui/web/js/deluge-all/Statusbar.js:152 msgid "Upload Speed" -msgstr "" +msgstr "上傳速度" -#: deluge/ui/gtkui/statusbar.py:178 +#: deluge/ui/gtkui/statusbar.py:160 +#: deluge/ui/web/js/deluge-all/Statusbar.js:200 msgid "Protocol Traffic Download/Upload" msgstr "" -#: deluge/ui/gtkui/statusbar.py:181 +#: deluge/ui/gtkui/statusbar.py:163 +#: deluge/ui/web/js/deluge-all/Statusbar.js:210 msgid "DHT Nodes" msgstr "" -#: deluge/ui/gtkui/statusbar.py:186 +#: deluge/ui/gtkui/statusbar.py:168 msgid "Free Disk Space" msgstr "" -#: deluge/ui/gtkui/statusbar.py:190 +#: deluge/ui/gtkui/statusbar.py:172 msgid "No Incoming Connections!" msgstr "" -#: deluge/ui/gtkui/filtertreeview.py:69 +#: deluge/ui/gtkui/filtertreeview.py:124 +#: deluge/ui/web/js/deluge-all/FilterPanel.js:51 msgid "States" -msgstr "" +msgstr "狀態" -#: deluge/ui/gtkui/filtertreeview.py:71 +#: deluge/ui/gtkui/filtertreeview.py:157 +#: deluge/ui/web/js/deluge-all/FilterPanel.js:57 msgid "Labels" msgstr "" -#: deluge/ui/gtkui/filtertreeview.py:72 +#: deluge/ui/common.py:34 deluge/ui/gtkui/filtertreeview.py:130 +#: deluge/ui/web/js/deluge-all/UI.js:40 msgid "All" msgstr "" -#: deluge/ui/gtkui/filtertreeview.py:73 -msgid "Downloading" -msgstr "" - -#: deluge/ui/gtkui/filtertreeview.py:74 -msgid "Seeding" -msgstr "" - -#: deluge/ui/gtkui/filtertreeview.py:75 -msgid "Paused" -msgstr "" - -#: deluge/ui/gtkui/filtertreeview.py:76 -msgid "Checking" -msgstr "" - -#: deluge/ui/gtkui/filtertreeview.py:77 -msgid "Queued" -msgstr "" - -#: deluge/ui/gtkui/filtertreeview.py:79 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:411 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py:455 +#: deluge/ui/common.py:35 deluge/ui/web/js/deluge-all/UI.js:41 msgid "Active" msgstr "" -#: deluge/ui/gtkui/filtertreeview.py:80 +#: deluge/ui/gtkui/filtertreeview.py:132 deluge/ui/gtkui/filtertreeview.py:136 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:7 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:56 msgid "None" msgstr "" -#: deluge/ui/gtkui/filtertreeview.py:81 -msgid "No Label" -msgstr "" - #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:45 msgid "Remove the selected torrent?" msgstr "" @@ -2363,13 +2574,16 @@ #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:117 msgid "Remove With _Data" -msgstr "" +msgstr "連同資料移除(_D)" #: deluge/ui/gtkui/glade/remove_torrent_dialog.glade:155 msgid "Remove _Torrent" -msgstr "" +msgstr "移除 Torrent(_T)" -#: deluge/ui/gtkui/glade/edit_trackers.glade:9 +#: deluge/ui/gtkui/glade/edit_trackers.ui.h:1 +#: deluge/ui/web/js/deluge-all/EditTrackersWindow.js:40 +#: deluge/ui/web/js/deluge-all/Menus.js:224 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:332 msgid "Edit Trackers" msgstr "" @@ -2377,7 +2591,8 @@ msgid "Edit Trackers" msgstr "" -#: deluge/ui/gtkui/glade/edit_trackers.glade:224 +#: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:1 +#: deluge/ui/web/js/deluge-all/AddTrackerWindow.js:40 msgid "Add Tracker" msgstr "" @@ -2385,12 +2600,14 @@ msgid "Add Trackers" msgstr "" -#: deluge/ui/gtkui/glade/edit_trackers.glade:296 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1214 +#: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:4 +#: deluge/ui/gtkui/glade/edit_trackers.add.ui.h:3 +#: deluge/ui/web/js/deluge-all/AddTrackerWindow.js:66 msgid "Trackers:" msgstr "" -#: deluge/ui/gtkui/glade/edit_trackers.glade:380 +#: deluge/ui/gtkui/glade/edit_trackers.edit.ui.h:1 +#: deluge/ui/web/js/deluge-all/EditTrackerWindow.js:40 msgid "Edit Tracker" msgstr "" @@ -2398,131 +2615,139 @@ msgid "Edit Tracker" msgstr "" -#: deluge/ui/gtkui/glade/edit_trackers.glade:450 +#: deluge/ui/gtkui/glade/edit_trackers.edit.ui.h:2 +#: deluge/ui/web/js/deluge-all/EditTrackerWindow.js:66 +#: deluge/ui/web/js/deluge-all/details/DetailsTab.js:54 msgid "Tracker:" msgstr "" -#: deluge/ui/gtkui/glade/tray_menu.glade:12 +#: deluge/ui/gtkui/glade/tray_menu.ui.h:1 msgid "_Show Deluge" -msgstr "" +msgstr "顯示 Deluge(_S)" -#: deluge/ui/gtkui/glade/tray_menu.glade:26 -#: deluge/ui/gtkui/glade/main_window.glade:27 +#: deluge/ui/gtkui/glade/main_window.ui.h:2 +#: deluge/ui/gtkui/glade/tray_menu.ui.h:2 msgid "_Add Torrent" -msgstr "" +msgstr "加入 Torrent(_A)" -#: deluge/ui/gtkui/glade/tray_menu.glade:48 -#: deluge/ui/gtkui/glade/filtertree_menu.glade:26 +#: deluge/ui/gtkui/glade/filtertree_menu.ui.h:2 msgid "_Pause All" -msgstr "" +msgstr "全部暫停(_P)" #: deluge/ui/gtkui/glade/tray_menu.glade:65 msgid "_Resume All" -msgstr "" +msgstr "全部續傳(_R)" -#: deluge/ui/gtkui/glade/tray_menu.glade:87 -#: deluge/ui/gtkui/glade/torrent_menu.glade:212 +#: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:1 +#: deluge/ui/gtkui/glade/tray_menu.ui.h:5 msgid "_Download Speed Limit" -msgstr "" +msgstr "下載速度限制(_D)" -#: deluge/ui/gtkui/glade/tray_menu.glade:103 -#: deluge/ui/gtkui/glade/torrent_menu.glade:227 +#: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:2 +#: deluge/ui/gtkui/glade/tray_menu.ui.h:6 msgid "_Upload Speed Limit" -msgstr "" +msgstr "上傳速度限制(_U)" -#: deluge/ui/gtkui/glade/tray_menu.glade:124 +#: deluge/ui/gtkui/glade/tray_menu.ui.h:7 msgid "Quit & Shutdown Daemon" msgstr "" -#: deluge/ui/gtkui/glade/filtertree_menu.glade:10 +#: deluge/ui/gtkui/glade/filtertree_menu.ui.h:1 msgid "_Select All" msgstr "" -#: deluge/ui/gtkui/glade/filtertree_menu.glade:41 -#: deluge/ui/gtkui/glade/torrent_menu.glade:48 +#: deluge/ui/gtkui/glade/filtertree_menu.ui.h:4 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:4 msgid "Resume selected torrents." msgstr "" -#: deluge/ui/gtkui/glade/filtertree_menu.glade:42 +#: deluge/ui/gtkui/glade/filtertree_menu.ui.h:3 msgid "Resu_me All" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:8 -#: deluge/ui/gtkui/glade/main_window.glade:440 -#: deluge/ui/gtkui/glade/main_window.glade:441 +#: deluge/ui/gtkui/glade/main_window.ui.h:38 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:13 +#: deluge/ui/web/js/deluge-all/Toolbar.js:94 +#: deluge/ui/web/js/deluge-all/preferences/PreferencesWindow.js:47 msgid "Preferences" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:78 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:76 msgid "Downloads" msgstr "" #: deluge/ui/gtkui/glade/preferences_dialog.glade:188 msgid "Auto add .torrents from:" -msgstr "" +msgstr "自動加入 .torrents 自:" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:253 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:48 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:69 msgid "Download to:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:261 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:281 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:45 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:85 msgid "Copy of .torrent files to:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:316 +#: deluge/plugins/AutoAdd/deluge/plugins/autoadd/data/autoadd_options.glade:334 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:46 msgid "Delete copy of torrent file on remove" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:320 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:47 msgid "" "Delete the copy of the torrent file created when the torrent is removed" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:337 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:339 msgid "Folders" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:370 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:372 msgid "Use Full Allocation" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:375 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:377 msgid "" "Full allocation preallocates all of the space that is needed for the torrent " "and prevents disk fragmentation" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:387 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:389 msgid "Use Compact Allocation" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:392 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:394 msgid "Compact allocation only allocates space as needed" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:409 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:472 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:411 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:544 msgid "Allocation" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:440 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:50 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:106 msgid "Prioritize first and last pieces of torrent" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:445 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:51 msgid "Prioritize first and last pieces of files in torrent" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:455 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:59 +#: deluge/ui/web/js/deluge-all/preferences/DownloadsPage.js:118 msgid "Add torrents in Paused state" -msgstr "" +msgstr "以暫停狀態加入 torrents" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:529 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:530 msgid "Network" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:569 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:763 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:86 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:141 msgid "Use Random Ports" msgstr "" @@ -2530,16 +2755,17 @@ msgid "Deluge will automatically choose a different port to use every time." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:592 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:106 msgid "Active Port:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:662 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:812 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:103 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:117 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:172 msgid "To:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:690 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:107 msgid "Test Active Port" msgstr "" @@ -2547,7 +2773,7 @@ msgid "Incoming Ports" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:850 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:849 msgid "Outgoing Ports" msgstr "" @@ -2561,13 +2787,14 @@ msgid "Interface" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:939 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:938 msgid "" "The TOS byte set in the IP header of every packet sent to peers (including " "web seeds). Expects a Hex value." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:940 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:129 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:247 msgid "Peer TOS Byte:" msgstr "" @@ -2575,36 +2802,39 @@ msgid "TOS" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1006 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:115 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:198 msgid "UPnP" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1010 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:116 msgid "Universal Plug and Play" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1021 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:117 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:204 msgid "NAT-PMP" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1025 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:118 msgid "NAT Port Mapping Protocol" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1038 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1042 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:119 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:211 msgid "Peer Exchange" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1055 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:123 +#: deluge/ui/web/js/deluge-all/preferences/NetworkPage.js:218 msgid "LSD" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1060 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:124 msgid "Local Service Discovery finds local peers on your network." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1075 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:126 msgid "Distributed hash table may improve the amount of active connections." msgstr "" @@ -2612,134 +2842,138 @@ msgid "Network Extras" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1136 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1135 msgid "Inbound:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1146 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:113 +#: deluge/ui/web/js/deluge-all/preferences/EncryptionPage.js:93 msgid "Level:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1167 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1217 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1165 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1214 msgid "" "Forced\n" "Enabled\n" "Disabled" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1178 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1176 msgid "" "Handshake\n" "Full Stream\n" "Either" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1206 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1203 msgid "Outbound:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1233 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1230 msgid "Encrypt entire stream" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1258 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1255 msgid "Encryption" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1319 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1315 msgid "Bandwidth" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1396 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:108 msgid "Maximum Connection Attempts per Second:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1408 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:100 msgid "Maximum Half-Open Connections:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1419 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1509 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:68 msgid "The maximum upload speed for all torrents. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1421 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1706 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:92 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:177 msgid "Maximum Upload Speed (KiB/s):" -msgstr "" +msgstr "最高上傳速度 (KiB/s):" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1432 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1457 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:70 msgid "The maximum number of connections allowed. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1434 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1669 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:68 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:153 msgid "Maximum Connections:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1443 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1528 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:72 msgid "The maximum upload slots for all torrents. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1445 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1680 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:161 msgid "Maximum Upload Slots:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1475 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1490 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:74 msgid "The maximum download speed for all torrents. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1477 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1693 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:84 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:169 msgid "Maximum Download Speed (KiB/s):" -msgstr "" +msgstr "最高下載速度 (KiB/s):" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1554 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:77 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:128 msgid "Ignore limits on local network" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1573 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:78 +#: deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js:135 msgid "Rate limit IP overhead" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1577 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:79 msgid "" "If checked, the estimated TCP/IP overhead is drained from the rate limiters, " "to avoid exceeding the limits with the total traffic" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1594 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1589 msgid "Global Bandwidth Usage" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1633 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:81 msgid "The maximum upload slots per torrent. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1652 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1718 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1736 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:82 msgid "The maximum number of connections per torrent. Set -1 for unlimited." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1758 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1713 +msgid "The maximum download speed per torrent. Set -1 for unlimited." +msgstr "" + +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:84 +msgid "The maximum upload speed per torrent. Set -1 for unlimited." +msgstr "" + +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1753 msgid "Per Torrent Bandwidth Usage" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1818 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1812 msgid "Interface" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1851 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1845 msgid "Enable" msgstr "啟用" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1856 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1850 msgid "" "Classic Mode will hide most of the daemon functionality and will make Deluge " "appear to be a single application. Use this if you do not want to take " @@ -2747,109 +2981,116 @@ "setting to take effect." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1866 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1860 msgid "Classic Mode" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1899 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:19 +#: deluge/ui/web/js/deluge-all/preferences/InterfacePage.js:64 msgid "Show session speed in titlebar" +msgstr "在標題列顯示作業階段速度" + +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:20 +msgid "Focus window when adding torrent" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1917 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1923 msgid "Main Window" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1950 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:63 msgid "Always show" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1968 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:64 msgid "Bring the dialog to focus" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:1988 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:1993 msgid "Add Torrents Dialog" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2020 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:32 msgid "Enable system tray icon" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2038 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:35 msgid "Minimize to tray on close" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2058 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:36 msgid "Start in tray" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2078 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2082 msgid "Enable Application Indicator" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2099 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:37 msgid "Password protect system tray" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2165 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2170 msgid "System Tray" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2224 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2228 msgid "Other" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2265 +#: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:66 msgid "Be alerted about new releases" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2270 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2273 msgid "" "Deluge will check our servers and will tell you if a newer version has been " "released" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2289 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2292 msgid "Updates" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2326 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:169 msgid "" "Help us improve Deluge by sending us your Python version, PyGTK version, OS " "and processor types. Absolutely no other information is sent." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2343 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:170 +#: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:90 msgid "Yes, please send anonymous statistics" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2365 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2367 msgid "System Information" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2408 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:172 msgid "Location:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2420 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:173 msgid "" "If Deluge cannot find the database file at this location it will fallback to " "using DNS to resolve the peer's country." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2444 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2446 msgid "GeoIP Database" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2489 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:175 msgid "Associate Magnet links with Deluge" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2558 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2559 msgid "Daemon" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2602 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:176 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:57 msgid "Daemon port:" msgstr "" @@ -2857,7 +3098,8 @@ msgid "Port" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2668 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:178 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:78 msgid "Allow Remote Connections" msgstr "" @@ -2865,7 +3107,8 @@ msgid "Connections" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2711 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:180 +#: deluge/ui/web/js/deluge-all/preferences/DaemonPage.js:94 msgid "Periodically check the website for new releases" msgstr "" @@ -2873,73 +3116,77 @@ msgid "Other" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2785 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2784 msgid "Queue" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2828 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:86 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:62 msgid "Queue new torrents to top" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2923 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:88 msgid "Total active seeding:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2936 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:89 msgid "Total active:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2965 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:90 msgid "Total active downloading:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2980 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:91 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:110 msgid "Do not count slow torrents" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:2998 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:2994 msgid "Active Torrents" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3040 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:94 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:130 msgid "Share Ratio Limit:" -msgstr "" +msgstr "分享比率限制:" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3050 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:95 msgid "Seed Time Ratio:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3062 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:96 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:154 msgid "Seed Time (m):" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3130 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:97 +#: deluge/ui/web/js/deluge-all/preferences/QueuePage.js:181 msgid "Stop seeding when share ratio reaches:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3175 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:98 msgid "Remove torrent when share ratio reached" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3197 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3192 msgid "Seeding" -msgstr "" +msgstr "播種中" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3262 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3256 msgid "Proxy" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3333 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3517 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3701 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3886 +#: deluge/ui/web/js/deluge-all/AddConnectionWindow.js:66 +#: deluge/ui/web/js/deluge-all/preferences/ProxyField.js:75 +#: deluge/ui/web/js/deluge-all/preferences/ProxyI2PField.js:49 msgid "Host:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3407 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3591 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3775 -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3962 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3403 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3590 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3777 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3967 msgid "" "None\n" "Socksv4\n" @@ -2949,154 +3196,159 @@ "HTTP W/ Auth" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3454 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3450 msgid "Peer" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3638 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3637 msgid "Web Seed" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:3822 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:3824 msgid "Tracker" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4010 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4015 msgid "DHT" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4067 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4071 msgid "Cache" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4112 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:144 msgid "Cache Size (16 KiB blocks):" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4122 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:145 msgid "" "The number of seconds from the last cached write to a piece in the write " "cache, to when it's forcefully flushed to disk. Default is 60 seconds." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4124 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:146 +#: deluge/ui/web/js/deluge-all/preferences/CachePage.js:70 msgid "Cache Expiry (seconds):" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4220 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:148 msgid "" "The total number of 16 KiB blocks written to disk since this session was " "started." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4222 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:149 msgid "Blocks Written:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4231 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:150 msgid "" "The total number of write operations performed since this session was " "started." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4233 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:151 msgid "Writes:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4244 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:152 msgid "" "The ratio (blocks_written - writes) / blocks_written represents the number " "of saved write operations per total write operations, i.e. a kind of cache " "hit ratio for the write cache." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4246 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:153 msgid "Write Cache Hit Ratio:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4298 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4300 msgid "Write" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4328 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:155 msgid "" "The number of blocks that were requested from the bittorrent engine (from " "peers), that were served from disk or cache." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4330 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:156 msgid "Blocks Read:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4339 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:157 msgid "The number of blocks that were served from cache." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4341 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:158 msgid "Blocks Read Hit:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4352 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:159 msgid "The cache hit ratio for the read cache." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4354 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:160 msgid "Read Cache Hit Ratio:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4403 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:161 msgid "" "The total number of read operations performed since this session was started." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4405 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:162 msgid "Reads:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4432 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4434 msgid "Read" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4462 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:164 msgid "" "The number of 16 KiB blocks currently in the disk cache. This includes both " "read and write cache." msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4464 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:165 msgid "Cache Size:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4474 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:166 msgid "Read Cache Size:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4513 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4515 msgid "Size" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4556 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4558 msgid "Status" -msgstr "" +msgstr "狀態" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4618 +#: deluge/ui/gtkui/glade/preferences_dialog.glade:4619 msgid "Plugins" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4743 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:184 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:49 msgid "Version:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4756 -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:263 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:185 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:6 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:48 msgid "Author:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4767 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:186 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:51 msgid "Homepage:" msgstr "" -#: deluge/ui/gtkui/glade/preferences_dialog.glade:4780 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:187 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:50 msgid "Author Email:" msgstr "" @@ -3112,7 +3364,7 @@ msgid "_Find More Plugins" msgstr "" -#: deluge/ui/gtkui/glade/queuedtorrents.glade:8 +#: deluge/ui/gtkui/glade/queuedtorrents.ui.h:1 msgid "Queued Torrents" msgstr "" @@ -3120,53 +3372,56 @@ msgid "Add Queued Torrents" msgstr "" -#: deluge/ui/gtkui/glade/queuedtorrents.glade:127 +#: deluge/ui/gtkui/glade/queuedtorrents.ui.h:3 msgid "Automatically add torrents on connect" -msgstr "" +msgstr "連線時自動加入 torrents" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:7 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:1 msgid "Create Torrent" -msgstr "" +msgstr "建立 Torrent" #: deluge/ui/gtkui/glade/create_torrent_dialog.glade:34 msgid "Create Torrent" -msgstr "" +msgstr "建立 Torrent" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:122 -#: deluge/ui/gtkui/glade/main_window.glade:21 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:99 +#: deluge/ui/gtkui/glade/main_window.ui.h:1 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:2 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:2 msgid "_File" -msgstr "" +msgstr "檔案(_F)" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:159 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:3 msgid "Fol_der" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:199 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:4 msgid "_Remote Path" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:229 +#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:230 msgid "Files" -msgstr "" +msgstr "檔案" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:292 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:22 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:7 msgid "Comments:" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:331 +#: deluge/ui/gtkui/glade/preferences_dialog.ui.h:188 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:8 +#: deluge/ui/web/js/deluge-all/preferences/PluginsPage.js:135 msgid "Info" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:512 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:10 msgid "Webseeds" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:542 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:11 msgid "Piece Size:" -msgstr "" +msgstr "分塊大小:" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:552 +#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:554 msgid "" "32 KiB\n" "64 KiB\n" @@ -3179,607 +3434,575 @@ "8 MiB\n" "16 MiB\n" msgstr "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1 MiB\n" +"2 MiB\n" +"4 MiB\n" +"8 MiB\n" +"16 MiB\n" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:580 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:12 msgid "Set Private Flag" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:594 +#: deluge/ui/gtkui/glade/create_torrent_dialog.ui.h:13 msgid "Add this torrent to the session" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:692 +#: deluge/ui/gtkui/glade/create_torrent_dialog.remote_path.ui.h:1 msgid "Enter Remote Path" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:728 +#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:730 msgid "Remote Path" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:762 -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:944 +#: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:3 +#: deluge/ui/gtkui/glade/create_torrent_dialog.remote_path.ui.h:3 +#: deluge/ui/web/js/deluge-all/preferences/OtherPage.js:104 msgid "Path:" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:837 +#: deluge/ui/gtkui/glade/create_torrent_dialog.progress.ui.h:1 msgid "Creating Torrent" msgstr "" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:874 +#: deluge/ui/gtkui/glade/create_torrent_dialog.remote_save.ui.h:1 msgid "Save .torrent as" -msgstr "" +msgstr "另存 .torrent 為" -#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:910 +#: deluge/ui/gtkui/glade/create_torrent_dialog.glade:913 msgid "Save .torrent file" -msgstr "" +msgstr "儲存 .torrent 檔案" -#: deluge/ui/gtkui/glade/connection_manager.glade:8 +#: deluge/ui/gtkui/glade/connection_manager.addhost.ui.h:1 msgid "Add Host" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:204 -#: deluge/ui/gtkui/glade/main_window.glade:455 -#: deluge/ui/gtkui/glade/main_window.glade:456 +#: deluge/ui/gtkui/glade/main_window.ui.h:39 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:1 +#: deluge/ui/web/js/deluge-all/ConnectionManager.js:43 +#: deluge/ui/web/js/deluge-all/Toolbar.js:100 msgid "Connection Manager" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:237 +#: deluge/ui/gtkui/glade/connection_manager.glade:240 msgid "Connection Manager" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:363 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:2 msgid "_Start local daemon" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:415 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:3 msgid "Automatically connect to selected host on start-up" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:426 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:4 msgid "Automatically start localhost if needed" msgstr "" -#: deluge/ui/gtkui/glade/connection_manager.glade:440 +#: deluge/ui/gtkui/glade/connection_manager.ui.h:5 msgid "Do not show this dialog on start-up" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:45 +#: deluge/ui/gtkui/glade/main_window.ui.h:3 msgid "_Create Torrent" -msgstr "" +msgstr "建立 Torrent(_F)" -#: deluge/ui/gtkui/glade/main_window.glade:65 +#: deluge/ui/gtkui/glade/main_window.ui.h:4 msgid "Quit & _Shutdown Daemon" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:101 +#: deluge/ui/gtkui/glade/main_window.ui.h:5 msgid "_Edit" -msgstr "" +msgstr "編輯(_E)" -#: deluge/ui/gtkui/glade/main_window.glade:118 +#: deluge/ui/gtkui/glade/main_window.ui.h:6 msgid "_Connection Manager" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:140 +#: deluge/ui/gtkui/glade/main_window.ui.h:7 msgid "_Torrent" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:147 +#: deluge/ui/gtkui/glade/main_window.ui.h:8 msgid "_View" -msgstr "" +msgstr "檢視(_V)" -#: deluge/ui/gtkui/glade/main_window.glade:155 +#: deluge/ui/gtkui/glade/main_window.ui.h:9 msgid "_Toolbar" -msgstr "" +msgstr "工具列(_T)" -#: deluge/ui/gtkui/glade/main_window.glade:165 +#: deluge/ui/gtkui/glade/main_window.ui.h:10 msgid "_Sidebar" -msgstr "" +msgstr "側邊欄(_S)" -#: deluge/ui/gtkui/glade/main_window.glade:174 +#: deluge/ui/gtkui/glade/main_window.ui.h:11 msgid "Status_bar" -msgstr "" +msgstr "狀態列(_B)" -#: deluge/ui/gtkui/glade/main_window.glade:188 +#: deluge/ui/gtkui/glade/main_window.ui.h:12 msgid "T_abs" -msgstr "" +msgstr "分頁(_A)" -#: deluge/ui/gtkui/glade/main_window.glade:195 +#: deluge/ui/gtkui/glade/main_window.ui.h:13 msgid "_Columns" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:203 +#: deluge/ui/gtkui/glade/main_window.ui.h:15 msgid "S_idebar" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:212 +#: deluge/ui/gtkui/glade/main_window.ui.h:16 msgid "Show _Zero Hits" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:221 +#: deluge/ui/gtkui/glade/main_window.ui.h:17 msgid "Show _Trackers" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:238 +#: deluge/ui/gtkui/glade/main_window.ui.h:18 msgid "_Help" -msgstr "" +msgstr "協助(_H)" -#: deluge/ui/gtkui/glade/main_window.glade:244 +#: deluge/ui/gtkui/glade/main_window.ui.h:19 msgid "_Homepage" -msgstr "" +msgstr "主頁(_H)" -#: deluge/ui/gtkui/glade/main_window.glade:261 +#: deluge/ui/gtkui/glade/main_window.ui.h:20 msgid "_FAQ" -msgstr "" +msgstr "常見問題(_F)" -#: deluge/ui/gtkui/glade/main_window.glade:264 +#: deluge/ui/gtkui/glade/main_window.ui.h:21 msgid "Frequently Asked Questions" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:280 +#: deluge/ui/gtkui/glade/main_window.ui.h:22 msgid "_Community" -msgstr "" +msgstr "社羣(_C)" -#: deluge/ui/gtkui/glade/main_window.glade:327 +#: deluge/ui/gtkui/glade/main_window.ui.h:23 msgid "Add torrent" -msgstr "" +msgstr "加入 torrent" -#: deluge/ui/gtkui/glade/main_window.glade:328 +#: deluge/ui/gtkui/glade/main_window.ui.h:24 msgid "Add Torrent" -msgstr "" +msgstr "加入 Torrent" -#: deluge/ui/gtkui/glade/main_window.glade:342 +#: deluge/ui/gtkui/glade/main_window.ui.h:25 msgid "Remove torrent" -msgstr "" +msgstr "移除 torrent" -#: deluge/ui/gtkui/glade/main_window.glade:343 +#: deluge/ui/gtkui/glade/main_window.ui.h:26 +#: deluge/ui/gtkui/glade/remove_torrent_dialog.ui.h:1 +#: deluge/ui/web/js/deluge-all/Menus.js:230 +#: deluge/ui/web/js/deluge-all/RemoveWindow.js:39 +#: deluge/ui/web/js/deluge-all/RemoveWindow.js:57 msgid "Remove Torrent" -msgstr "" +msgstr "移除 Torrent" -#: deluge/ui/gtkui/glade/main_window.glade:364 +#: deluge/ui/gtkui/glade/main_window.ui.h:30 msgid "Pause the selected torrents" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:365 +#: deluge/ui/gtkui/glade/main_window.ui.h:31 +#: deluge/ui/web/js/deluge-all/Menus.js:88 +#: deluge/ui/web/js/deluge-all/Toolbar.js:70 msgid "Pause" -msgstr "" +msgstr "暫停" -#: deluge/ui/gtkui/glade/main_window.glade:380 +#: deluge/ui/gtkui/glade/main_window.ui.h:32 msgid "Resume the selected torrents" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:381 +#: deluge/ui/gtkui/glade/main_window.ui.h:33 +#: deluge/ui/web/js/deluge-all/Menus.js:94 +#: deluge/ui/web/js/deluge-all/Toolbar.js:76 msgid "Resume" -msgstr "" +msgstr "續傳" -#: deluge/ui/gtkui/glade/main_window.glade:403 +#: deluge/ui/gtkui/glade/main_window.ui.h:34 msgid "Queue Torrent Up" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:404 +#: deluge/ui/gtkui/glade/main_window.ui.h:35 msgid "Queue Up" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:418 +#: deluge/ui/gtkui/glade/main_window.ui.h:36 msgid "Queue Torrent Down" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:419 +#: deluge/ui/gtkui/glade/main_window.ui.h:37 msgid "Queue Down" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:570 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:2 msgid "_Expand All" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:591 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:3 msgid "_Do Not Download" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:607 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:4 msgid "_Normal Priority" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:623 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:5 msgid "_High Priority" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:639 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_file.ui.h:6 msgid "Hi_ghest Priority" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:721 +#: deluge/ui/gtkui/glade/main_window.glade:718 msgid "Auto Managed:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:762 +#: deluge/ui/gtkui/glade/main_window.glade:759 msgid "Seed Rank:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:777 +#: deluge/ui/gtkui/glade/main_window.glade:774 msgid "Seeding Time:" -msgstr "" +msgstr "播種時間:" -#: deluge/ui/gtkui/glade/main_window.glade:803 +#: deluge/ui/gtkui/glade/main_window.glade:800 msgid "Active Time:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:860 +#: deluge/ui/gtkui/glade/main_window.glade:857 msgid "Tracker Status:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:890 +#: deluge/ui/gtkui/glade/main_window.glade:887 msgid "Availability:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:944 +#: deluge/ui/gtkui/glade/main_window.glade:941 msgid "Peers:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:970 +#: deluge/ui/gtkui/glade/main_window.glade:967 msgid "Seeders:" -msgstr "" +msgstr "播種者:" -#: deluge/ui/gtkui/glade/main_window.glade:988 +#: deluge/ui/gtkui/glade/main_window.glade:985 msgid "Pieces:" -msgstr "" +msgstr "分塊:" -#: deluge/ui/gtkui/glade/main_window.glade:1010 +#: deluge/ui/gtkui/glade/main_window.glade:1007 msgid "ETA:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1032 +#: deluge/ui/gtkui/glade/main_window.glade:1029 msgid "Up Speed:" -msgstr "" +msgstr "上傳速度:" -#: deluge/ui/gtkui/glade/main_window.glade:1054 +#: deluge/ui/gtkui/glade/main_window.glade:1051 msgid "Down Speed:" -msgstr "" +msgstr "下載速度:" -#: deluge/ui/gtkui/glade/main_window.glade:1073 +#: deluge/ui/gtkui/glade/main_window.glade:1070 msgid "Next Announce:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1092 +#: deluge/ui/gtkui/glade/main_window.glade:1089 msgid "Share Ratio:" -msgstr "" +msgstr "分享比率:" -#: deluge/ui/gtkui/glade/main_window.glade:1111 +#: deluge/ui/gtkui/glade/main_window.glade:1108 msgid "Uploaded:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1130 +#: deluge/ui/gtkui/glade/main_window.glade:1127 msgid "Downloaded:" -msgstr "" +msgstr "已下載 :" -#: deluge/ui/gtkui/glade/main_window.glade:1191 +#: deluge/ui/gtkui/glade/main_window.glade:1188 msgid "Date Added:" -msgstr "" +msgstr "新增日期:" -#: deluge/ui/gtkui/glade/main_window.glade:1249 -msgid "_Status" -msgstr "" - -#: deluge/ui/gtkui/glade/main_window.glade:1310 +#: deluge/ui/gtkui/glade/main_window.glade:1307 msgid "Comments:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1339 +#: deluge/ui/gtkui/glade/main_window.glade:1336 msgid "# of files:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1371 +#: deluge/ui/gtkui/glade/main_window.glade:1368 msgid "Hash:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1401 +#: deluge/ui/gtkui/glade/main_window.glade:1398 msgid "Tracker:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1421 +#: deluge/ui/gtkui/glade/main_window.glade:1418 msgid "Total Size:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1459 +#: deluge/ui/gtkui/glade/main_window.glade:1456 msgid "Name:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1479 +#: deluge/ui/gtkui/glade/main_window.glade:1476 msgid "Path:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:1513 +#: deluge/ui/gtkui/glade/main_window.glade:1510 msgid "Status:" -msgstr "" +msgstr "狀態:" -#: deluge/ui/gtkui/glade/main_window.glade:1594 -msgid "_Details" -msgstr "" - -#: deluge/ui/gtkui/glade/main_window.glade:1646 -msgid "_Files" -msgstr "" - -#: deluge/ui/gtkui/glade/main_window.glade:1698 -msgid "_Peers" -msgstr "" - -#: deluge/ui/gtkui/glade/main_window.glade:2009 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:40 msgid "Move completed:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2105 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:300 msgid "Private" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2120 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:38 +#: deluge/ui/web/js/deluge-all/details/OptionsTab.js:308 msgid "Prioritize First/Last" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2158 -#: deluge/ui/gtkui/glade/torrent_menu.glade:130 +#: deluge/ui/gtkui/glade/main_window.tabs.ui.h:48 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:8 msgid "_Edit Trackers" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2265 -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:867 -msgid "_Options" -msgstr "" - -#: deluge/ui/gtkui/glade/main_window.glade:2285 +#: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:1 msgid "Remove Torrent?" -msgstr "" +msgstr "移除 Torrent?" -#: deluge/ui/gtkui/glade/main_window.glade:2324 +#: deluge/ui/gtkui/glade/main_window.glade:2316 msgid "" "Are you sure you want to remove the selected torrent?" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2376 +#: deluge/ui/gtkui/glade/main_window.glade:2368 msgid "The associated .torrent will be deleted!" -msgstr "" +msgstr "相關 .torrent 將被刪除!" -#: deluge/ui/gtkui/glade/main_window.glade:2416 +#: deluge/ui/gtkui/glade/main_window.glade:2408 msgid "The downloaded data will be deleted!" -msgstr "" +msgstr "已下載的資料將被刪除!" -#: deluge/ui/gtkui/glade/main_window.glade:2460 +#: deluge/ui/gtkui/glade/main_window.move_storage.ui.h:2 msgid "Remove Selected Torrent" -msgstr "" +msgstr "移除已選的 Torrent" -#: deluge/ui/gtkui/glade/main_window.glade:2484 +#: deluge/ui/gtkui/glade/main_window.new_release.ui.h:1 msgid "New Release" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2518 +#: deluge/ui/gtkui/glade/main_window.glade:2508 msgid "New Release Available!" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2570 +#: deluge/ui/gtkui/glade/main_window.glade:2560 msgid "Available Version:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2593 +#: deluge/ui/gtkui/glade/main_window.glade:2583 msgid "Current Version:" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2604 +#: deluge/ui/gtkui/glade/main_window.glade:2594 msgid "Server Version" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2637 +#: deluge/ui/gtkui/glade/main_window.new_release.ui.h:7 msgid "Do not show this dialog in the future" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2676 +#: deluge/ui/gtkui/glade/main_window.new_release.ui.h:2 msgid "_Goto Website" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2704 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_peer.ui.h:1 msgid "_Add Peer" msgstr "" -#: deluge/ui/gtkui/glade/main_window.glade:2706 +#: deluge/ui/gtkui/glade/main_window.tabs.menu_peer.ui.h:2 msgid "Add a peer by its IP" msgstr "" #: deluge/ui/gtkui/glade/torrent_menu.glade:11 msgid "_Open Folder" -msgstr "" +msgstr "開啟資料夾(_O)" -#: deluge/ui/gtkui/glade/torrent_menu.glade:49 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:2 +msgid "_Pause" +msgstr "暫停(_P)" + +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:3 msgid "Resu_me" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:71 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:5 msgid "Opt_ions" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:93 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:6 msgid "_Queue" -msgstr "" +msgstr "佇列(_Q)" -#: deluge/ui/gtkui/glade/torrent_menu.glade:113 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:7 msgid "_Update Tracker" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:152 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:9 msgid "_Remove Torrent" -msgstr "" +msgstr "移除 Torrent(_R)" -#: deluge/ui/gtkui/glade/torrent_menu.glade:174 +#: deluge/ui/gtkui/glade/torrent_menu.ui.h:10 msgid "_Force Re-check" -msgstr "" +msgstr "強制再檢查(_F)" #: deluge/ui/gtkui/glade/torrent_menu.glade:191 msgid "Move _Storage" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:242 +#: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:3 msgid "_Connection Limit" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:258 +#: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:4 msgid "Upload _Slot Limit" msgstr "" -#: deluge/ui/gtkui/glade/torrent_menu.glade:273 +#: deluge/ui/gtkui/glade/torrent_menu.options.ui.h:6 msgid "_Auto Managed" msgstr "" #: deluge/ui/gtkui/glade/move_storage_dialog.glade:9 msgid "Move Storage" -msgstr "" +msgstr "更改儲存位置" #: deluge/ui/gtkui/glade/move_storage_dialog.glade:44 msgid "Move Storage" -msgstr "" +msgstr "更改儲存位置" -#: deluge/ui/gtkui/glade/move_storage_dialog.glade:78 +#: deluge/ui/gtkui/glade/move_storage_dialog.ui.h:3 msgid "Destination:" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:8 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:1 +#: deluge/ui/web/js/deluge-all/add/AddWindow.js:37 msgid "Add Torrents" -msgstr "" +msgstr "加入 Torrents" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:147 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:3 msgid "_URL" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:195 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:4 msgid "Info_hash" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:241 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:5 msgid "_Remove" -msgstr "" +msgstr "移除(_R)" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:274 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:271 msgid "Torrents" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:331 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:7 msgid "Fi_les" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:434 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:469 +msgid "Move Completed Location" +msgstr "" + +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:506 msgid "Full" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:450 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:522 msgid "Compact" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:525 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:597 msgid "Max Down Speed:" -msgstr "" +msgstr "最高下載速度:" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:537 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:609 msgid "Max Up Speed:" -msgstr "" +msgstr "最高上傳速度:" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:668 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:10 msgid "Add In _Paused State" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:684 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:11 +#: deluge/ui/web/js/deluge-all/add/OptionsTab.js:137 msgid "Prioritize First/Last Pieces" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:762 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:33 msgid "Revert To Defaults" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:816 +#: deluge/ui/gtkui/glade/add_torrent_dialog.ui.h:32 msgid "Apply To All" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:944 +#: deluge/ui/gtkui/glade/add_torrent_dialog.url.ui.h:1 msgid "Add URL" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:983 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1052 msgid "From URL" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1104 +#: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:1 msgid "Add Infohash" msgstr "" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1143 +#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1211 msgid "From Infohash" -msgstr "" +msgstr "來自資訊雜湊" -#: deluge/ui/gtkui/glade/add_torrent_dialog.glade:1178 +#: deluge/ui/gtkui/glade/add_torrent_dialog.infohash.ui.h:3 msgid "Infohash:" -msgstr "" +msgstr "資訊雜湊:" -#: deluge/ui/gtkui/glade/dgtkpopups.glade:98 +#: deluge/ui/gtkui/glade/other_dialog.ui.h:1 msgid "label" -msgstr "" +msgstr "標籤" -#: deluge/ui/gtkui/glade/dgtkpopups.glade:154 +#: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:1 msgid "Add Peer" -msgstr "" +msgstr "新增用戶" #: deluge/ui/gtkui/glade/dgtkpopups.glade:187 msgid "Add Peer" -msgstr "" +msgstr "新增用戶" -#: deluge/ui/gtkui/glade/dgtkpopups.glade:211 +#: deluge/ui/gtkui/glade/connect_peer_dialog.ui.h:2 msgid "hostname:port" -msgstr "" +msgstr "主機名稱:連接埠" -#: deluge/data/share/applications/deluge.desktop.in.h:1 +#: deluge/ui/data/share/applications/deluge.desktop.in.h:2 msgid "BitTorrent Client" -msgstr "" +msgstr "BitTorrent 用戶端" -#: deluge/data/share/applications/deluge.desktop.in.h:3 +#: deluge/ui/data/share/applications/deluge.desktop.in.h:3 msgid "Deluge BitTorrent Client" -msgstr "" +msgstr "Deluge BitTorrent 用戶端" -#: deluge/data/share/applications/deluge.desktop.in.h:4 +#: deluge/ui/data/share/applications/deluge.desktop.in.h:4 msgid "Download and share files over BitTorrent" -msgstr "" - -#~ msgid "About" -#~ msgstr "關於" - -#~ msgid "Clear" -#~ msgstr "清除" - -#~ msgid "Auto refresh:" -#~ msgstr "自動更新" - -#~ msgid "Connect" -#~ msgstr "連線" - -#~ msgid "Delete downloaded files." -#~ msgstr "刪除已下載的檔案" - -#~ msgid "Config" -#~ msgstr "設定" - -#~ msgid "File" -#~ msgstr "檔案" - -#~ msgid "Download" -#~ msgstr "下載" - -#~ msgid "Disable" -#~ msgstr "停用" - -#~ msgid "Move" -#~ msgstr "移動" - -#~ msgid "General" -#~ msgstr "一般" - -#~ msgid "Keyword" -#~ msgstr "關鍵字" - -#~ msgid "Login" -#~ msgstr "登入" - -#~ msgid "Logout" -#~ msgstr "登出" +msgstr "透過 BitTorrent 來下載和分享檔案" diff -Nru deluge-1.3.12/deluge/i18n/zh_TW.po deluge-1.3.13/deluge/i18n/zh_TW.po --- deluge-1.3.12/deluge/i18n/zh_TW.po 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/i18n/zh_TW.po 2016-07-20 14:23:28.000000000 +0000 @@ -14,8 +14,8 @@ "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2015-09-12 10:28+0000\n" -"X-Generator: Launchpad (build 17720)\n" +"X-Launchpad-Export-Date: 2016-06-19 11:20+0000\n" +"X-Generator: Launchpad (build 18097)\n" #: deluge/pluginmanagerbase.py:173 msgid "Not available" diff -Nru deluge-1.3.12/deluge/main.py deluge-1.3.13/deluge/main.py --- deluge-1.3.12/deluge/main.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/main.py 2016-07-20 14:23:28.000000000 +0000 @@ -86,7 +86,10 @@ help="Sets the log level to 'none', this is the same as `-L none`", action="store_true", default=False) # Get the options and args from the OptionParser - (options, args) = parser.parse_args() + if deluge.common.windows_check(): + (options, args) = parser.parse_args(deluge.common.win32_unicode_argv()[1:]) + else: + (options, args) = parser.parse_args() # Setup the logger if options.quiet: @@ -166,6 +169,9 @@ help="Sets the log level to 'none', this is the same as `-L none`", action="store_true", default=False) parser.add_option("--profile", dest="profile", action="store_true", default=False, help="Profiles the daemon") + parser.add_option("--read-only-config-keys", dest="read_only_config_keys", + help="List of comma-separated config keys that will not be modified by set_config RPC.", + action="store", type="str") # Get the options and args from the OptionParser (options, args) = parser.parse_args() @@ -173,6 +179,8 @@ # Setup the logger if options.quiet: options.loglevel = "none" + if options.loglevel: + options.loglevel = options.loglevel.lower() if options.logfile: # Try to create the logfile's directory if it doesn't exist try: @@ -204,7 +212,7 @@ # If the donot daemonize is set, then we just skip the forking if not options.donot: # Windows check, we log to the config folder by default - if deluge.common.windows_check() or deluge.common.osx_check(): + if deluge.common.windows_check(): open_logfile() write_pidfile() else: diff -Nru deluge-1.3.12/deluge/plugins/autoadd/autoadd/core.py deluge-1.3.13/deluge/plugins/autoadd/autoadd/core.py --- deluge-1.3.12/deluge/plugins/autoadd/autoadd/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/autoadd/autoadd/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -259,12 +259,13 @@ # Skip directories continue else: - ext = os.path.splitext(filename)[1] + ext = os.path.splitext(filename)[1].lower() if ext == ".torrent": magnet = False elif ext == ".magnet": magnet = True else: + log.debug("File checked for auto-loading is invalid: %s", filename) continue try: filedump = self.load_torrent(filepath, magnet) diff -Nru deluge-1.3.12/deluge/plugins/blocklist/blocklist/core.py deluge-1.3.13/deluge/plugins/blocklist/blocklist/core.py --- deluge-1.3.12/deluge/plugins/blocklist/blocklist/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/blocklist/blocklist/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -135,6 +135,8 @@ :rtype: Deferred """ + if not self.config["url"]: + return # Reset variables self.filename = None @@ -425,12 +427,12 @@ def pause_session(self): if not self.core.session.is_paused(): - self.core.session.pause() + self.core.pause_all_torrents() self.need_to_resume_session = True else: self.need_to_resume_session = False def resume_session(self, result): - self.core.session.resume() + self.core.resume_all_torrents() self.need_to_resume_session = False return result diff -Nru deluge-1.3.12/deluge/plugins/blocklist/blocklist/gtkui.py deluge-1.3.13/deluge/plugins/blocklist/blocklist/gtkui.py --- deluge-1.3.12/deluge/plugins/blocklist/blocklist/gtkui.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/blocklist/blocklist/gtkui.py 2016-07-20 14:23:28.000000000 +0000 @@ -138,7 +138,7 @@ def _on_apply_prefs(self): config = {} - config["url"] = self.glade.get_widget("entry_url").get_text() + config["url"] = self.glade.get_widget("entry_url").get_text().strip() config["check_after_days"] = self.glade.get_widget("spin_check_days").get_value_as_int() config["load_on_start"] = self.glade.get_widget("chk_import_on_start").get_active() client.blocklist.set_config(config) diff -Nru deluge-1.3.12/deluge/plugins/execute/execute/core.py deluge-1.3.13/deluge/plugins/execute/execute/core.py --- deluge-1.3.12/deluge/plugins/execute/execute/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/execute/execute/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -44,7 +44,7 @@ from deluge.configmanager import ConfigManager from deluge.core.rpcserver import export from deluge.event import DelugeEvent -from deluge.common import utf8_encoded +from deluge.common import utf8_encoded, windows_check DEFAULT_CONFIG = { @@ -140,9 +140,15 @@ if command[EXECUTE_EVENT] == event: command = os.path.expandvars(command[EXECUTE_COMMAND]) command = os.path.expanduser(command) + + cmd_args = [torrent_id, torrent_name, save_path] + if windows_check: + # Escape ampersand on windows (see #2784) + cmd_args = [arg.replace("&", "^^^&") for arg in cmd_args] + if os.path.isfile(command) and os.access(command, os.X_OK): - log.debug("[execute] Running %s", command) - d = getProcessOutputAndValue(command, (torrent_id, torrent_name, save_path), env=os.environ) + log.debug("[execute] Running %s with args: %s", command, cmd_args) + d = getProcessOutputAndValue(command, cmd_args, env=os.environ) d.addCallback(log_error, command) else: log.error("[execute] Execute script not found or not executable") diff -Nru deluge-1.3.12/deluge/plugins/extractor/extractor/core.py deluge-1.3.13/deluge/plugins/extractor/extractor/core.py --- deluge-1.3.12/deluge/plugins/extractor/extractor/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/extractor/extractor/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -37,9 +37,10 @@ # # +import errno import os -from twisted.internet.utils import getProcessValue +from twisted.internet.utils import getProcessOutputAndValue from deluge.log import LOG as log from deluge.plugins.pluginbase import CorePluginBase @@ -142,40 +143,38 @@ if file_ext_sec and file_ext_sec + file_ext in EXTRACT_COMMANDS: file_ext = file_ext_sec + file_ext elif file_ext not in EXTRACT_COMMANDS or file_ext_sec == '.tar': - log.warning("EXTRACTOR: Can't extract file with unknown file type: %s" % f["path"]) + log.debug("EXTRACTOR: Can't extract file with unknown file type: %s", f["path"]) continue - cmd = EXTRACT_COMMANDS[file_ext] + elif file_ext == ".rar" and "part" in file_ext_sec: + part_num = file_ext_sec.split("part")[1] + if part_num.isdigit() and int(part_num) != 1: + log.debug("Skipping remaining multi-part rar files: %s", f["path"]) + continue - # Now that we have the cmd, lets run it to extract the files + cmd = EXTRACT_COMMANDS[file_ext] fpath = os.path.join(tid_status["save_path"], os.path.normpath(f["path"])) - - # Get the destination path dest = os.path.normpath(self.config["extract_path"]) if self.config["use_name_folder"]: - name = tid_status["name"] - dest = os.path.join(dest, name) + dest = os.path.join(dest, tid_status["name"]) - # Create the destination folder if it doesn't exist - if not os.path.exists(dest): - try: - os.makedirs(dest) - except Exception, e: - log.error("EXTRACTOR: Error creating destination folder: %s", e) - return - - def on_extract_success(result, torrent_id, fpath): - # XXX: Emit an event - log.info("EXTRACTOR: Extract successful: %s (%s)", fpath, torrent_id) - - def on_extract_failed(result, torrent_id, fpath): - # XXX: Emit an event - log.error("EXTRACTOR: Extract failed: %s (%s)", fpath, torrent_id) - - # Run the command and add some callbacks - log.debug("EXTRACTOR: Extracting %s with %s %s to %s", fpath, cmd[0], cmd[1], dest) - d = getProcessValue(cmd[0], cmd[1].split() + [str(fpath)], {}, str(dest)) - d.addCallback(on_extract_success, torrent_id, fpath) - d.addErrback(on_extract_failed, torrent_id, fpath) + try: + os.makedirs(dest) + except OSError, ex: + if not (ex.errno == errno.EEXIST and os.path.isdir(dest)): + log.error("EXTRACTOR: Error creating destination folder: %s", ex) + break + + def on_extract(result, torrent_id, fpath): + # Check command exit code. + if not result[2]: + log.info("EXTRACTOR: Extract successful: %s (%s)", fpath, torrent_id) + else: + log.error("EXTRACTOR: Extract failed: %s (%s) %s", fpath, torrent_id, result[1]) + + # Run the command and add callback. + log.debug("EXTRACTOR: Extracting %s from %s with %s %s to %s", fpath, torrent_id, cmd[0], cmd[1], dest) + d = getProcessOutputAndValue(cmd[0], cmd[1].split() + [str(fpath)], os.environ, str(dest)) + d.addCallback(on_extract, torrent_id, fpath) @export def set_config(self, config): diff -Nru deluge-1.3.12/deluge/plugins/extractor/setup.py deluge-1.3.13/deluge/plugins/extractor/setup.py --- deluge-1.3.12/deluge/plugins/extractor/setup.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/extractor/setup.py 2016-07-20 14:23:28.000000000 +0000 @@ -42,7 +42,7 @@ __plugin_name__ = "Extractor" __author__ = "Andrew Resch" __author_email__ = "andrewresch@gmail.com" -__version__ = "0.4" +__version__ = "0.6" __url__ = "http://deluge-torrent.org" __license__ = "GPLv3" __description__ = "Extract files upon torrent completion" diff -Nru deluge-1.3.12/deluge/plugins/label/label/data/label_options.glade deluge-1.3.13/deluge/plugins/label/label/data/label_options.glade --- deluge-1.3.12/deluge/plugins/label/label/data/label_options.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/label/label/data/label_options.glade 2016-07-20 14:23:28.000000000 +0000 @@ -10,7 +10,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG True - False True @@ -650,7 +649,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG True - False diff -Nru deluge-1.3.12/deluge/plugins/notifications/notifications/data/config.glade deluge-1.3.13/deluge/plugins/notifications/notifications/data/config.glade --- deluge-1.3.12/deluge/plugins/notifications/notifications/data/config.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/notifications/notifications/data/config.glade 2016-07-20 14:23:28.000000000 +0000 @@ -1,6 +1,6 @@ - + - + @@ -179,7 +179,6 @@ True True - 1 @@ -205,12 +204,10 @@ True True - 65535 - + 5 5 - 25 1 65535 0 10 0 + 25 1 65535 1 10 0 1 - True True @@ -235,7 +232,6 @@ True True - 1 @@ -259,7 +255,6 @@ True True False - 1 @@ -401,7 +396,6 @@ True True - 1 diff -Nru deluge-1.3.12/deluge/plugins/notifications/notifications/gtkui.py deluge-1.3.13/deluge/plugins/notifications/notifications/gtkui.py --- deluge-1.3.12/deluge/plugins/notifications/notifications/gtkui.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/notifications/notifications/gtkui.py 2016-07-20 14:23:28.000000000 +0000 @@ -227,7 +227,7 @@ return '' def _on_torrent_finished_event_popup(self, torrent_id): - d = client.core.get_torrent_status(torrent_id, ["name", "num_files"]) + d = client.core.get_torrent_status(torrent_id, ["name", "file_progress"]) d.addCallback(self._on_torrent_finished_event_got_torrent_status) d.addErrback(self._on_torrent_finished_event_torrent_status_failure) return d @@ -239,6 +239,7 @@ log.debug("Handler for TorrentFinishedEvent GTKUI called. " "Got Torrent Status") title = _("Finished Torrent") + torrent_status["num_files"] = torrent_status["file_progress"].count(1.0) message = _("The torrent \"%(name)s\" including %(num_files)i file(s) " "has finished downloading.") % torrent_status return title, message @@ -253,7 +254,6 @@ "notifications-gtk.conf", DEFAULT_PREFS ) self.glade = gtk.glade.XML(get_resource("config.glade")) - self.glade.get_widget("smtp_port").set_value(25) self.prefs = self.glade.get_widget("prefs_box") self.prefs.show_all() diff -Nru deluge-1.3.12/deluge/plugins/scheduler/scheduler/core.py deluge-1.3.13/deluge/plugins/scheduler/scheduler/core.py --- deluge-1.3.12/deluge/plugins/scheduler/scheduler/core.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/scheduler/scheduler/core.py 2016-07-20 14:23:28.000000000 +0000 @@ -127,9 +127,9 @@ """ core_config = deluge.configmanager.ConfigManager("core.conf") for setting in CONTROLLED_SETTINGS: - component.get("PreferencesManager").do_config_set_func(setting, core_config[setting]) + core_config.apply_set_functions(setting) # Resume the session if necessary - component.get("Core").session.resume() + component.get("Core").resume_all_torrents() def do_schedule(self, timer=True): """ @@ -153,10 +153,10 @@ settings.active_seeds = self.config["low_active_up"] session.set_settings(settings) # Resume the session if necessary - component.get("Core").session.resume() + component.get("Core").resume_all_torrents() elif state == "Red": # This is Red (Stop), so pause the libtorrent session - component.get("Core").session.pause() + component.get("Core").pause_all_torrents() if state != self.state: # The state has changed since last update so we need to emit an event diff -Nru deluge-1.3.12/deluge/plugins/scheduler/scheduler/gtkui.py deluge-1.3.13/deluge/plugins/scheduler/scheduler/gtkui.py --- deluge-1.3.12/deluge/plugins/scheduler/scheduler/gtkui.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/scheduler/scheduler/gtkui.py 2016-07-20 14:23:28.000000000 +0000 @@ -77,20 +77,20 @@ #redraw the whole thing def expose(self, widget, event): - self.context = self.window.cairo_create() - self.context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) - self.context.clip() + context = self.window.cairo_create() + context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) + context.clip() width = self.window.get_size()[0] height = self.window.get_size()[1] for y in xrange(7): for x in xrange(24): - self.context.set_source_rgba(self.colors[self.button_state[x][y]][0], self.colors[self.button_state[x][y]][1], self.colors[self.button_state[x][y]][2], 0.7) - self.context.rectangle(width*(6*x/145.0+1/145.0), height*(6*y/43.0+1/43.0), 5*width/145.0, 5*height/43.0) - self.context.fill_preserve() - self.context.set_source_rgba(0.5, 0.5, 0.5, 0.5) - self.context.stroke() + context.set_source_rgba(self.colors[self.button_state[x][y]][0], self.colors[self.button_state[x][y]][1], self.colors[self.button_state[x][y]][2], 0.7) + context.rectangle(width*(6*x/145.0+1/145.0), height*(6*y/43.0+1/43.0), 5*width/145.0, 5*height/43.0) + context.fill_preserve() + context.set_source_rgba(0.5, 0.5, 0.5, 0.5) + context.stroke() #coordinates --> which box def get_point(self, event): diff -Nru deluge-1.3.12/deluge/plugins/scheduler/setup.py deluge-1.3.13/deluge/plugins/scheduler/setup.py --- deluge-1.3.12/deluge/plugins/scheduler/setup.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/plugins/scheduler/setup.py 2016-07-20 14:23:28.000000000 +0000 @@ -41,7 +41,7 @@ __plugin_name__ = "Scheduler" __author__ = "Andrew Resch" __author_email__ = "andrewresch@gmail.com" -__version__ = "0.2" +__version__ = "0.3" __url__ = "http://deluge-torrent.org" __license__ = "GPLv3" __description__ = "Schedule limits on a per-hour per-day basis." diff -Nru deluge-1.3.12/deluge/ui/client.py deluge-1.3.13/deluge/ui/client.py --- deluge-1.3.12/deluge/ui/client.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/client.py 2016-07-20 14:23:28.000000000 +0000 @@ -576,8 +576,6 @@ try: if deluge.common.windows_check(): subprocess.Popen(["deluged", "--port=%s" % port, "--config=%s" % config]) - elif deluge.common.osx_check(): - subprocess.call(["nohup", "deluged", "--port=%s" % port, "--config=%s" % config]) else: subprocess.call(["deluged", "--port=%s" % port, "--config=%s" % config]) except OSError, e: diff -Nru deluge-1.3.12/deluge/ui/common.py deluge-1.3.13/deluge/ui/common.py --- deluge-1.3.12/deluge/ui/common.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/common.py 2016-07-20 14:23:28.000000000 +0000 @@ -410,10 +410,11 @@ auth_file = deluge.configmanager.get_config_dir("auth") if os.path.exists(auth_file): for line in open(auth_file): - if line.startswith("#"): - # This is a comment line - continue line = line.strip() + if line.startswith("#") or not line: + # This is a comment or blank line + continue + try: lsplit = line.split(":") except Exception, e: diff -Nru deluge-1.3.12/deluge/ui/console/commands/add.py deluge-1.3.13/deluge/ui/console/commands/add.py --- deluge-1.3.12/deluge/ui/console/commands/add.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/console/commands/add.py 2016-07-20 14:23:28.000000000 +0000 @@ -59,7 +59,7 @@ t_options = {} if options["path"]: - t_options["download_location"] = os.path.expanduser(options["path"]) + t_options["download_location"] = os.path.abspath(os.path.expanduser(options["path"])) def on_success(result): self.console.write("{!success!}Torrent added!") diff -Nru deluge-1.3.12/deluge/ui/console/commands/info.py deluge-1.3.13/deluge/ui/console/commands/info.py --- deluge-1.3.12/deluge/ui/console/commands/info.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/console/commands/info.py 2016-07-20 14:23:28.000000000 +0000 @@ -70,7 +70,8 @@ "is_seed", "is_finished", "active_time", - "seeding_time" + "seeding_time", + "time_added" ] # Add filter specific state to torrent states diff -Nru deluge-1.3.12/deluge/ui/console/main.py deluge-1.3.13/deluge/ui/console/main.py --- deluge-1.3.12/deluge/ui/console/main.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/console/main.py 2016-07-20 14:23:28.000000000 +0000 @@ -289,7 +289,7 @@ if self.interactive: self.screen.add_line(line, not self.batch_write) else: - print colors.strip_colors(line.encode("utf-8")) + print colors.strip_colors(deluge.common.utf8_encoded(line)) def do_command(self, cmd): """ diff -Nru deluge-1.3.12/deluge/ui/gtkui/aboutdialog.py deluge-1.3.13/deluge/ui/gtkui/aboutdialog.py --- deluge-1.3.12/deluge/ui/gtkui/aboutdialog.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/aboutdialog.py 2016-07-20 14:23:28.000000000 +0000 @@ -57,7 +57,7 @@ version = deluge.common.get_version() self.about.set_copyright( - _("Copyright %(year_start)s-%(year_end)s Deluge Team") % {"year_start": 2007, "year_end": 2015}) + _("Copyright %(year_start)s-%(year_end)s Deluge Team") % {"year_start": 2007, "year_end": 2016}) self.about.set_comments( _("A peer-to-peer file sharing program\nutilizing the BitTorrent protocol.") + "\n\n" + _("Client:") + " %s\n" % version) diff -Nru deluge-1.3.12/deluge/ui/gtkui/addtorrentdialog.py deluge-1.3.13/deluge/ui/gtkui/addtorrentdialog.py --- deluge-1.3.12/deluge/ui/gtkui/addtorrentdialog.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/addtorrentdialog.py 2016-07-20 14:23:28.000000000 +0000 @@ -251,12 +251,20 @@ for uri in uris: s = uri.split("&")[0][20:] + info_hash = None if len(s) == 32: - info_hash = base64.b32decode(s).encode("hex") + try: + info_hash = base64.b32decode(s.upper()).encode("hex") + except TypeError, ex: + log.debug("Invalid base32 magnet hash: %s, %s", s, ex) + continue elif len(s) == 40: info_hash = s + if info_hash is None: + log.error("Invalid info_hash in uri: %s", uri) + continue if info_hash in self.infos: - log.debug("Torrent already in list!") + log.debug("Torrent already in list: %s", uri) continue name = None for i in uri.split("&"): diff -Nru deluge-1.3.12/deluge/ui/gtkui/connectionmanager.py deluge-1.3.13/deluge/ui/gtkui/connectionmanager.py --- deluge-1.3.12/deluge/ui/gtkui/connectionmanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/connectionmanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -39,6 +39,7 @@ import time import hashlib from twisted.internet import reactor +from socket import gethostbyname import deluge.component as component import deluge.common @@ -303,8 +304,11 @@ user = row[HOSTLIST_COL_USER] password = row[HOSTLIST_COL_PASS] - if client.connected() and \ - (host, port, "localclient" if not user and host in ("127.0.0.1", "localhost") else user) == client.connection_info(): + if client.connected() and ( + gethostbyname(host), + port, + "localclient" if not user and host in ("127.0.0.1", "localhost") else user + ) == client.connection_info(): def on_info(info): if not self.running: return diff -Nru deluge-1.3.12/deluge/ui/gtkui/details_tab.py deluge-1.3.13/deluge/ui/gtkui/details_tab.py --- deluge-1.3.12/deluge/ui/gtkui/details_tab.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/details_tab.py 2016-07-20 14:23:28.000000000 +0000 @@ -35,6 +35,7 @@ import gtk, gtk.glade +from xml.sax.saxutils import escape as xml_escape from deluge.ui.client import client import deluge.component as component @@ -103,12 +104,13 @@ txt = widget[1](*args) else: txt = status[widget[2][0]] + txt = xml_escape(txt) if widget[0].get_text() != txt: if widget[2][0] == 'comment' and is_url(txt): - widget[0].set_markup('%s' % (txt, txt.replace('&', '&'))) + widget[0].set_markup('%s' % (txt, txt)) else: - widget[0].set_markup(txt.replace('&', '&')) + widget[0].set_markup(txt) def clear(self): for widget in self.label_widgets: diff -Nru deluge-1.3.12/deluge/ui/gtkui/edittrackersdialog.py deluge-1.3.13/deluge/ui/gtkui/edittrackersdialog.py --- deluge-1.3.12/deluge/ui/gtkui/edittrackersdialog.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/edittrackersdialog.py 2016-07-20 14:23:28.000000000 +0000 @@ -133,10 +133,12 @@ tracker = self.liststore.get_value(selected, 1) self.glade.get_widget("entry_edit_tracker").set_text(tracker) self.edit_tracker_entry.show() - self.glade.get_widget("edit_tracker_entry").grab_focus() + self.edit_tracker_entry.grab_focus() + self.dialog.set_sensitive(False) def on_button_edit_cancel_clicked(self, widget): log.debug("on_button_edit_cancel_clicked") + self.dialog.set_sensitive(True) self.edit_tracker_entry.hide() def on_button_edit_ok_clicked(self, widget): @@ -144,6 +146,7 @@ selected = self.get_selected() tracker = self.glade.get_widget("entry_edit_tracker").get_text() self.liststore.set_value(selected, 1, tracker) + self.dialog.set_sensitive(True) self.edit_tracker_entry.hide() def on_button_up_clicked(self, widget): diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/add_torrent_dialog.glade deluge-1.3.13/deluge/ui/gtkui/glade/add_torrent_dialog.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/add_torrent_dialog.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/add_torrent_dialog.glade 2016-07-20 14:23:28.000000000 +0000 @@ -4,7 +4,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 Add Torrents center-on-parent True @@ -13,29 +12,23 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 2 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - none - True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - 12 - 12 + 4 + 5 + 5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 2 True @@ -46,7 +39,7 @@ in - 100 + 71 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -74,7 +67,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 2 4 @@ -122,7 +114,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 2 4 @@ -170,7 +161,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 2 4 @@ -263,25 +253,18 @@ - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - <b>Torrents</b> - True - - label_item + False + False - - - - True - False - + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 5 + True True @@ -292,15 +275,16 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 + 2 automatic automatic - out + in True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 1 False True @@ -343,8 +327,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - 5 + 2 True @@ -355,7 +338,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 + 1 5 5 @@ -401,6 +384,7 @@ False False + 1 0 @@ -414,7 +398,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 + 1 5 5 @@ -495,7 +479,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 12 @@ -565,7 +548,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 12 @@ -727,13 +709,12 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 12 + 5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 Add In _Paused State @@ -855,6 +836,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 True @@ -951,6 +933,8 @@ + + False False @@ -1017,7 +1001,6 @@ True dialog False - False True @@ -1176,7 +1159,6 @@ True dialog False - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/connection_manager.glade deluge-1.3.13/deluge/ui/gtkui/glade/connection_manager.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/connection_manager.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/connection_manager.glade 2016-07-20 14:23:28.000000000 +0000 @@ -10,7 +10,6 @@ GTK_WIN_POS_CENTER True GDK_WINDOW_TYPE_HINT_DIALOG - False True @@ -211,7 +210,6 @@ 300 True GDK_WINDOW_TYPE_HINT_DIALOG - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/create_torrent_dialog.glade deluge-1.3.13/deluge/ui/gtkui/glade/create_torrent_dialog.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/create_torrent_dialog.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/create_torrent_dialog.glade 2016-07-20 14:23:28.000000000 +0000 @@ -696,7 +696,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG False - False True @@ -840,7 +839,6 @@ Creating Torrent GTK_WIN_POS_CENTER_ON_PARENT GDK_WINDOW_TYPE_HINT_DIALOG - False True @@ -879,7 +877,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG False - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/dgtkpopups.glade deluge-1.3.13/deluge/ui/gtkui/glade/dgtkpopups.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/dgtkpopups.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/dgtkpopups.glade 2016-07-20 14:23:28.000000000 +0000 @@ -157,7 +157,6 @@ True True False - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/edit_trackers.glade deluge-1.3.13/deluge/ui/gtkui/glade/edit_trackers.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/edit_trackers.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/edit_trackers.glade 2016-07-20 14:23:28.000000000 +0000 @@ -11,7 +11,6 @@ 400 True GDK_WINDOW_TYPE_HINT_DIALOG - False True @@ -226,7 +225,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG False - False True @@ -382,7 +380,6 @@ True GDK_WINDOW_TYPE_HINT_DIALOG False - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/main_window.glade deluge-1.3.13/deluge/ui/gtkui/glade/main_window.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/main_window.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/main_window.glade 2016-07-20 14:23:28.000000000 +0000 @@ -2280,7 +2280,6 @@ False center-on-parent dialog - False True @@ -2477,7 +2476,6 @@ center-on-parent deluge dialog - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/move_storage_dialog.glade deluge-1.3.13/deluge/ui/gtkui/glade/move_storage_dialog.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/move_storage_dialog.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/move_storage_dialog.glade 2016-07-20 14:23:28.000000000 +0000 @@ -10,7 +10,6 @@ GTK_WIN_POS_CENTER_ON_PARENT True GDK_WINDOW_TYPE_HINT_DIALOG - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/preferences_dialog.glade deluge-1.3.13/deluge/ui/gtkui/glade/preferences_dialog.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/preferences_dialog.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/preferences_dialog.glade 2016-07-20 14:23:28.000000000 +0000 @@ -11,7 +11,6 @@ 560 True dialog - False diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/queuedtorrents.glade deluge-1.3.13/deluge/ui/gtkui/glade/queuedtorrents.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/queuedtorrents.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/queuedtorrents.glade 2016-07-20 14:23:28.000000000 +0000 @@ -11,7 +11,6 @@ 300 True GDK_WINDOW_TYPE_HINT_DIALOG - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/glade/remove_torrent_dialog.glade deluge-1.3.13/deluge/ui/gtkui/glade/remove_torrent_dialog.glade --- deluge-1.3.12/deluge/ui/gtkui/glade/remove_torrent_dialog.glade 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/glade/remove_torrent_dialog.glade 2016-07-20 14:23:28.000000000 +0000 @@ -10,7 +10,6 @@ GTK_WIN_POS_CENTER_ON_PARENT True GDK_WINDOW_TYPE_HINT_DIALOG - False True diff -Nru deluge-1.3.12/deluge/ui/gtkui/ipcinterface.py deluge-1.3.13/deluge/ui/gtkui/ipcinterface.py --- deluge-1.3.12/deluge/ui/gtkui/ipcinterface.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/ipcinterface.py 2016-07-20 14:23:28.000000000 +0000 @@ -211,7 +211,7 @@ log.debug("Attempting to add file (%s) from external source...", arg) if urlparse(arg).scheme == "file": arg = url2pathname(urlparse(arg).path) - path = os.path.abspath(arg) + path = os.path.abspath(deluge.common.decode_string(arg)) if not os.path.exists(path): log.error("No such file: %s", path) diff -Nru deluge-1.3.12/deluge/ui/gtkui/listview.py deluge-1.3.13/deluge/ui/gtkui/listview.py --- deluge-1.3.12/deluge/ui/gtkui/listview.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/listview.py 2016-07-20 14:23:28.000000000 +0000 @@ -100,7 +100,13 @@ def cell_data_date(column, cell, model, row, data): """Display value as date, eg 05/05/08""" - cell.set_property('text', deluge.common.fdate(model.get_value(row, data))) + date = model.get_value(row, data) + if date <= 0: + date_str = "" + else: + date_str = deluge.common.fdate(date) + + cell.set_property('text', date_str) def cell_data_speed_limit(column, cell, model, row, data): """Display value as a speed, eg. 2 KiB/s""" @@ -429,8 +435,6 @@ if self.liststore is not None: self.liststore.foreach(copy_row, (new_list, self.columns)) self.liststore = new_list - self.create_model_filter() - return def update_treeview_column(self, header, add=True): """Update TreeViewColumn based on ListView column mappings""" @@ -503,6 +507,8 @@ del self.liststore_columns[index] # Create a new liststore self.create_new_liststore() + # Create new model for the treeview + self.create_model_filter() # Re-create the menu self.create_checklist_menu() @@ -547,7 +553,11 @@ # Create a new list with the added column self.create_new_liststore() - if column_type == None: + # Happens only on columns added after the torrent list has been loaded + if self.model_filter: + self.create_model_filter() + + if column_type is None: return self.update_treeview_column(header) @@ -630,20 +640,19 @@ def add_progress_column(self, header, col_types=[float, str], sortid=0, hidden=False, position=None, status_field=None, function=None, column_type="progress", - default=True): + sort_func=None, default=True): """Add a progress column to the listview.""" render = gtk.CellRendererProgress() self.add_column(header, render, col_types, hidden, position, status_field, sortid, function=function, column_type=column_type, value=0, text=1, - default=default) - + sort_func=sort_func, default=default) return True def add_texticon_column(self, header, col_types=[str, str], sortid=1, hidden=False, position=None, status_field=None, - column_type="texticon", function=None, + column_type="texticon", function=None, sort_func=None, default=True): """Adds a texticon column to the listview.""" render1 = gtk.CellRendererPixbuf() @@ -651,8 +660,8 @@ self.add_column(header, (render1, render2), col_types, hidden, position, status_field, sortid, column_type=column_type, - function=function, pixbuf=0, text=1, default=default) - + function=function, sort_func=sort_func, pixbuf=0, + text=1, default=default) return True def on_keypress_search_by_name(self, model, columnn, key, iter): diff -Nru deluge-1.3.12/deluge/ui/gtkui/options_tab.py deluge-1.3.13/deluge/ui/gtkui/options_tab.py --- deluge-1.3.12/deluge/ui/gtkui/options_tab.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/options_tab.py 2016-07-20 14:23:28.000000000 +0000 @@ -150,6 +150,7 @@ self.chk_move_completed.set_active(status["move_on_completed"]) if status["move_on_completed_path"] != self.prev_status["move_on_completed_path"]: if client.is_localhost(): + self.filechooser_move_completed.unselect_all() self.filechooser_move_completed.set_current_folder(status["move_on_completed_path"]) else: self.entry_move_completed.set_text(status["move_on_completed_path"]) diff -Nru deluge-1.3.12/deluge/ui/gtkui/preferences.py deluge-1.3.13/deluge/ui/gtkui/preferences.py --- deluge-1.3.12/deluge/ui/gtkui/preferences.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/preferences.py 2016-07-20 14:23:28.000000000 +0000 @@ -941,7 +941,7 @@ response = chooser.run() if response == gtk.RESPONSE_OK: - filepath = chooser.get_filename() + filepath = deluge.common.decode_string(chooser.get_filename()) else: chooser.destroy() return diff -Nru deluge-1.3.12/deluge/ui/gtkui/systemtray.py deluge-1.3.13/deluge/ui/gtkui/systemtray.py --- deluge-1.3.12/deluge/ui/gtkui/systemtray.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/systemtray.py 2016-07-20 14:23:28.000000000 +0000 @@ -350,7 +350,7 @@ self.tray_glade.get_widget("menuitem_show_deluge").set_active(False) popup_function = gtk.status_icon_position_menu - if deluge.common.windows_check(): + if deluge.common.windows_check() or deluge.common.osx_check(): popup_function = None button = 0 self.tray_menu.popup(None, None, popup_function, diff -Nru deluge-1.3.12/deluge/ui/gtkui/torrentview.py deluge-1.3.13/deluge/ui/gtkui/torrentview.py --- deluge-1.3.12/deluge/ui/gtkui/torrentview.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/gtkui/torrentview.py 2016-07-20 14:23:28.000000000 +0000 @@ -42,6 +42,7 @@ import gettext import gobject import warnings +from locale import strcoll from urlparse import urlparse import deluge.common @@ -157,7 +158,7 @@ cell.set_property("value", value) textstr = _t(state_str) - if state_str != "Seeding" and value < 100: + if state_str not in ("Error", "Seeding") and value < 100: textstr = "%s %.2f%%" % (textstr, value) if cell.get_property("text") != textstr: cell.set_property("text", textstr) @@ -169,6 +170,16 @@ else: cell.set_property("text", str(value + 1)) +def str_nocase_sort(model, iter1, iter2, data): + """ + Sort string column data with locale.strcoll which (allegedly) + uses ISO 14651. + + """ + v1 = model[iter1][data].lower() + v2 = model[iter2][data].lower() + return strcoll(v1, v2) + def queue_peer_seed_sort_function(v1, v2): if v1 == v2: return 0 @@ -210,6 +221,17 @@ return queue_peer_seed_sort_function(v2, v4) return queue_peer_seed_sort_function(v1, v3) +def progress_sort(model, iter1, iter2, sort_column_id): + progress1 = model[iter1][sort_column_id] + progress2 = model[iter2][sort_column_id] + # Progress value is equal, so sort on state + if progress1 == progress2: + state1 = model[iter1][sort_column_id + 1] + state2 = model[iter2][sort_column_id + 1] + return cmp(state1, state2) + return cmp(progress1, progress2) + + class TorrentView(listview.ListView, component.Component): """TorrentView handles the listing of torrents.""" def __init__(self): @@ -243,7 +265,8 @@ sort_func=queue_column_sort) self.add_texticon_column(_("Name"), status_field=["state", "name"], - function=cell_data_statusicon) + function=cell_data_statusicon, + sort_func=str_nocase_sort) self.add_func_column(_("Size"), listview.cell_data_size, [gobject.TYPE_UINT64], status_field=["total_wanted"]) @@ -256,7 +279,8 @@ self.add_progress_column(_("Progress"), status_field=["progress", "state"], col_types=[float, str], - function=cell_data_progress) + function=cell_data_progress, + sort_func=progress_sort) self.add_func_column(_("Seeders"), listview.cell_data_peer, [int, int], status_field=["num_seeds", "total_seeds"], sort_func=seed_peer_column_sort, default=False) @@ -265,9 +289,9 @@ sort_func=seed_peer_column_sort, default=False) self.add_func_column(_("Seeders") + "/" + _("Peers"), listview.cell_data_ratio, [float], status_field=["seeds_peers_ratio"], default=False) - self.add_func_column(_("Down Speed"), listview.cell_data_speed, [float], + self.add_func_column(_("Down Speed"), listview.cell_data_speed, [int], status_field=["download_payload_rate"]) - self.add_func_column(_("Up Speed"), listview.cell_data_speed, [float], + self.add_func_column(_("Up Speed"), listview.cell_data_speed, [int], status_field=["upload_payload_rate"]) self.add_func_column(_("Down Limit"), listview.cell_data_speed_limit, [float], status_field=["max_download_speed"], default=False) @@ -279,7 +303,7 @@ status_field=["ratio"], default=False) self.add_func_column(_("Avail"), listview.cell_data_ratio, [float], status_field=["distributed_copies"], default=False) - self.add_func_column(_("Added"), listview.cell_data_date, [float], + self.add_func_column(_("Added"), listview.cell_data_date, [int], status_field=["time_added"], default=False) self.add_texticon_column(_("Tracker"), status_field=["tracker_host", "tracker_host"], @@ -338,14 +362,14 @@ def shutdown(self): """Called when GtkUi is exiting""" - if self.window.visible(): - self.save_state() + self.save_state() def save_state(self): """ Saves the state of the torrent view. """ - listview.ListView.save_state(self, "torrentview.state") + if self.window.visible(): + listview.ListView.save_state(self, "torrentview.state") def remove_column(self, header): """Removes the column with the name 'header' from the torrentview""" diff -Nru deluge-1.3.12/deluge/ui/ui.py deluge-1.3.13/deluge/ui/ui.py --- deluge-1.3.12/deluge/ui/ui.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/ui.py 2016-07-20 14:23:28.000000000 +0000 @@ -99,7 +99,10 @@ return self.__args def start(self): - (self.__options, self.__args) = self.__parser.parse_args() + if deluge.common.windows_check(): + (self.__options, self.__args) = self.__parser.parse_args(deluge.common.win32_unicode_argv()[1:]) + else: + (self.__options, self.__args) = self.__parser.parse_args() if self.__options.quiet: self.__options.loglevel = "none" diff -Nru deluge-1.3.12/deluge/ui/web/gettext.js deluge-1.3.13/deluge/ui/web/gettext.js --- deluge-1.3.12/deluge/ui/web/gettext.js 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/gettext.js 2016-07-20 14:23:28.000000000 +0000 @@ -32,55 +32,55 @@ // DetailsTab.js:50 GetText.add('# of files', '${escape(_("# of files"))}') -// Menus.js:166 +// Menus.js:206 GetText.add('0', '${escape(_("0"))}') -// Menus.js:168 +// Menus.js:211 GetText.add('1', '${escape(_("1"))}') -// Menus.js:111, Menus.js:130 +// Menus.js:100, Menus.js:137 GetText.add('10 KiB/s', '${escape(_("10 KiB/s"))}') -// Menus.js:149 +// Menus.js:174 GetText.add('100', '${escape(_("100"))}') -// Menus.js:170 +// Menus.js:216 GetText.add('2', '${escape(_("2"))}') -// Menus.js:151 +// Menus.js:179 GetText.add('200', '${escape(_("200"))}') -// Menus.js:172 +// Menus.js:221 GetText.add('3', '${escape(_("3"))}') -// Menus.js:113, Menus.js:132 +// Menus.js:105, Menus.js:142 GetText.add('30 KiB/s', '${escape(_("30 KiB/s"))}') -// Menus.js:153 +// Menus.js:184 GetText.add('300', '${escape(_("300"))}') -// Menus.js:117, Menus.js:136 +// Menus.js:115, Menus.js:152 GetText.add('300 KiB/s', '${escape(_("300 KiB/s"))}') -// Menus.js:174 +// Menus.js:226 GetText.add('5', '${escape(_("5"))}') -// Menus.js:109, Menus.js:128 +// Menus.js:95, Menus.js:132 GetText.add('5 KiB/s', '${escape(_("5 KiB/s"))}') -// Menus.js:147 +// Menus.js:169 GetText.add('50', '${escape(_("50"))}') -// Menus.js:155 +// Menus.js:189 GetText.add('500', '${escape(_("500"))}') -// Menus.js:115, Menus.js:134 +// Menus.js:110, Menus.js:147 GetText.add('80 KiB/s', '${escape(_("80 KiB/s"))}') // QueuePage.js:69 GetText.add('Active Torrents', '${escape(_("Active Torrents"))}') -// EditTrackersWindow.js:112, ConnectionManager.js:110, AddConnectionWindow.js:56, Toolbar.js:58, AddTrackerWindow.js:57, UrlWindow.js:50, FileWindow.js:53, AddWindow.js:52 +// EditTrackersWindow.js:112, ConnectionManager.js:110, AddConnectionWindow.js:56, Toolbar.js:58, AddTrackerWindow.js:66, UrlWindow.js:50, FileWindow.js:53, AddWindow.js:52 GetText.add('Add', '${escape(_("Add"))}') // AddConnectionWindow.js:40 @@ -92,7 +92,7 @@ // AddWindow.js:37 GetText.add('Add Torrents', '${escape(_("Add Torrents"))}') -// AddTrackerWindow.js:40 +// AddTrackerWindow.js:49 GetText.add('Add Tracker', '${escape(_("Add Tracker"))}') // FileWindow.js:40 @@ -122,7 +122,7 @@ // OptionsTab.js:347, PreferencesWindow.js:107 GetText.add('Apply', '${escape(_("Apply"))}') -// Menus.js:181, OptionsTab.js:215 +// Menus.js:238, OptionsTab.js:215 GetText.add('Auto Managed', '${escape(_("Auto Managed"))}') // DownloadsPage.js:91 @@ -140,7 +140,7 @@ // OtherPage.js:66 GetText.add('Be alerted about new releases', '${escape(_("Be alerted about new releases"))}') -// Menus.js:210 +// Menus.js:280 GetText.add('Bottom', '${escape(_("Bottom"))}') // MoveStorage.js:73, FileWindow.js:70, InstallPluginWindow.js:69 @@ -155,7 +155,7 @@ // CachePage.js:63 GetText.add('Cache Size (16 KiB Blocks)', '${escape(_("Cache Size (16 KiB Blocks)"))}') -// EditTrackersWindow.js:56, OtherLimitWindow.js:72, RemoveWindow.js:55, MoveStorage.js:55, EditTrackerWindow.js:56, AddTrackerWindow.js:56, AddWindow.js:51 +// EditTrackersWindow.js:56, OtherLimitWindow.js:72, RemoveWindow.js:55, MoveStorage.js:55, EditTrackerWindow.js:56, AddTrackerWindow.js:65, AddWindow.js:51 GetText.add('Cancel', '${escape(_("Cancel"))}') // PreferencesWindow.js:85 @@ -191,7 +191,7 @@ // ConnectionManager.js:79 GetText.add('Connected', '${escape(_("Connected"))}') -// Menus.js:142 +// Menus.js:163 GetText.add('Connection Limit', '${escape(_("Connection Limit"))}') // ConnectionManager.js:43, Toolbar.js:100 @@ -212,7 +212,7 @@ // Toolbar.js:52 GetText.add('Create', '${escape(_("Create"))}') -// Menus.js:104 +// Menus.js:89 GetText.add('D/L Speed Limit', '${escape(_("D/L Speed Limit"))}') // NetworkPage.js:225, ProxyPage.js:70 @@ -239,13 +239,13 @@ // ConnectionManager.js:188 GetText.add('Disconnect', '${escape(_("Disconnect"))}') -// Menus.js:257, Deluge.js:163 +// Menus.js:327, Deluge.js:163 GetText.add('Do Not Download', '${escape(_("Do Not Download"))}') // QueuePage.js:107 GetText.add('Do not count slow torrents', '${escape(_("Do not count slow torrents"))}') -// EditTrackersWindow.js:107, Menus.js:204, Toolbar.js:89 +// EditTrackersWindow.js:107, Menus.js:274, Toolbar.js:89 GetText.add('Down', '${escape(_("Down"))}') // TorrentGrid.js:211 @@ -281,7 +281,7 @@ // EditTrackerWindow.js:40 GetText.add('Edit Tracker', '${escape(_("Edit Tracker"))}') -// EditTrackersWindow.js:40, Menus.js:224, OptionsTab.js:332 +// EditTrackersWindow.js:40, Menus.js:294, OptionsTab.js:332 GetText.add('Edit Trackers', '${escape(_("Edit Trackers"))}') // EncryptionPage.js:99 @@ -299,7 +299,7 @@ // ConnectionManager.js:316, ConnectionManager.js:372, AddConnectionWindow.js:103, UrlWindow.js:116, FileWindow.js:103, AddWindow.js:211 GetText.add('Error', '${escape(_("Error"))}') -// Menus.js:253 +// Menus.js:323 GetText.add('Expand All', '${escape(_("Expand All"))}') // UrlWindow.js:117 @@ -332,7 +332,7 @@ // DownloadsPage.js:57 GetText.add('Folders', '${escape(_("Folders"))}') -// Menus.js:236 +// Menus.js:306 GetText.add('Force Recheck', '${escape(_("Force Recheck"))}') // EncryptionPage.js:63, EncryptionPage.js:80 @@ -374,10 +374,10 @@ // Toolbar.js:107 GetText.add('Help', '${escape(_("Help"))}') -// Menus.js:267, Deluge.js:165 +// Menus.js:337, Deluge.js:165 GetText.add('High Priority', '${escape(_("High Priority"))}') -// Menus.js:272, Deluge.js:166 +// Menus.js:342, Deluge.js:166 GetText.add('Highest Priority', '${escape(_("Highest Priority"))}') // FileBrowser.js:56 @@ -485,7 +485,7 @@ // OptionsTab.js:72 GetText.add('Move Completed Location', '${escape(_("Move Completed Location"))}') -// Menus.js:242, MoveStorage.js:38 +// Menus.js:312, MoveStorage.js:38 GetText.add('Move Storage', '${escape(_("Move Storage"))}') // DownloadsPage.js:75 @@ -512,7 +512,7 @@ // ProxyField.js:55 GetText.add('None', '${escape(_("None"))}') -// Menus.js:262, Deluge.js:164 +// Menus.js:332, Deluge.js:164 GetText.add('Normal Priority', '${escape(_("Normal Priority"))}') // Statusbar.js:39 @@ -521,6 +521,9 @@ // AddWindow.js:212 GetText.add('Not a valid torrent', '${escape(_("Not a valid torrent"))}') +// Menus.js:248 +GetText.add('Off', '${escape(_("Off"))}') + // ConnectionManager.js:76 GetText.add('Offline', '${escape(_("Offline"))}') @@ -530,10 +533,13 @@ // InterfacePage.js:97 GetText.add('Old Password', '${escape(_("Old Password"))}') +// Menus.js:243 +GetText.add('On', '${escape(_("On"))}') + // ConnectionManager.js:73 GetText.add('Online', '${escape(_("Online"))}') -// Menus.js:99, OptionsTab.js:49, OptionsTab.js:40, DownloadsPage.js:129 +// Menus.js:84, OptionsTab.js:49, OptionsTab.js:40, DownloadsPage.js:129 GetText.add('Options', '${escape(_("Options"))}') // Statusbar.js:90, Statusbar.js:138, Statusbar.js:186, OtherPage.js:42, DaemonPage.js:84 @@ -551,7 +557,7 @@ // DetailsTab.js:48 GetText.add('Path', '${escape(_("Path"))}') -// Menus.js:88, Toolbar.js:70 +// Menus.js:73, Toolbar.js:70 GetText.add('Pause', '${escape(_("Pause"))}') // ProxyPage.js:52 @@ -614,7 +620,7 @@ // ProxyPage.js:42 GetText.add('Proxy', '${escape(_("Proxy"))}') -// Menus.js:186, OptionsTab.js:196, QueuePage.js:41 +// Menus.js:256, OptionsTab.js:196, QueuePage.js:41 GetText.add('Queue', '${escape(_("Queue"))}') // QueuePage.js:62 @@ -629,7 +635,7 @@ // EditTrackersWindow.js:122, ConnectionManager.js:117, Toolbar.js:64, AddWindow.js:112 GetText.add('Remove', '${escape(_("Remove"))}') -// Menus.js:230, RemoveWindow.js:39, RemoveWindow.js:57 +// Menus.js:300, RemoveWindow.js:39, RemoveWindow.js:57 GetText.add('Remove Torrent', '${escape(_("Remove Torrent"))}') // RemoveWindow.js:56 @@ -641,7 +647,7 @@ // QueuePage.js:191 GetText.add('Remove torrent when share ratio is reached', '${escape(_("Remove torrent when share ratio is reached"))}') -// Menus.js:94, Toolbar.js:76 +// Menus.js:79, Toolbar.js:76 GetText.add('Resume', '${escape(_("Resume"))}') // EditTrackerWindow.js:57 @@ -734,7 +740,7 @@ // EditTrackersWindow.js:76 GetText.add('Tier', '${escape(_("Tier"))}') -// Menus.js:192 +// Menus.js:262 GetText.add('Top', '${escape(_("Top"))}') // QueuePage.js:76 @@ -755,13 +761,13 @@ // Sidebar.js:35 GetText.add('Tracker Host', '${escape(_("Tracker Host"))}') -// AddTrackerWindow.js:66 +// AddTrackerWindow.js:75 GetText.add('Trackers', '${escape(_("Trackers"))}') // ProxyField.js:48 GetText.add('Type', '${escape(_("Type"))}') -// Menus.js:123 +// Menus.js:126 GetText.add('U/L Speed Limit', '${escape(_("U/L Speed Limit"))}') // NetworkPage.js:199 @@ -770,10 +776,10 @@ // OptionsPanel.js:142 GetText.add('Unable to set file priority!', '${escape(_("Unable to set file priority!"))}') -// Statusbar.js:85, Statusbar.js:133, Statusbar.js:181, Menus.js:119, Menus.js:138, Menus.js:157, Menus.js:176 +// Statusbar.js:85, Statusbar.js:133, Statusbar.js:181, Menus.js:120, Menus.js:157, Menus.js:194, Menus.js:231 GetText.add('Unlimited', '${escape(_("Unlimited"))}') -// EditTrackersWindow.js:102, Menus.js:198, Toolbar.js:83, FileBrowser.js:53 +// EditTrackersWindow.js:102, Menus.js:268, Toolbar.js:83, FileBrowser.js:53 GetText.add('Up', '${escape(_("Up"))}') // TorrentGrid.js:218 @@ -782,13 +788,13 @@ // TorrentGrid.js:136 GetText.add('Up Speed', '${escape(_("Up Speed"))}') -// Menus.js:218 +// Menus.js:288 GetText.add('Update Tracker', '${escape(_("Update Tracker"))}') // OtherPage.js:56 GetText.add('Updates', '${escape(_("Updates"))}') -// Menus.js:161 +// Menus.js:200 GetText.add('Upload Slot Limit', '${escape(_("Upload Slot Limit"))}') // Statusbar.js:152 diff -Nru deluge-1.3.12/deluge/ui/web/js/deluge-all.js deluge-1.3.13/deluge/ui/web/js/deluge-all.js --- deluge-1.3.12/deluge/ui/web/js/deluge-all.js 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/js/deluge-all.js 2016-07-20 14:23:28.000000000 +0000 @@ -1,258 +1,1792 @@ -Ext.ns("Deluge.add");Deluge.add.Window=Ext.extend(Ext.Window,{initComponent:function(){Deluge.add.Window.superclass.initComponent.call(this);this.addEvents("beforeadd","add","addfailed")},createTorrentId:function(){return(new Date).getTime()}});Ext.namespace("Deluge.add"); -Deluge.add.AddWindow=Ext.extend(Deluge.add.Window,{title:_("Add Torrents"),layout:"border",width:470,height:450,bodyStyle:"padding: 10px 5px;",buttonAlign:"right",closeAction:"hide",closable:!0,plain:!0,iconCls:"x-deluge-add-window-icon",initComponent:function(){Deluge.add.AddWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Add"),this.onAddClick,this);this.list=new Ext.list.ListView({store:new Ext.data.SimpleStore({fields:[{name:"info_hash", -mapping:1},{name:"text",mapping:2}],id:0}),columns:[{id:"torrent",width:150,sortable:!0,renderer:function(a,b,c){return c.data.info_hash?String.format('
{0}
',a):String.format('
{0}
',a)},dataIndex:"text"}],stripeRows:!0,singleSelect:!0,listeners:{selectionchange:{fn:this.onSelect,scope:this}},hideHeaders:!0,autoExpandColumn:"torrent",height:"100%",autoScroll:!0});this.add({region:"center",items:[this.list], -margins:"5 5 5 5",bbar:new Ext.Toolbar({items:[{iconCls:"x-deluge-add-file",text:_("File"),handler:this.onFile,scope:this},{text:_("Url"),iconCls:"icon-add-url",handler:this.onUrl,scope:this},{text:_("Infohash"),iconCls:"icon-add-magnet",hidden:!0,disabled:!0},"->",{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemove,scope:this}]})});this.optionsPanel=this.add(new Deluge.add.OptionsPanel);this.on("hide",this.onHide,this);this.on("show",this.onShow,this)},clear:function(){this.list.getStore().removeAll(); -this.optionsPanel.clear()},onAddClick:function(){var a=[];this.list&&(this.list.getStore().each(function(b){b=b.get("info_hash");a.push({path:this.optionsPanel.getFilename(b),options:this.optionsPanel.getOptions(b)})},this),deluge.client.web.add_torrents(a,{success:function(a){}}),this.clear(),this.hide())},onCancelClick:function(){this.clear();this.hide()},onFile:function(){this.file||(this.file=new Deluge.add.FileWindow);this.file.show()},onHide:function(){this.optionsPanel.setActiveTab(0);this.optionsPanel.files.setDisabled(!0); -this.optionsPanel.form.setDisabled(!0)},onRemove:function(){if(this.list.getSelectionCount()){var a=this.list.getSelectedRecords()[0];this.list.getStore().remove(a);this.optionsPanel.clear();this.torrents&&this.torrents[a.id]&&delete this.torrents[a.id]}},onSelect:function(a,b){if(b.length){var c=this.list.getRecord(b[0]);this.optionsPanel.setTorrent(c.get("info_hash"))}else this.optionsPanel.files.setDisabled(!0),this.optionsPanel.form.setDisabled(!0)},onShow:function(){this.url||(this.url=new Deluge.add.UrlWindow, -this.url.on("beforeadd",this.onTorrentBeforeAdd,this),this.url.on("add",this.onTorrentAdd,this),this.url.on("addfailed",this.onTorrentAddFailed,this));this.file||(this.file=new Deluge.add.FileWindow,this.file.on("beforeadd",this.onTorrentBeforeAdd,this),this.file.on("add",this.onTorrentAdd,this),this.file.on("addfailed",this.onTorrentAddFailed,this));this.optionsPanel.form.getDefaults()},onTorrentBeforeAdd:function(a,b){this.list.getStore().loadData([[a,null,b]],!0)},onTorrentAdd:function(a,b){var c= -this.list.getStore().getById(a);b?(c.set("info_hash",b.info_hash),c.set("text",b.name),this.list.getStore().commitChanges(),this.optionsPanel.addTorrent(b),this.list.select(c)):(Ext.MessageBox.show({title:_("Error"),msg:_("Not a valid torrent"),buttons:Ext.MessageBox.OK,modal:!1,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"}),this.list.getStore().remove(c))},onTorrentAddFailed:function(a){var b=this.list.getStore();(a=b.getById(a))&&b.remove(a)},onUrl:function(a,b){this.url.show()}});Ext.ns("Deluge.add"); -Deluge.add.FileWindow=Ext.extend(Deluge.add.Window,{title:_("Add from File"),layout:"fit",width:350,height:115,modal:!0,plain:!0,buttonAlign:"center",closeAction:"hide",bodyStyle:"padding: 10px 5px;",iconCls:"x-deluge-add-file",initComponent:function(){Deluge.add.FileWindow.superclass.initComponent.call(this);this.addButton(_("Add"),this.onAddClick,this);this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:35,autoHeight:!0,fileUpload:!0,items:[{xtype:"fileuploadfield",id:"torrentFile",width:280, -height:24,emptyText:_("Select a torrent"),fieldLabel:_("File"),name:"file",buttonCfg:{text:_("Browse")+"..."}}]})},onAddClick:function(a,b){if(this.form.getForm().isValid()){this.torrentId=this.createTorrentId();this.form.getForm().submit({url:deluge.config.base+"upload",waitMsg:_("Uploading your torrent..."),failure:this.onUploadFailure,success:this.onUploadSuccess,scope:this});var c=this.form.getForm().findField("torrentFile").value,c=c.split("\\").slice(-1)[0];this.fireEvent("beforeadd",this.torrentId, -c)}},onGotInfo:function(a,b,c,d){a.filename=d.options.filename;this.fireEvent("add",this.torrentId,a)},onUploadFailure:function(a,b){this.hide();Ext.MessageBox.show({title:_("Error"),msg:_("Failed to upload torrent"),buttons:Ext.MessageBox.OK,modal:!1,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.fireEvent("addfailed",this.torrentId)},onUploadSuccess:function(a,b){this.hide();if(b.result.success){var c=b.result.files[0];this.form.getForm().findField("torrentFile").setValue("");deluge.client.web.get_torrent_info(c, -{success:this.onGotInfo,scope:this,filename:c})}}});Ext.ns("Deluge.add"); -Deluge.add.FilesTab=Ext.extend(Ext.ux.tree.TreeGrid,{layout:"fit",title:_("Files"),autoScroll:!1,animate:!1,border:!1,disabled:!0,rootVisible:!1,columns:[{header:_("Filename"),width:295,dataIndex:"filename"},{header:_("Size"),width:60,dataIndex:"size",tpl:new Ext.XTemplate("{size:this.fsize}",{fsize:function(a){return fsize(a)}})},{header:_("Download"),width:65,dataIndex:"download",tpl:new Ext.XTemplate("{download:this.format}",{format:function(a){return'
'}})}],initComponent:function(){Deluge.add.FilesTab.superclass.initComponent.call(this);this.on("click",this.onNodeClick,this)},clearFiles:function(){var a=this.getRootNode();a.hasChildNodes()&&a.cascade(function(a){a.parentNode&&a.getOwnerTree()&&a.remove()})},setDownload:function(a,b,c){a.attributes.download=b;a.ui.updateColumns();if(a.isLeaf()){if(!c)return this.fireEvent("fileschecked",[a],b,!b)}else{var d=[a];a.cascade(function(a){a.attributes.download=b;a.ui.updateColumns(); -d.push(a)},this);if(!c)return this.fireEvent("fileschecked",d,b,!b)}},onNodeClick:function(a,b){"chkbox"==(new Ext.Element(b.target)).getAttribute("rel")&&this.setDownload(a,!a.attributes.download)}});Ext.namespace("Ext.deluge.add");Ext.ns("Deluge.add"); -Deluge.add.OptionsPanel=Ext.extend(Ext.TabPanel,{torrents:{},region:"south",margins:"5 5 5 5",activeTab:0,height:265,initComponent:function(){Deluge.add.OptionsPanel.superclass.initComponent.call(this);this.files=this.add(new Deluge.add.FilesTab);this.form=this.add(new Deluge.add.OptionsTab);this.files.on("fileschecked",this.onFilesChecked,this)},addTorrent:function(a){this.torrents[a.info_hash]=a;var b={};this.walkFileTree(a.files_tree,function(a,c,g,e){"file"==c&&(b[g.index]=g.download)},this); -var c=[];Ext.each(Ext.keys(b),function(a){c[a]=b[a]});a=this.form.optionsManager.changeId(a.info_hash,!0);this.form.optionsManager.setDefault("file_priorities",c);this.form.optionsManager.changeId(a,!0)},clear:function(){this.files.clearFiles();this.form.optionsManager.resetAll()},getFilename:function(a){return this.torrents[a].filename},getOptions:function(a){a=this.form.optionsManager.changeId(a,!0);var b=this.form.optionsManager.get();this.form.optionsManager.changeId(a,!0);Ext.each(b.file_priorities, -function(a,d){b.file_priorities[d]=a?1:0});return b},setTorrent:function(a){if(a){this.torrentId=a;this.form.optionsManager.changeId(a);this.files.clearFiles();var b=this.files.getRootNode(),c=this.form.optionsManager.get("file_priorities");this.form.setDisabled(!1);this.torrents[a].files_tree?(this.walkFileTree(this.torrents[a].files_tree,function(a,b,g,e){a=new Ext.tree.TreeNode({download:g.index?c[g.index]:!0,filename:a,fileindex:g.index,leaf:"dir"!=b,size:g.length});e.appendChild(a);if("dir"== -b)return a},this,b),b.firstChild.expand(),this.files.setDisabled(!1),this.files.show()):(this.form.show(),this.files.setDisabled(!0))}},walkFileTree:function(a,b,c,d){for(var f in a.contents){var g=a.contents[f],e=g.type,h=c?b.apply(c,[f,e,g,d]):b(f,e,g,d);"dir"==e&&this.walkFileTree(g,b,c,h)}},onFilesChecked:function(a,b,c){this.form.optionsManager.get("compact_allocation")?Ext.Msg.show({title:_("Unable to set file priority!"),msg:_("File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?"), -buttons:Ext.Msg.YESNO,fn:function(d){"yes"==d?(this.form.optionsManager.update("compact_allocation",!1),Ext.each(a,function(a){if(!(0>a.attributes.fileindex)){var c=this.form.optionsManager.get("file_priorities");c[a.attributes.fileindex]=b;this.form.optionsManager.update("file_priorities",c)}},this)):this.files.setDownload(a[0],c,!0)},scope:this,icon:Ext.MessageBox.QUESTION}):Ext.each(a,function(a){if(!(0>a.attributes.fileindex)){var c=this.form.optionsManager.get("file_priorities");c[a.attributes.fileindex]= -b;this.form.optionsManager.update("file_priorities",c)}},this)}});Ext.ns("Deluge.add"); -Deluge.add.OptionsTab=Ext.extend(Ext.form.FormPanel,{title:_("Options"),height:170,border:!1,bodyStyle:"padding: 5px",disabled:!0,labelWidth:1,initComponent:function(){Deluge.add.OptionsTab.superclass.initComponent.call(this);this.optionsManager=new Deluge.MultiOptionsManager;var a=this.add({xtype:"fieldset",title:_("Download Location"),border:!1,autoHeight:!0,defaultType:"textfield",labelWidth:1,fieldLabel:"",style:"padding-bottom: 5px; margin-bottom: 0px;"});this.optionsManager.bind("download_location", -a.add({fieldLabel:"",name:"download_location",width:400,labelSeparator:""}));a=this.add({xtype:"fieldset",title:_("Move Completed Location"),border:!1,autoHeight:!0,defaultType:"togglefield",labelWidth:1,fieldLabel:"",style:"padding-bottom: 5px; margin-bottom: 0px;"});a=a.add({fieldLabel:"",name:"move_completed_path",width:425});this.optionsManager.bind("move_completed",a.toggle);this.optionsManager.bind("move_completed_path",a.input);var b=this.add({border:!1,layout:"column",defaultType:"fieldset"}), -a=b.add({title:_("Allocation"),border:!1,autoHeight:!0,defaultType:"radio"});this.optionsManager.bind("compact_allocation",a.add({xtype:"radiogroup",columns:1,vertical:!0,labelSeparator:"",width:80,items:[{name:"compact_allocation",value:!1,inputValue:!1,boxLabel:_("Full"),fieldLabel:"",labelSeparator:""},{name:"compact_allocation",value:!0,inputValue:!0,boxLabel:_("Compact"),fieldLabel:"",labelSeparator:""}]}));a=b.add({title:_("Bandwidth"),border:!1,autoHeight:!0,bodyStyle:"margin-left: 7px",labelWidth:105, -width:200,defaultType:"spinnerfield"});this.optionsManager.bind("max_download_speed",a.add({fieldLabel:_("Max Down Speed"),name:"max_download_speed",width:60}));this.optionsManager.bind("max_upload_speed",a.add({fieldLabel:_("Max Up Speed"),name:"max_upload_speed",width:60}));this.optionsManager.bind("max_connections",a.add({fieldLabel:_("Max Connections"),name:"max_connections",width:60}));this.optionsManager.bind("max_upload_slots",a.add({fieldLabel:_("Max Upload Slots"),name:"max_upload_slots", -width:60}));a=b.add({title:_("General"),border:!1,autoHeight:!0,defaultType:"checkbox"});this.optionsManager.bind("add_paused",a.add({name:"add_paused",boxLabel:_("Add In Paused State"),fieldLabel:"",labelSeparator:""}));this.optionsManager.bind("prioritize_first_last_pieces",a.add({name:"prioritize_first_last_pieces",boxLabel:_("Prioritize First/Last Pieces"),fieldLabel:"",labelSeparator:""}))},getDefaults:function(){deluge.client.core.get_config_values("add_paused compact_allocation download_location max_connections_per_torrent max_download_speed_per_torrent move_completed move_completed_path max_upload_slots_per_torrent max_upload_speed_per_torrent prioritize_first_last_pieces".split(" "), -{success:function(a){this.optionsManager.options={file_priorities:[],add_paused:a.add_paused,compact_allocation:a.compact_allocation,download_location:a.download_location,move_completed:a.move_completed,move_completed_path:a.move_completed_path,max_connections:a.max_connections_per_torrent,max_download_speed:a.max_download_speed_per_torrent,max_upload_slots:a.max_upload_slots_per_torrent,max_upload_speed:a.max_upload_speed_per_torrent,prioritize_first_last_pieces:a.prioritize_first_last_pieces};this.optionsManager.resetAll()}, -scope:this})}});Ext.namespace("Deluge.add"); -Deluge.add.UrlWindow=Ext.extend(Deluge.add.Window,{title:_("Add from Url"),modal:!0,plain:!0,layout:"fit",width:350,height:155,buttonAlign:"center",closeAction:"hide",bodyStyle:"padding: 10px 5px;",iconCls:"x-deluge-add-url-window-icon",initComponent:function(){Deluge.add.UrlWindow.superclass.initComponent.call(this);this.addButton(_("Add"),this.onAddClick,this);var a=this.add({xtype:"form",defaultType:"textfield",baseCls:"x-plain",labelWidth:55});this.urlField=a.add({fieldLabel:_("Url"),id:"url", -name:"url",width:"97%"});this.urlField.on("specialkey",this.onAdd,this);this.cookieField=a.add({fieldLabel:_("Cookies"),id:"cookies",name:"cookies",width:"97%"});this.cookieField.on("specialkey",this.onAdd,this)},onAddClick:function(a,b){if("url"!=a.id&&"cookies"!=a.id||b.getKey()==b.ENTER){a=this.urlField;var c=a.getValue(),d=this.cookieField.getValue(),f=this.createTorrentId();0==c.indexOf("magnet:?")&&-1
{priority:this.getName}
', -{getClass:function(a){return FILE_PRIORITY_CSS[a]},getName:function(a){return _(FILE_PRIORITY[a])}})}],selModel:new Ext.tree.MultiSelectionModel,initComponent:function(){Deluge.details.FilesTab.superclass.initComponent.call(this);this.setRootNode(new Ext.tree.TreeNode({text:"Files"}))},clear:function(){var a=this.getRootNode();a.hasChildNodes()&&a.cascade(function(a){var c=a.parentNode;c&&c.ownerTree&&c.removeChild(a)})},createFileTree:function(a){function b(a,c){for(var g in a.contents){var e=a.contents[g]; -"dir"==e.type?b(e,c.appendChild(new Ext.tree.TreeNode({text:g,filename:g,size:e.size,progress:e.progress,priority:e.priority}))):c.appendChild(new Ext.tree.TreeNode({text:g,filename:g,fileIndex:e.index,size:e.size,progress:e.progress,priority:e.priority,leaf:!0,iconCls:"x-deluge-file",uiProvider:Ext.ux.tree.TreeGridNodeUI}))}}var c=this.getRootNode();b(a,c);c.firstChild.expand()},update:function(a){this.torrentId!=a&&(this.clear(),this.torrentId=a);deluge.client.web.get_torrent_files(a,{success:this.onRequestComplete, -scope:this,torrentId:a})},updateFileTree:function(a){function b(a,d){for(var f in a.contents){var g=a.contents[f],e=d.findChild("filename",f);e.attributes.size=g.size;e.attributes.progress=g.progress;e.attributes.priority=g.priority;e.ui.updateColumns();"dir"==g.type&&b(g,e)}}b(a,this.getRootNode())},onRender:function(a,b){Deluge.details.FilesTab.superclass.onRender.call(this,a,b);deluge.menus.filePriorities.on("itemclick",this.onItemClick,this);this.on("contextmenu",this.onContextMenu,this);this.sorter= -new Ext.tree.TreeSorter(this,{folderSort:!0})},onContextMenu:function(a,b){b.stopEvent();var c=this.getSelectionModel();2>c.getSelectedNodes().length&&(c.clearSelections(),a.select());deluge.menus.filePriorities.showAt(b.getPoint())},onItemClick:function(a,b){switch(a.id){case "expandAll":this.expandAll();break;default:var c={};this.getRootNode().cascade(function(a){Ext.isEmpty(a.attributes.fileIndex)||(c[a.attributes.fileIndex]=a.attributes.priority)});var d=this.getSelectionModel().getSelectedNodes(); -Ext.each(d,function(b){b.isLeaf()?Ext.isEmpty(b.attributes.fileIndex)||(c[b.attributes.fileIndex]=a.filePriority):b.cascade(function(b){Ext.isEmpty(b.attributes.fileIndex)||(c[b.attributes.fileIndex]=a.filePriority)})});var f=Array(Ext.keys(c).length),g;for(g in c)f[g]=c[g];deluge.client.core.set_torrent_file_priorities(this.torrentId,f,{success:function(){Ext.each(d,function(b){b.setColumnValue(3,a.filePriority)})},scope:this})}},onRequestComplete:function(a,b){this.getRootNode().hasChildNodes()? -this.updateFileTree(a):this.createFileTree(a)}}); -Deluge.details.OptionsTab=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({autoScroll:!0,bodyStyle:"padding: 5px;",border:!1,cls:"x-deluge-options",defaults:{autoHeight:!0,labelWidth:1,defaultType:"checkbox"},deferredRender:!1,layout:"column",title:_("Options")},a);Deluge.details.OptionsTab.superclass.constructor.call(this,a)},initComponent:function(){Deluge.details.OptionsTab.superclass.initComponent.call(this);this.fieldsets={};this.fields={};this.optionsManager=new Deluge.MultiOptionsManager({options:{max_download_speed:-1, -max_upload_speed:-1,max_connections:-1,max_upload_slots:-1,auto_managed:!1,stop_at_ratio:!1,stop_ratio:2,remove_at_ratio:!1,move_completed:!1,move_completed_path:"","private":!1,prioritize_first_last:!1}});this.fieldsets.bandwidth=this.add({xtype:"fieldset",defaultType:"spinnerfield",bodyStyle:"padding: 5px",layout:"table",layoutConfig:{columns:3},labelWidth:150,style:"margin-left: 10px; margin-right: 5px; padding: 5px",title:_("Bandwidth"),width:250});this.fieldsets.bandwidth.add({xtype:"label", -text:_("Max Download Speed"),forId:"max_download_speed",cls:"x-deluge-options-label"});this.fields.max_download_speed=this.fieldsets.bandwidth.add({id:"max_download_speed",name:"max_download_speed",width:70,strategy:{xtype:"number",decimalPrecision:1,minValue:-1,maxValue:99999}});this.fieldsets.bandwidth.add({xtype:"label",text:_("KiB/s"),style:"margin-left: 10px"});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Upload Speed"),forId:"max_upload_speed",cls:"x-deluge-options-label"});this.fields.max_upload_speed= -this.fieldsets.bandwidth.add({id:"max_upload_speed",name:"max_upload_speed",width:70,value:-1,strategy:{xtype:"number",decimalPrecision:1,minValue:-1,maxValue:99999}});this.fieldsets.bandwidth.add({xtype:"label",text:_("KiB/s"),style:"margin-left: 10px"});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Connections"),forId:"max_connections",cls:"x-deluge-options-label"});this.fields.max_connections=this.fieldsets.bandwidth.add({id:"max_connections",name:"max_connections",width:70,value:-1, -strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999},colspan:2});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Upload Slots"),forId:"max_upload_slots",cls:"x-deluge-options-label"});this.fields.max_upload_slots=this.fieldsets.bandwidth.add({id:"max_upload_slots",name:"max_upload_slots",width:70,value:-1,strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999},colspan:2});this.fieldsets.queue=this.add({xtype:"fieldset",title:_("Queue"),style:"margin-left: 5px; margin-right: 5px; padding: 5px", -width:210,layout:"table",layoutConfig:{columns:2},labelWidth:0,defaults:{fieldLabel:"",labelSeparator:""}});this.fields.auto_managed=this.fieldsets.queue.add({xtype:"checkbox",fieldLabel:"",labelSeparator:"",name:"is_auto_managed",boxLabel:_("Auto Managed"),width:200,colspan:2});this.fields.stop_at_ratio=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"stop_at_ratio",width:120,boxLabel:_("Stop seed at ratio"),handler:this.onStopRatioChecked,scope:this});this.fields.stop_ratio=this.fieldsets.queue.add({xtype:"spinnerfield", -id:"stop_ratio",name:"stop_ratio",disabled:!0,width:50,value:2,strategy:{xtype:"number",minValue:-1,maxValue:99999,incrementValue:.1,alternateIncrementValue:1,decimalPrecision:1}});this.fields.remove_at_ratio=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"remove_at_ratio",ctCls:"x-deluge-indent-checkbox",bodyStyle:"padding-left: 10px",boxLabel:_("Remove at ratio"),disabled:!0,colspan:2});this.fields.move_completed=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"move_completed", -boxLabel:_("Move Completed"),colspan:2,handler:this.onMoveCompletedChecked,scope:this});this.fields.move_completed_path=this.fieldsets.queue.add({xtype:"textfield",fieldLabel:"",id:"move_completed_path",colspan:3,bodyStyle:"margin-left: 20px",width:180,disabled:!0});this.rightColumn=this.add({border:!1,autoHeight:!0,style:"margin-left: 5px",width:210});this.fieldsets.general=this.rightColumn.add({xtype:"fieldset",autoHeight:!0,defaultType:"checkbox",title:_("General"),layout:"form"});this.fields["private"]= -this.fieldsets.general.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Private"),id:"private",disabled:!0});this.fields.prioritize_first_last=this.fieldsets.general.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Prioritize First/Last"),id:"prioritize_first_last"});for(var a in this.fields)this.optionsManager.bind(a,this.fields[a]);this.buttonPanel=this.rightColumn.add({layout:"hbox",xtype:"panel",border:!1});this.buttonPanel.add({id:"edit_trackers",xtype:"button",text:_("Edit Trackers"),cls:"x-btn-text-icon", -iconCls:"x-deluge-edit-trackers",border:!1,width:100,handler:this.onEditTrackers,scope:this});this.buttonPanel.add({id:"apply",xtype:"button",text:_("Apply"),style:"margin-left: 10px;",border:!1,width:100,handler:this.onApply,scope:this})},onRender:function(a,b){Deluge.details.OptionsTab.superclass.onRender.call(this,a,b);this.layout=new Ext.layout.ColumnLayout;this.layout.setContainer(this);this.doLayout()},clear:function(){null!=this.torrentId&&(this.torrentId=null,this.optionsManager.changeId(null))}, -reset:function(){this.torrentId&&this.optionsManager.reset()},update:function(a){this.torrentId&&!a&&this.clear();a&&(this.torrentId!=a&&(this.torrentId=a,this.optionsManager.changeId(a)),deluge.client.web.get_torrent_status(a,Deluge.Keys.Options,{success:this.onRequestComplete,scope:this}))},onApply:function(){var a=this.optionsManager.getDirty();if(!Ext.isEmpty(a.prioritize_first_last)){var b=a.prioritize_first_last;deluge.client.core.set_torrent_prioritize_first_last(this.torrentId,b,{success:function(){this.optionsManager.set("prioritize_first_last", -b)},scope:this})}deluge.client.core.set_torrent_options([this.torrentId],a,{success:function(){this.optionsManager.commit()},scope:this})},onEditTrackers:function(){deluge.editTrackers.show()},onMoveCompletedChecked:function(a,b){this.fields.move_completed_path.setDisabled(!b);b&&this.fields.move_completed_path.focus()},onStopRatioChecked:function(a,b){this.fields.remove_at_ratio.setDisabled(!b);this.fields.stop_ratio.setDisabled(!b)},onRequestComplete:function(a,b){this.fields["private"].setValue(a["private"]); -this.fields["private"].setDisabled(!0);delete a["private"];a.auto_managed=a.is_auto_managed;this.optionsManager.setDefault(a);var c=this.optionsManager.get("stop_at_ratio");this.fields.remove_at_ratio.setDisabled(!c);this.fields.stop_ratio.setDisabled(!c);this.fields.move_completed_path.setDisabled(!this.optionsManager.get("move_completed"))}}); -(function(){function a(a){return a.replace(" ","").replace(" ","")?String.format('',deluge.config.base,a):""}function b(a,b,c){b=1024==c.data.seed?"x-deluge-seed":"x-deluge-peer";c=a.split(":");2{1}',b,a)}function c(a){a=(100*a).toFixed(0);return Deluge.progressBar(a,this.width-8,a+"%")}Deluge.details.PeersTab=Ext.extend(Ext.grid.GridPanel,{peers:{},constructor:function(d){d=Ext.apply({title:_("Peers"), -cls:"x-deluge-peers",store:new Ext.data.Store({reader:new Ext.data.JsonReader({idProperty:"ip",root:"peers"},Deluge.data.Peer)}),columns:[{header:" ",width:30,sortable:!0,renderer:a,dataIndex:"country"},{header:"Address",width:125,sortable:!0,renderer:b,dataIndex:"ip"},{header:"Client",width:125,sortable:!0,renderer:fplain,dataIndex:"client"},{header:"Progress",width:150,sortable:!0,renderer:c,dataIndex:"progress"},{header:"Down Speed",width:100,sortable:!0,renderer:fspeed,dataIndex:"down_speed"}, -{header:"Up Speed",width:100,sortable:!0,renderer:fspeed,dataIndex:"up_speed"}],stripeRows:!0,deferredRender:!1,autoScroll:!0},d);Deluge.details.PeersTab.superclass.constructor.call(this,d)},clear:function(){this.getStore().removeAll();this.peers={}},update:function(a){deluge.client.web.get_torrent_status(a,Deluge.Keys.Peers,{success:this.onRequestComplete,scope:this})},onRequestComplete:function(a,b){if(a){var c=this.getStore(),e=[],h={};Ext.each(a.peers,function(a){if(this.peers[a.ip]){var b=c.getById(a.ip); -b.beginEdit();for(var d in a)b.get(d)!=a[d]&&b.set(d,a[d]);b.endEdit()}else this.peers[a.ip]=1,e.push(new Deluge.data.Peer(a,a.ip));h[a.ip]=1},this);c.add(e);c.each(function(a){h[a.id]||(c.remove(a),delete this.peers[a.id])},this);c.commitChanges();var k=c.getSortState();k&&c.sort(k.field,k.direction)}}})})();Ext.ns("Deluge.details"); -Deluge.details.StatusTab=Ext.extend(Ext.Panel,{title:_("Status"),autoScroll:!0,onRender:function(a,b){Deluge.details.StatusTab.superclass.onRender.call(this,a,b);this.progressBar=this.add({xtype:"progress",cls:"x-deluge-status-progressbar"});this.status=this.add({cls:"x-deluge-status",id:"deluge-details-status",border:!1,width:1E3,listeners:{render:{fn:function(a){a.load({url:deluge.config.base+"render/tab_status.html",text:_("Loading")+"..."});a.getUpdater().on("update",this.onPanelUpdate,this)}, -scope:this}}})},clear:function(){this.progressBar.updateProgress(0," ");for(var a in this.fields)this.fields[a].innerHTML=""},update:function(a){this.fields||this.getFields();deluge.client.web.get_torrent_status(a,Deluge.Keys.Status,{success:this.onRequestComplete,scope:this})},onPanelUpdate:function(a,b){this.fields={};Ext.each(Ext.query("dd",this.status.body.dom),function(a){this.fields[a.className]=a},this)},onRequestComplete:function(a){seeders=-1
Author:
{author}
Version:
{version}
Author Email:
{email}
Homepage:
{homepage}
Details:
{details}
'),initComponent:function(){Deluge.preferences.Plugins.superclass.initComponent.call(this);this.defaultValues={version:"",email:"",homepage:"", -details:""};this.pluginTemplate.compile();this.list=this.add({xtype:"listview",store:new Ext.data.ArrayStore({fields:[{name:"enabled",mapping:0},{name:"plugin",mapping:1}]}),columns:[{id:"enabled",header:_("Enabled"),width:.2,sortable:!0,tpl:new Ext.XTemplate("{enabled:this.getCheckbox}",{getCheckbox:function(a){return'
'}}),dataIndex:"enabled"},{id:"plugin",header:_("Plugin"),width:.8,sortable:!0,dataIndex:"plugin"}],singleSelect:!0, -autoExpandColumn:"plugin",listeners:{selectionchange:{fn:this.onPluginSelect,scope:this}}});this.panel=this.add({region:"center",autoScroll:!0,margins:"5 5 5 5",items:[this.list],bbar:new Ext.Toolbar({items:[{cls:"x-btn-text-icon",iconCls:"x-deluge-install-plugin",text:_("Install"),handler:this.onInstallPluginWindow,scope:this},"->",{cls:"x-btn-text-icon",text:_("Find More"),iconCls:"x-deluge-find-more",handler:this.onFindMorePlugins,scope:this}]})});this.pluginInfo=(this.pluginInfo=this.add({xtype:"panel", -border:!0,height:160,region:"south",margins:"0 5 5 5"})).add({xtype:"fieldset",title:_("Info"),border:!1,autoHeight:!0,labelWidth:1,style:"margin-top: 5px;"}).add({xtype:"panel",border:!1,bodyCfg:{style:"margin-left: 10px"}});this.pluginInfo.on("render",this.onPluginInfoRender,this);this.list.on("click",this.onNodeClick,this);deluge.preferences.on("show",this.onPreferencesShow,this);deluge.events.on("PluginDisabledEvent",this.onPluginDisabled,this);deluge.events.on("PluginEnabledEvent",this.onPluginEnabled, -this)},disablePlugin:function(a){deluge.client.core.disable_plugin(a)},enablePlugin:function(a){deluge.client.core.enable_plugin(a)},setInfo:function(a){this.pluginInfo.rendered&&(this.pluginInfo.body.dom.innerHTML=this.pluginTemplate.apply(a||this.defaultValues))},updatePlugins:function(){deluge.client.web.get_plugins({success:this.onGotPlugins,scope:this})},updatePluginsGrid:function(){var a=[];Ext.each(this.availablePlugins,function(b){-1this.pages[a].index&&(this.pages[a].index=this.configPanel.items.indexOf(this.pages[a]));this.list.select(this.pages[a].index)},doSelectPage:function(a){0> -this.pages[a].index&&(this.pages[a].index=this.configPanel.items.indexOf(this.pages[a]));this.configPanel.getLayout().setActiveItem(this.pages[a].index);this.currentPage=a},onGotConfig:function(a){this.getOptionsManager().set(a)},onPageSelect:function(a,b){var c=a.getRecord(b[0]);this.doSelectPage(c.get("name"))},onSetConfig:function(){this.getOptionsManager().commit()},onAfterRender:function(){this.list.getSelectionCount()||this.list.select(0);this.configPanel.getLayout().setActiveItem(0)},onShow:function(){deluge.client.core&& -deluge.client.core.get_config({success:this.onGotConfig,scope:this})},onClose:function(){this.hide()},onOk:function(){var a=this.optionsManager.getDirty();Ext.isObjectEmpty(a)||deluge.client.core.set_config(a,{success:this.onSetConfig,scope:this});for(var b in this.pages)if(this.pages[b].onOk)this.pages[b].onOk();this.hide()}});Ext.ns("Deluge.preferences"); -Deluge.preferences.ProxyField=Ext.extend(Ext.form.FieldSet,{border:!1,autoHeight:!0,labelWidth:70,initComponent:function(){Deluge.preferences.ProxyField.superclass.initComponent.call(this);this.proxyType=this.add({xtype:"combo",fieldLabel:_("Type"),name:"proxytype",mode:"local",width:150,store:new Ext.data.ArrayStore({fields:["id","text"],data:[[0,_("None")],[1,_("Socksv4")],[2,_("Socksv5")],[3,_("Socksv5 with Auth")],[4,_("HTTP")],[5,_("HTTP with Auth")]]}),editable:!1,triggerAction:"all",valueField:"id", -displayField:"text"});this.proxyType.on("change",this.onFieldChange,this);this.proxyType.on("select",this.onTypeSelect,this);this.hostname=this.add({xtype:"textfield",name:"hostname",fieldLabel:_("Host"),width:220});this.hostname.on("change",this.onFieldChange,this);this.port=this.add({xtype:"spinnerfield",name:"port",fieldLabel:_("Port"),width:80,decimalPrecision:0,minValue:-1,maxValue:99999});this.port.on("change",this.onFieldChange,this);this.username=this.add({xtype:"textfield",name:"username", -fieldLabel:_("Username"),width:220});this.username.on("change",this.onFieldChange,this);this.password=this.add({xtype:"textfield",name:"password",fieldLabel:_("Password"),inputType:"password",width:220});this.password.on("change",this.onFieldChange,this);this.setting=!1},getName:function(){return this.initialConfig.name},getValue:function(){return{type:this.proxyType.getValue(),hostname:this.hostname.getValue(),port:Number(this.port.getValue()),username:this.username.getValue(),password:this.password.getValue()}}, -setValue:function(a){this.setting=!0;this.proxyType.setValue(a.type);var b=this.proxyType.getStore().find("id",a.type),c=this.proxyType.getStore().getAt(b);this.hostname.setValue(a.hostname);this.port.setValue(a.port);this.username.setValue(a.username);this.password.setValue(a.password);this.onTypeSelect(this.type,c,b);this.setting=!1},onFieldChange:function(a,b,c){if(!this.setting){b=this.getValue();var d=Ext.apply({},b);d[a.getName()]=c;this.fireEvent("change",this,b,d)}},onTypeSelect:function(a, -b,c){a=b.get("id");0",_("Online"),"","",_("Offline"),"","",_("Connected"),""),dataIndex:"status"}, -{id:"host",header:_("Host"),width:.51,sortable:!0,tpl:"{host}:{port}",dataIndex:"host"},{header:_("Version"),width:.25,sortable:!0,tpl:'{version}',dataIndex:"version"}],singleSelect:!0,listeners:{selectionchange:{fn:this.onSelectionChanged,scope:this}}});this.panel=this.add({autoScroll:!0,items:[this.list],bbar:new Ext.Toolbar({buttons:[{id:"cm-add",cls:"x-btn-text-icon",text:_("Add"),iconCls:"icon-add",handler:this.onAddClick,scope:this},{id:"cm-remove",cls:"x-btn-text-icon", -text:_("Remove"),iconCls:"icon-remove",handler:this.onRemoveClick,disabled:!0,scope:this},"->",{id:"cm-stop",cls:"x-btn-text-icon",text:_("Stop Daemon"),iconCls:"icon-error",handler:this.onStopClick,disabled:!0,scope:this}]})});this.update=this.update.createDelegate(this)},checkConnected:function(){deluge.client.web.connected({success:function(a){a?deluge.events.fire("connect"):this.show()},scope:this})},disconnect:function(a){deluge.events.fire("disconnect");a&&!this.isVisible()&&this.show()},loadHosts:function(){deluge.client.web.get_hosts({success:this.onGetHosts, -scope:this})},update:function(){this.list.getStore().each(function(a){deluge.client.web.get_host_status(a.id,{success:this.onGetHostStatus,scope:this})},this)},updateButtons:function(a){var b=this.buttons[1],c=a.get("status");"Connected"==c?(b.enable(),b.setText(_("Disconnect"))):"Offline"==c?b.disable():(b.enable(),b.setText(_("Connect")));"Offline"==c?"127.0.0.1"==a.get("host")||"localhost"==a.get("host")?(this.stopHostButton.enable(),this.stopHostButton.setText(_("Start Daemon"))):this.stopHostButton.disable(): -(this.stopHostButton.enable(),this.stopHostButton.setText(_("Stop Daemon")))},onAddClick:function(a,b){this.addWindow||(this.addWindow=new Deluge.AddConnectionWindow,this.addWindow.on("hostadded",this.onHostAdded,this));this.addWindow.show()},onHostAdded:function(){this.loadHosts()},onClose:function(a){this.hide()},onConnect:function(a){if(a=this.list.getSelectedRecords()[0])"Connected"==a.get("status")?deluge.client.web.disconnect({success:function(a){this.update(this);deluge.events.fire("disconnect")}, -scope:this}):(deluge.client.web.connect(a.id,{success:function(a){deluge.client.reloadMethods();deluge.client.on("connected",function(a){deluge.events.fire("connect")},this,{single:!0})}}),this.hide())},onGetHosts:function(a){this.list.getStore().loadData(a);Ext.each(a,function(a){deluge.client.web.get_host_status(a[0],{success:this.onGetHostStatus,scope:this})},this)},onGetHostStatus:function(a){var b=this.list.getStore().getById(a[0]);b.set("status",a[3]);b.set("version",a[4]);b.commit();this.list.getSelectedRecords()[0]== -b&&this.updateButtons(b)},onHide:function(){this.running&&window.clearInterval(this.running)},onLogin:function(){deluge.config.first_login?Ext.MessageBox.confirm(_("Change Default Password"),_("We recommend changing the default password.

Would you like to change it now?"),function(a){this.checkConnected();"yes"==a&&(deluge.preferences.show(),deluge.preferences.selectPage("Interface"));deluge.client.web.set_config({first_login:!1})},this):this.checkConnected()},onLogout:function(){this.disconnect(); -!this.hidden&&this.rendered&&this.hide()},onRemoveClick:function(a){var b=this.list.getSelectedRecords()[0];b&&deluge.client.web.remove_host(b.id,{success:function(a){a?this.list.getStore().remove(b):Ext.MessageBox.show({title:_("Error"),msg:a[1],buttons:Ext.MessageBox.OK,modal:!1,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"})},scope:this})},onSelectionChanged:function(a,b){b[0]?(this.removeHostButton.enable(),this.stopHostButton.enable(),this.stopHostButton.setText(_("Stop Daemon")),this.updateButtons(this.list.getRecord(b[0]))): -(this.removeHostButton.disable(),this.stopHostButton.disable())},onShow:function(){if(!this.addHostButton){var a=this.panel.getBottomToolbar();this.addHostButton=a.items.get("cm-add");this.removeHostButton=a.items.get("cm-remove");this.stopHostButton=a.items.get("cm-stop")}this.loadHosts();this.running||(this.running=window.setInterval(this.update,2E3,this))},onStopClick:function(a,b){var c=this.list.getSelectedRecords()[0];c&&("Offline"==c.get("status")?deluge.client.web.start_daemon(c.get("port")): -deluge.client.web.stop_daemon(c.id,{success:function(a){a[0]||Ext.MessageBox.show({title:_("Error"),msg:a[1],buttons:Ext.MessageBox.OK,modal:!1,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"})}}))}});Ext.state.Manager.setProvider(new Ext.state.CookieProvider({expires:new Date((new Date).getTime()+31536E7)})); -Ext.apply(Ext,{escapeHTML:function(a){a=String(a).replace("<","<").replace(">",">");return a.replace("&","&")},isObjectEmpty:function(a){for(var b in a)return!1;return!0},areObjectsEqual:function(a,b){var c=!0;if(!a||!b)return!1;for(var d in a)a[d]!=b[d]&&(c=!1);return c},keys:function(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b},values:function(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},splat:function(a){var b=Ext.type(a);return b?"array"!= -b?[a]:a:[]}});Ext.getKeys=Ext.keys;Ext.BLANK_IMAGE_URL=deluge.config.base+"images/s.gif";Ext.USE_NATIVE_JSON=!0; -Ext.apply(Deluge,{pluginStore:{},progressTpl:'
{0}
{0}
',progressBar:function(a,b,c,d){d=Ext.value(d,10);a=(b/100*a).toFixed(0);return String.format(Deluge.progressTpl, -c,b,a-1,0",{text:_("Add"),iconCls:"icon-add",handler:this.onAddClick,scope:this},{text:_("Edit"),iconCls:"icon-edit-trackers",handler:this.onEditClick,scope:this},{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemoveClick,scope:this}]})})},onAddClick:function(){this.addWindow.show()}, -onAddTrackers:function(a){var b=this.list.getStore();Ext.each(a,function(a){var d=!1,f=-1;b.each(function(b){b.get("tier")>f&&(f=b.get("tier"));if(a==b.get("tracker"))return d=!0,!1},this);d||b.add(new b.recordType({tier:f+1,url:a}))},this)},onCancelClick:function(){this.hide()},onEditClick:function(){this.editWindow.show(this.list.getSelectedRecords()[0])},onHide:function(){this.list.getStore().removeAll()},onListNodeDblClicked:function(a,b,c,d){this.editWindow.show(this.list.getRecord(c))},onOkClick:function(){var a= -[];this.list.getStore().each(function(b){a.push({tier:b.get("tier"),url:b.get("url")})},this);deluge.client.core.set_torrent_trackers(this.torrentId,a,{failure:this.onSaveFail,scope:this});this.hide()},onRemoveClick:function(){this.list.getStore().remove(this.list.getSelectedRecords()[0])},onRequestComplete:function(a){this.list.getStore().loadData(a);this.list.getStore().sort("tier","ASC")},onSaveFail:function(){},onSelect:function(a){a.getSelectionCount()&&this.panel.getBottomToolbar().items.get(4).enable()}, -onShow:function(){this.panel.getBottomToolbar().items.get(4).disable();var a=deluge.torrents.getSelected();this.torrentId=a.id;deluge.client.core.get_torrent_status(a.id,["trackers"],{success:this.onRequestComplete,scope:this})},onDownClick:function(){var a=this.list.getSelectedRecords()[0];a&&(a.set("tier",a.get("tier")+1),a.store.sort("tier","ASC"),a.store.commitChanges(),this.list.select(a.store.indexOf(a)))},onUpClick:function(){var a=this.list.getSelectedRecords()[0];a&&0!=a.get("tier")&&(a.set("tier", -a.get("tier")-1),a.store.sort("tier","ASC"),a.store.commitChanges(),this.list.select(a.store.indexOf(a)))}}); -Deluge.EventsManager=Ext.extend(Ext.util.Observable,{constructor:function(){this.toRegister=[];this.on("login",this.onLogin,this);Deluge.EventsManager.superclass.constructor.call(this)},addListener:function(a,b,c,d){this.addEvents(a);/[A-Z]/.test(a.substring(0,1))&&(deluge.client?deluge.client.web.register_event_listener(a):this.toRegister.push(a));Deluge.EventsManager.superclass.addListener.call(this,a,b,c,d)},getEvents:function(){deluge.client.web.get_events({success:this.onGetEventsSuccess,failure:this.onGetEventsFailure, -scope:this})},start:function(){Ext.each(this.toRegister,function(a){deluge.client.web.register_event_listener(a)});this.running=!0;this.errorCount=0;this.getEvents()},stop:function(){this.running=!1},onLogin:function(){this.start()},onGetEventsSuccess:function(a){this.running&&(a&&Ext.each(a,function(a){var c=a[1];c.splice(0,0,a[0]);this.fireEvent.apply(this,c)},this),this.getEvents())},onGetEventsFailure:function(a,b){this.running&&(!b.isTimeout&&3<=this.errorCount++?this.stop():this.getEvents())}}); -Deluge.EventsManager.prototype.on=Deluge.EventsManager.prototype.addListener;Deluge.EventsManager.prototype.fire=Deluge.EventsManager.prototype.fireEvent;deluge.events=new Deluge.EventsManager;Ext.namespace("Deluge"); -Deluge.FileBrowser=Ext.extend(Ext.Window,{title:_("File Browser"),width:500,height:400,initComponent:function(){Deluge.FileBrowser.superclass.initComponent.call(this);this.add({xtype:"toolbar",items:[{text:_("Back"),iconCls:"icon-back"},{text:_("Forward"),iconCls:"icon-forward"},{text:_("Up"),iconCls:"icon-up"},{text:_("Home"),iconCls:"icon-home"}]})}});Ext.ns("Deluge"); -Deluge.FilterPanel=Ext.extend(Ext.Panel,{autoScroll:!0,border:!1,show_zero:null,initComponent:function(){Deluge.FilterPanel.superclass.initComponent.call(this);this.filterType=this.initialConfig.filter;var a=this.filterType.replace("_"," "),b=a.split(" "),a="";Ext.each(b,function(b){fl=b.substring(0,1).toUpperCase();a+=fl+b.substring(1)+" "});this.setTitle(_(a));b=Deluge.FilterPanel.templates[this.filterType]?Deluge.FilterPanel.templates[this.filterType]:'
{filter} ({count})
'; -this.list=this.add({xtype:"listview",singleSelect:!0,hideHeaders:!0,reserveScrollOffset:!0,store:new Ext.data.ArrayStore({idIndex:0,fields:["filter","count"]}),columns:[{id:"filter",sortable:!1,tpl:b,dataIndex:"filter"}]});this.relayEvents(this.list,["selectionchange"])},getState:function(){if(this.list.getSelectionCount()){var a=this.list.getSelectedRecords()[0];if("All"!=a.id)return a.id}},getStates:function(){return this.states},getStore:function(){return this.list.getStore()},updateStates:function(a){this.states= -{};Ext.each(a,function(a){this.states[a[0]]=a[1]},this);if(null==this.show_zero?!deluge.config.sidebar_show_zero:!this.show_zero){var b=[];Ext.each(a,function(a){(0{filter} ({count})'}; -Deluge.Formatters={date:function(a){function b(a,b){for(var f=a+"";f.lengtha)return a.toFixed(1)+" KiB";a/=1024;return 1024>a?a.toFixed(1)+" MiB":(a/1024).toFixed(1)+" GiB"},sizeShort:function(a,b){if(!a&&!b)return"";a/=1024;if(1024>a)return a.toFixed(1)+ -" K";a/=1024;return 1024>a?a.toFixed(1)+" M":(a/1024).toFixed(1)+" G"},speed:function(a,b){return a||b?fsize(a,b)+"/s":""},timeRemaining:function(a){if(0==a)return"∞";a=a.toFixed(0);if(60>a)return a+"s";a/=60;if(60>a){var b=Math.floor(a);a=Math.round(60*(a-b));return 0a){var c=Math.floor(a),b=Math.round(60*(a-c));return 0",{id:"help",iconCls:"icon-help",text:_("Help"),handler:this.onHelpClick,scope:this},{id:"logout",iconCls:"icon-logout",disabled:!0,text:_("Logout"),handler:this.onLogout,scope:this}]},a);Deluge.Toolbar.superclass.constructor.call(this,a)},connectedButtons:"add remove pause resume up down".split(" "),initComponent:function(){Deluge.Toolbar.superclass.initComponent.call(this); -deluge.events.on("connect",this.onConnect,this);deluge.events.on("login",this.onLogin,this)},onConnect:function(){Ext.each(this.connectedButtons,function(a){this.items.get(a).enable()},this)},onDisconnect:function(){Ext.each(this.connectedButtons,function(a){this.items.get(a).disable()},this)},onLogin:function(){this.items.get("logout").enable()},onLogout:function(){this.items.get("logout").disable();deluge.login.logout()},onConnectionManagerClick:function(){deluge.connectionManager.show()},onHelpClick:function(){window.open("http://dev.deluge-torrent.org/wiki/UserGuide")}, -onPreferencesClick:function(){deluge.preferences.show()},onTorrentAction:function(a){var b=deluge.torrents.getSelections(),c=[];Ext.each(b,function(a){c.push(a.id)});switch(a.id){case "remove":deluge.removeWindow.show(c);break;case "pause":case "resume":deluge.client.core[a.id+"_torrent"](c,{success:function(){deluge.ui.update()}});break;case "up":case "down":deluge.client.core["queue_"+a.id](c,{success:function(){deluge.ui.update()}})}},onTorrentAdd:function(){deluge.add.show()}}); -(function(){function a(a){if(a)return fspeed(a)}function b(a){return-1==a?"":fspeed(1024*a)}function c(a,b,c){return 0>a?"∞":parseFloat((new Number(a)).toFixed(3))}Deluge.TorrentGrid=Ext.extend(Ext.grid.GridPanel,{torrents:{},columns:[{id:"queue",header:_("#"),width:30,sortable:!0,renderer:function(a){return-1==a?"":a+1},dataIndex:"queue"},{id:"name",header:_("Name"),width:150,sortable:!0,renderer:function(a,b,c){return String.format('
{1}
',c.data.state.toLowerCase(), -a)},dataIndex:"name"},{header:_("Size"),width:75,sortable:!0,renderer:fsize,dataIndex:"total_wanted"},{header:_("Progress"),width:150,sortable:!0,renderer:function(a,b,c){a=new Number(a);c=c.data.state+" "+a.toFixed(2)+"%";b=new Number((this.style?this.style:b.style).match(/\w+:\s*(\d+)\w+/)[1]);return Deluge.progressBar(a,b-8,c)},dataIndex:"progress"},{header:_("Down Speed"),width:80,sortable:!0,renderer:a,dataIndex:"download_payload_rate"},{header:_("Up Speed"),width:80,sortable:!0,renderer:a,dataIndex:"upload_payload_rate"}, -{header:_("ETA"),width:60,sortable:!0,renderer:ftime,dataIndex:"eta"},{header:_("Seeders"),hidden:!0,width:60,sortable:!0,renderer:function(a,b,c){return-1{0}',a)},dataIndex:"tracker_host"},{header:_("Save Path"),hidden:!0,width:120,sortable:!0,renderer:fplain,dataIndex:"save_path"}, -{header:_("Downloaded"),hidden:!0,width:75,sortable:!0,renderer:fsize,dataIndex:"total_done"},{header:_("Uploaded"),hidden:!0,width:75,sortable:!0,renderer:fsize,dataIndex:"total_uploaded"},{header:_("Down Limit"),hidden:!0,width:75,sortable:!0,renderer:b,dataIndex:"max_download_speed"},{header:_("Up Limit"),hidden:!0,width:75,sortable:!0,renderer:b,dataIndex:"max_upload_speed"},{header:_("Seeders")+"/"+_("Peers"),hidden:!0,width:75,sortable:!0,renderer:c,dataIndex:"seeds_peers_ratio"}],meta:{root:"torrents", -idProperty:"id",fields:[{name:"queue",sortType:Deluge.data.SortTypes.asQueuePosition},{name:"name",sortType:Deluge.data.SortTypes.asName},{name:"total_wanted",type:"int"},{name:"state"},{name:"progress",type:"float"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int",sortType:function(a){return-1*a}},{name:"ratio",type:"float"}, -{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host"},{name:"save_path"},{name:"total_done",type:"int"},{name:"total_uploaded",type:"int"},{name:"max_download_speed",type:"int"},{name:"max_upload_speed",type:"int"},{name:"seeds_peers_ratio",type:"float"}]},keys:[{key:"a",ctrl:!0,stopEvent:!0,handler:function(){deluge.torrents.getSelectionModel().selectAll()}},{key:[46],stopEvent:!0,handler:function(){ids=deluge.torrents.getSelectedIds();deluge.removeWindow.show(ids)}}], -constructor:function(a){a=Ext.apply({id:"torrentGrid",store:new Ext.data.JsonStore(this.meta),columns:this.columns,keys:this.keys,region:"center",cls:"deluge-torrents",stripeRows:!0,autoExpandColumn:"name",autoExpandMin:150,deferredRender:!1,autoScroll:!0,margins:"5 5 0 0",stateful:!0,view:new Ext.ux.grid.BufferView({rowHeight:26,scrollDelay:!1})},a);Deluge.TorrentGrid.superclass.constructor.call(this,a)},initComponent:function(){Deluge.TorrentGrid.superclass.initComponent.call(this);deluge.events.on("torrentRemoved", -this.onTorrentRemoved,this);deluge.events.on("disconnect",this.onDisconnect,this);this.on("rowcontextmenu",function(a,b,c){c.stopEvent();a=a.getSelectionModel();a.isSelected(b)||a.selectRow(b);deluge.menus.torrent.showAt(c.getPoint())})},getTorrent:function(a){return this.getStore().getAt(a)},getSelected:function(){return this.getSelectionModel().getSelected()},getSelections:function(){return this.getSelectionModel().getSelections()},getSelectedId:function(){return this.getSelectionModel().getSelected().id}, -getSelectedIds:function(){var a=[];Ext.each(this.getSelectionModel().getSelections(),function(b){a.push(b.id)});return a},update:function(a,b){var c=this.getStore();b&&(c.removeAll(),this.torrents={});var e=[],h;for(h in a){var k=a[h];if(this.torrents[h]){var l=c.getById(h);l.beginEdit();for(var m in k)l.get(m)!=k[m]&&l.set(m,k[m]);l.endEdit()}else l=new Deluge.data.Torrent(k),l.id=h,this.torrents[h]=1,e.push(l)}c.add(e);c.each(function(b){a[b.id]||(c.remove(b),delete this.torrents[b.id])},this); -c.commitChanges();(e=c.getSortState())&&c.sort(e.field,e.direction)},onDisconnect:function(){this.getStore().removeAll();this.torrents={}},onTorrentRemoved:function(a){var b=this.getSelectionModel();Ext.each(a,function(a){var c=this.getStore().getById(a);b.isSelected(c)&&b.deselectRow(this.getStore().indexOf(c));this.getStore().remove(c);delete this.torrents[a]},this)}});deluge.torrents=new Deluge.TorrentGrid})(); -deluge.ui={errorCount:0,filters:null,initialize:function(){deluge.add=new Deluge.add.AddWindow;deluge.details=new Deluge.details.DetailsPanel;deluge.connectionManager=new Deluge.ConnectionManager;deluge.editTrackers=new Deluge.EditTrackersWindow;deluge.login=new Deluge.LoginWindow;deluge.preferences=new Deluge.preferences.PreferencesWindow;deluge.sidebar=new Deluge.Sidebar;deluge.statusbar=new Deluge.Statusbar;deluge.toolbar=new Deluge.Toolbar;this.detailsPanel=new Ext.Panel({id:"detailsPanel",cls:"detailsPanel", -region:"south",split:!0,height:215,minSize:100,collapsible:!0,margins:"0 5 5 5",cmargins:"0 5 5 5",layout:"fit",items:[deluge.details]});this.MainPanel=new Ext.Panel({id:"mainPanel",iconCls:"x-deluge-main-panel",layout:"border",border:!1,tbar:deluge.toolbar,items:[deluge.sidebar,this.detailsPanel,deluge.torrents],bbar:deluge.statusbar});this.Viewport=new Ext.Viewport({layout:"fit",items:[this.MainPanel]});deluge.events.on("connect",this.onConnect,this);deluge.events.on("disconnect",this.onDisconnect, -this);deluge.events.on("PluginDisabledEvent",this.onPluginDisabled,this);deluge.events.on("PluginEnabledEvent",this.onPluginEnabled,this);deluge.client=new Ext.ux.util.RpcClient({url:deluge.config.base+"json"});for(var a in Deluge.pluginStore)a=Deluge.createPlugin(a),a.enable(),deluge.plugins[a.name]=a;Ext.QuickTips.init();deluge.client.on("connected",function(a){deluge.login.show()},this,{single:!0});this.update=this.update.createDelegate(this);this.checkConnection=this.checkConnection.createDelegate(this); -this.originalTitle=document.title},checkConnection:function(){deluge.client.web.connected({success:this.onConnectionSuccess,failure:this.onConnectionError,scope:this})},update:function(){var a=deluge.sidebar.getFilterStates();this.oldFilters=this.filters;this.filters=a;deluge.client.web.update_ui(Deluge.Keys.Grid,a,{success:this.onUpdate,failure:this.onUpdateError,scope:this});deluge.details.update()},onConnectionError:function(a){},onConnectionSuccess:function(a){deluge.statusbar.setStatus({iconCls:"x-deluge-statusbar icon-ok", -text:_("Connection restored")});clearInterval(this.checking);a||deluge.connectionManager.show()},onUpdateError:function(a){2==this.errorCount&&(Ext.MessageBox.show({title:"Lost Connection",msg:"The connection to the webserver has been lost!",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR}),deluge.events.fire("disconnect"),deluge.statusbar.setStatus({text:"Lost connection to webserver"}),this.checking=setInterval(this.checkConnection,2E3));this.errorCount++},onUpdate:function(a){a.connected?(deluge.config.show_session_speed&& -(document.title="D: "+fsize_short(a.stats.download_rate,!0)+" U: "+fsize_short(a.stats.upload_rate,!0)+" - "+this.originalTitle),Ext.areObjectsEqual(this.filters,this.oldFilters)?deluge.torrents.update(a.torrents):deluge.torrents.update(a.torrents,!0),deluge.statusbar.update(a.stats),deluge.sidebar.update(a.filters),this.errorCount=0):deluge.connectionManager.disconnect(!0)},onConnect:function(){this.running||(this.running=setInterval(this.update,2E3),this.update());deluge.client.web.get_plugins({success:this.onGotPlugins, -scope:this})},onDisconnect:function(){this.stop()},onGotPlugins:function(a){Ext.each(a.enabled_plugins,function(a){deluge.plugins[a]||deluge.client.web.get_plugin_resources(a,{success:this.onGotPluginResources,scope:this})},this)},onPluginEnabled:function(a){deluge.plugins[a]?deluge.plugins[a].enable():deluge.client.web.get_plugin_resources(a,{success:this.onGotPluginResources,scope:this})},onGotPluginResources:function(a){Ext.each(Deluge.debug?a.debug_scripts:a.scripts,function(b){Ext.ux.JSLoader({url:deluge.config.base+ -b,onLoad:this.onPluginLoaded,pluginName:a.name})},this)},onPluginDisabled:function(a){deluge.plugins[a]&&deluge.plugins[a].disable()},onPluginLoaded:function(a){Deluge.hasPlugin(a.pluginName)&&(plugin=Deluge.createPlugin(a.pluginName),plugin.enable(),deluge.plugins[plugin.name]=plugin)},stop:function(){this.running&&(clearInterval(this.running),this.running=!1,deluge.torrents.getStore().removeAll())}};Ext.onReady(function(a){deluge.ui.initialize()}); +/* + * Deluge.data.SortTypes.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.data");Deluge.data.SortTypes={asIPAddress:function(a){var b=a.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/);return((((((+b[1])*256)+(+b[2]))*256)+(+b[3]))*256)+(+b[4])},asQueuePosition:function(a){return(a>-1)?a:Number.MAX_VALUE},asName:function(a){return String(a).toLowerCase()}} +/* + * Deluge.data.PeerRecord.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +;Ext.namespace("Deluge.data");Deluge.data.Peer=Ext.data.Record.create([{name:"country",type:"string"},{name:"ip",type:"string",sortType:Deluge.data.SortTypes.asIPAddress},{name:"client",type:"string"},{name:"progress",type:"float"},{name:"down_speed",type:"int"},{name:"up_speed",type:"int"},{name:"seed",type:"int"}]); +/* + * Deluge.data.TorrentRecord.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.data");Deluge.data.Torrent=Ext.data.Record.create([{name:"queue",type:"int"},{name:"name",type:"string",sortType:Deluge.data.SortTypes.asName},{name:"total_wanted",type:"int"},{name:"state",type:"string"},{name:"progress",type:"int"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int"},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host",type:"string"},{name:"save_path",type:"string"},{name:"total_done",type:"int"},{name:"total_uploaded",type:"int"},{name:"max_download_speed",type:"int"},{name:"max_upload_speed",type:"int"},{name:"seeds_peers_ratio",type:"float"}]); +/* + * Deluge.details.DetailsPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.details");Deluge.details.DetailsPanel=Ext.extend(Ext.TabPanel,{id:"torrentDetails",activeTab:0,initComponent:function(){Deluge.details.DetailsPanel.superclass.initComponent.call(this);this.add(new Deluge.details.StatusTab());this.add(new Deluge.details.DetailsTab());this.add(new Deluge.details.FilesTab());this.add(new Deluge.details.PeersTab());this.add(new Deluge.details.OptionsTab())},clear:function(){this.items.each(function(a){if(a.clear){a.clear.defer(100,a);a.disable()}})},update:function(a){var b=deluge.torrents.getSelected();if(!b){this.clear();return}this.items.each(function(c){if(c.disabled){c.enable()}});a=a||this.getActiveTab();if(a.update){a.update(b.id)}},onRender:function(b,a){Deluge.details.DetailsPanel.superclass.onRender.call(this,b,a);deluge.events.on("disconnect",this.clear,this);deluge.torrents.on("rowclick",this.onTorrentsClick,this);this.on("tabchange",this.onTabChange,this);deluge.torrents.getSelectionModel().on("selectionchange",function(c){if(!c.hasSelection()){this.clear()}},this)},onTabChange:function(a,b){this.update(b)},onTorrentsClick:function(a,c,b){this.update()}});Deluge.details.DetailsTab=Ext.extend(Ext.Panel,{title:_("Details"),fields:{},autoScroll:true,queuedItems:{},oldData:{},initComponent:function(){Deluge.details.DetailsTab.superclass.initComponent.call(this);this.addItem("torrent_name",_("Name"));this.addItem("hash",_("Hash"));this.addItem("path",_("Path"));this.addItem("size",_("Total Size"));this.addItem("files",_("# of files"));this.addItem("comment",_("Comment"));this.addItem("status",_("Status"));this.addItem("tracker",_("Tracker"))},onRender:function(b,a){Deluge.details.DetailsTab.superclass.onRender.call(this,b,a);this.body.setStyle("padding","10px");this.dl=Ext.DomHelper.append(this.body,{tag:"dl"},true);for(var c in this.queuedItems){this.doAddItem(c,this.queuedItems[c])}},addItem:function(b,a){if(!this.rendered){this.queuedItems[b]=a}else{this.doAddItem(b,a)}},doAddItem:function(b,a){Ext.DomHelper.append(this.dl,{tag:"dt",cls:b,html:a+":"});this.fields[b]=Ext.DomHelper.append(this.dl,{tag:"dd",cls:b,html:""},true)},clear:function(){if(!this.fields){return}for(var a in this.fields){this.fields[a].dom.innerHTML=""}this.oldData={}},update:function(a){deluge.client.web.get_torrent_status(a,Deluge.Keys.Details,{success:this.onRequestComplete,scope:this,torrentId:a})},onRequestComplete:function(e,c,a,b){var d={torrent_name:e.name,hash:b.options.torrentId,path:e.save_path,size:fsize(e.total_size),files:e.num_files,status:e.message,tracker:e.tracker,comment:e.comment};for(var f in this.fields){if(!Ext.isDefined(d[f])){continue}if(d[f]==this.oldData[f]){continue}this.fields[f].dom.innerHTML=Ext.escapeHTML(d[f])}this.oldData=d}}); +/* + * Deluge.details.FilesTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.details.FilesTab=Ext.extend(Ext.ux.tree.TreeGrid,{title:_("Files"),rootVisible:false,columns:[{header:_("Filename"),width:330,dataIndex:"filename"},{header:_("Size"),width:150,dataIndex:"size",tpl:new Ext.XTemplate("{size:this.fsize}",{fsize:function(a){return fsize(a)}})},{xtype:"tgrendercolumn",header:_("Progress"),width:150,dataIndex:"progress",renderer:function(a){var b=a*100;return Deluge.progressBar(b,this.col.width,b.toFixed(2)+"%",0)}},{header:_("Priority"),width:150,dataIndex:"priority",tpl:new Ext.XTemplate('
{priority:this.getName}
',{getClass:function(a){return FILE_PRIORITY_CSS[a]},getName:function(a){return _(FILE_PRIORITY[a])}})}],selModel:new Ext.tree.MultiSelectionModel(),initComponent:function(){Deluge.details.FilesTab.superclass.initComponent.call(this);this.setRootNode(new Ext.tree.TreeNode({text:"Files"}))},clear:function(){var a=this.getRootNode();if(!a.hasChildNodes()){return}a.cascade(function(c){var b=c.parentNode;if(!b){return}if(!b.ownerTree){return}b.removeChild(c)})},createFileTree:function(c){function b(g,d){for(var e in g.contents){var f=g.contents[e];if(f.type=="dir"){b(f,d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,size:f.size,progress:f.progress,priority:f.priority})))}else{d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,fileIndex:f.index,size:f.size,progress:f.progress,priority:f.priority,leaf:true,iconCls:"x-deluge-file",uiProvider:Ext.ux.tree.TreeGridNodeUI}))}}}var a=this.getRootNode();b(c,a);a.firstChild.expand()},update:function(a){if(this.torrentId!=a){this.clear();this.torrentId=a}deluge.client.web.get_torrent_files(a,{success:this.onRequestComplete,scope:this,torrentId:a})},updateFileTree:function(b){function a(g,c){for(var d in g.contents){var f=g.contents[d];var e=c.findChild("filename",d);e.attributes.size=f.size;e.attributes.progress=f.progress;e.attributes.priority=f.priority;e.ui.updateColumns();if(f.type=="dir"){a(f,e)}}}a(b,this.getRootNode())},onRender:function(b,a){Deluge.details.FilesTab.superclass.onRender.call(this,b,a);deluge.menus.filePriorities.on("itemclick",this.onItemClick,this);this.on("contextmenu",this.onContextMenu,this);this.sorter=new Ext.tree.TreeSorter(this,{folderSort:true})},onContextMenu:function(b,c){c.stopEvent();var a=this.getSelectionModel();if(a.getSelectedNodes().length<2){a.clearSelections();b.select()}deluge.menus.filePriorities.showAt(c.getPoint())},onItemClick:function(h,g){switch(h.id){case"expandAll":this.expandAll();break;default:var f={};function a(e){if(Ext.isEmpty(e.attributes.fileIndex)){return}f[e.attributes.fileIndex]=e.attributes.priority}this.getRootNode().cascade(a);var b=this.getSelectionModel().getSelectedNodes();Ext.each(b,function(i){if(!i.isLeaf()){function e(j){if(Ext.isEmpty(j.attributes.fileIndex)){return}f[j.attributes.fileIndex]=h.filePriority}i.cascade(e)}else{if(!Ext.isEmpty(i.attributes.fileIndex)){f[i.attributes.fileIndex]=h.filePriority;return}}});var d=new Array(Ext.keys(f).length);for(var c in f){d[c]=f[c]}deluge.client.core.set_torrent_file_priorities(this.torrentId,d,{success:function(){Ext.each(b,function(e){e.setColumnValue(3,h.filePriority)})},scope:this});break}},onRequestComplete:function(b,a){if(!this.getRootNode().hasChildNodes()){this.createFileTree(b)}else{this.updateFileTree(b)}}}); +/* + * Deluge.details.OptionsTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.details.OptionsTab=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({autoScroll:true,bodyStyle:"padding: 5px;",border:false,cls:"x-deluge-options",defaults:{autoHeight:true,labelWidth:1,defaultType:"checkbox"},deferredRender:false,layout:"column",title:_("Options")},a);Deluge.details.OptionsTab.superclass.constructor.call(this,a)},initComponent:function(){Deluge.details.OptionsTab.superclass.initComponent.call(this);this.fieldsets={},this.fields={};this.optionsManager=new Deluge.MultiOptionsManager({options:{max_download_speed:-1,max_upload_speed:-1,max_connections:-1,max_upload_slots:-1,auto_managed:false,stop_at_ratio:false,stop_ratio:2,remove_at_ratio:false,move_completed:false,move_completed_path:"","private":false,prioritize_first_last:false}});this.fieldsets.bandwidth=this.add({xtype:"fieldset",defaultType:"spinnerfield",bodyStyle:"padding: 5px",layout:"table",layoutConfig:{columns:3},labelWidth:150,style:"margin-left: 10px; margin-right: 5px; padding: 5px",title:_("Bandwidth"),width:250});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Download Speed"),forId:"max_download_speed",cls:"x-deluge-options-label"});this.fields.max_download_speed=this.fieldsets.bandwidth.add({id:"max_download_speed",name:"max_download_speed",width:70,strategy:{xtype:"number",decimalPrecision:1,minValue:-1,maxValue:99999}});this.fieldsets.bandwidth.add({xtype:"label",text:_("KiB/s"),style:"margin-left: 10px"});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Upload Speed"),forId:"max_upload_speed",cls:"x-deluge-options-label"});this.fields.max_upload_speed=this.fieldsets.bandwidth.add({id:"max_upload_speed",name:"max_upload_speed",width:70,value:-1,strategy:{xtype:"number",decimalPrecision:1,minValue:-1,maxValue:99999}});this.fieldsets.bandwidth.add({xtype:"label",text:_("KiB/s"),style:"margin-left: 10px"});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Connections"),forId:"max_connections",cls:"x-deluge-options-label"});this.fields.max_connections=this.fieldsets.bandwidth.add({id:"max_connections",name:"max_connections",width:70,value:-1,strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999},colspan:2});this.fieldsets.bandwidth.add({xtype:"label",text:_("Max Upload Slots"),forId:"max_upload_slots",cls:"x-deluge-options-label"});this.fields.max_upload_slots=this.fieldsets.bandwidth.add({id:"max_upload_slots",name:"max_upload_slots",width:70,value:-1,strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999},colspan:2});this.fieldsets.queue=this.add({xtype:"fieldset",title:_("Queue"),style:"margin-left: 5px; margin-right: 5px; padding: 5px",width:210,layout:"table",layoutConfig:{columns:2},labelWidth:0,defaults:{fieldLabel:"",labelSeparator:""}});this.fields.auto_managed=this.fieldsets.queue.add({xtype:"checkbox",fieldLabel:"",labelSeparator:"",name:"is_auto_managed",boxLabel:_("Auto Managed"),width:200,colspan:2});this.fields.stop_at_ratio=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"stop_at_ratio",width:120,boxLabel:_("Stop seed at ratio"),handler:this.onStopRatioChecked,scope:this});this.fields.stop_ratio=this.fieldsets.queue.add({xtype:"spinnerfield",id:"stop_ratio",name:"stop_ratio",disabled:true,width:50,value:2,strategy:{xtype:"number",minValue:-1,maxValue:99999,incrementValue:0.1,alternateIncrementValue:1,decimalPrecision:1}});this.fields.remove_at_ratio=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"remove_at_ratio",ctCls:"x-deluge-indent-checkbox",bodyStyle:"padding-left: 10px",boxLabel:_("Remove at ratio"),disabled:true,colspan:2});this.fields.move_completed=this.fieldsets.queue.add({fieldLabel:"",labelSeparator:"",id:"move_completed",boxLabel:_("Move Completed"),colspan:2,handler:this.onMoveCompletedChecked,scope:this});this.fields.move_completed_path=this.fieldsets.queue.add({xtype:"textfield",fieldLabel:"",id:"move_completed_path",colspan:3,bodyStyle:"margin-left: 20px",width:180,disabled:true});this.rightColumn=this.add({border:false,autoHeight:true,style:"margin-left: 5px",width:210});this.fieldsets.general=this.rightColumn.add({xtype:"fieldset",autoHeight:true,defaultType:"checkbox",title:_("General"),layout:"form"});this.fields["private"]=this.fieldsets.general.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Private"),id:"private",disabled:true});this.fields.prioritize_first_last=this.fieldsets.general.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Prioritize First/Last"),id:"prioritize_first_last"});for(var a in this.fields){this.optionsManager.bind(a,this.fields[a])}this.buttonPanel=this.rightColumn.add({layout:"hbox",xtype:"panel",border:false});this.buttonPanel.add({id:"edit_trackers",xtype:"button",text:_("Edit Trackers"),cls:"x-btn-text-icon",iconCls:"x-deluge-edit-trackers",border:false,width:100,handler:this.onEditTrackers,scope:this});this.buttonPanel.add({id:"apply",xtype:"button",text:_("Apply"),style:"margin-left: 10px;",border:false,width:100,handler:this.onApply,scope:this})},onRender:function(b,a){Deluge.details.OptionsTab.superclass.onRender.call(this,b,a);this.layout=new Ext.layout.ColumnLayout();this.layout.setContainer(this);this.doLayout()},clear:function(){if(this.torrentId==null){return}this.torrentId=null;this.optionsManager.changeId(null)},reset:function(){if(this.torrentId){this.optionsManager.reset()}},update:function(a){if(this.torrentId&&!a){this.clear()}if(!a){return}if(this.torrentId!=a){this.torrentId=a;this.optionsManager.changeId(a)}deluge.client.web.get_torrent_status(a,Deluge.Keys.Options,{success:this.onRequestComplete,scope:this})},onApply:function(){var b=this.optionsManager.getDirty();if(!Ext.isEmpty(b.prioritize_first_last)){var a=b.prioritize_first_last;deluge.client.core.set_torrent_prioritize_first_last(this.torrentId,a,{success:function(){this.optionsManager.set("prioritize_first_last",a)},scope:this})}deluge.client.core.set_torrent_options([this.torrentId],b,{success:function(){this.optionsManager.commit()},scope:this})},onEditTrackers:function(){deluge.editTrackers.show()},onMoveCompletedChecked:function(b,a){this.fields.move_completed_path.setDisabled(!a);if(!a){return}this.fields.move_completed_path.focus()},onStopRatioChecked:function(b,a){this.fields.remove_at_ratio.setDisabled(!a);this.fields.stop_ratio.setDisabled(!a)},onRequestComplete:function(c,b){this.fields["private"].setValue(c["private"]);this.fields["private"].setDisabled(true);delete c["private"];c.auto_managed=c.is_auto_managed;this.optionsManager.setDefault(c);var a=this.optionsManager.get("stop_at_ratio");this.fields.remove_at_ratio.setDisabled(!a);this.fields.stop_ratio.setDisabled(!a);this.fields.move_completed_path.setDisabled(!this.optionsManager.get("move_completed"))}}); +/* + * Deluge.details.PeersTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +(function(){function a(d){if(!d.replace(" ","").replace(" ","")){return""}return String.format('',deluge.config.base,d)}function b(h,i,f){var e=(f.data.seed==1024)?"x-deluge-seed":"x-deluge-peer";var d=h.split(":");if(d.length>2){var g=d.pop();var j=d.join(":");h="["+j+"]:"+g}return String.format('
{1}
',e,h)}function c(e){var d=(e*100).toFixed(0);return Deluge.progressBar(d,this.width-8,d+"%")}Deluge.details.PeersTab=Ext.extend(Ext.grid.GridPanel,{peers:{},constructor:function(d){d=Ext.apply({title:_("Peers"),cls:"x-deluge-peers",store:new Ext.data.Store({reader:new Ext.data.JsonReader({idProperty:"ip",root:"peers"},Deluge.data.Peer)}),columns:[{header:" ",width:30,sortable:true,renderer:a,dataIndex:"country"},{header:"Address",width:125,sortable:true,renderer:b,dataIndex:"ip"},{header:"Client",width:125,sortable:true,renderer:fplain,dataIndex:"client"},{header:"Progress",width:150,sortable:true,renderer:c,dataIndex:"progress"},{header:"Down Speed",width:100,sortable:true,renderer:fspeed,dataIndex:"down_speed"},{header:"Up Speed",width:100,sortable:true,renderer:fspeed,dataIndex:"up_speed"}],stripeRows:true,deferredRender:false,autoScroll:true},d);Deluge.details.PeersTab.superclass.constructor.call(this,d)},clear:function(){this.getStore().removeAll();this.peers={}},update:function(d){deluge.client.web.get_torrent_status(d,Deluge.Keys.Peers,{success:this.onRequestComplete,scope:this})},onRequestComplete:function(h,g){if(!h){return}var f=this.getStore();var e=[];var i={};Ext.each(h.peers,function(m){if(this.peers[m.ip]){var j=f.getById(m.ip);j.beginEdit();for(var l in m){if(j.get(l)!=m[l]){j.set(l,m[l])}}j.endEdit()}else{this.peers[m.ip]=1;e.push(new Deluge.data.Peer(m,m.ip))}i[m.ip]=1},this);f.add(e);f.each(function(j){if(!i[j.id]){f.remove(j);delete this.peers[j.id]}},this);f.commitChanges();var d=f.getSortState();if(!d){return}f.sort(d.field,d.direction)}})})(); +/* + * Deluge.details.StatusTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.details");Deluge.details.StatusTab=Ext.extend(Ext.Panel,{title:_("Status"),autoScroll:true,onRender:function(b,a){Deluge.details.StatusTab.superclass.onRender.call(this,b,a);this.progressBar=this.add({xtype:"progress",cls:"x-deluge-status-progressbar"});this.status=this.add({cls:"x-deluge-status",id:"deluge-details-status",border:false,width:1000,listeners:{render:{fn:function(c){c.load({url:deluge.config.base+"render/tab_status.html",text:_("Loading")+"..."});c.getUpdater().on("update",this.onPanelUpdate,this)},scope:this}}})},clear:function(){this.progressBar.updateProgress(0," ");for(var a in this.fields){this.fields[a].innerHTML=""}},update:function(a){if(!this.fields){this.getFields()}deluge.client.web.get_torrent_status(a,Deluge.Keys.Status,{success:this.onRequestComplete,scope:this})},onPanelUpdate:function(b,a){this.fields={};Ext.each(Ext.query("dd",this.status.body.dom),function(c){this.fields[c.className]=c},this)},onRequestComplete:function(a){seeders=a.total_seeds>-1?a.num_seeds+" ("+a.total_seeds+")":a.num_seeds;peers=a.total_peers>-1?a.num_peers+" ("+a.total_peers+")":a.num_peers;var b={downloaded:fsize(a.total_done,true),uploaded:fsize(a.total_uploaded,true),share:(a.ratio==-1)?"∞":a.ratio.toFixed(3),announce:ftime(a.next_announce),tracker_status:a.tracker_status,downspeed:(a.download_payload_rate)?fspeed(a.download_payload_rate):"0.0 KiB/s",upspeed:(a.upload_payload_rate)?fspeed(a.upload_payload_rate):"0.0 KiB/s",eta:ftime(a.eta),pieces:a.num_pieces+" ("+fsize(a.piece_length)+")",seeders:seeders,peers:peers,avail:a.distributed_copies.toFixed(3),active_time:ftime(a.active_time),seeding_time:ftime(a.seeding_time),seed_rank:a.seed_rank,time_added:fdate(a.time_added)};b.auto_managed=_((a.is_auto_managed)?"True":"False");b.downloaded+=" ("+((a.total_payload_download)?fsize(a.total_payload_download):"0.0 KiB")+")";b.uploaded+=" ("+((a.total_payload_upload)?fsize(a.total_payload_upload):"0.0 KiB")+")";for(var c in this.fields){this.fields[c].innerHTML=b[c]}var d=a.state+" "+a.progress.toFixed(2)+"%";this.progressBar.updateProgress(a.progress/100,d)}}); +/* + * Deluge.add.Window.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.add");Deluge.add.Window=Ext.extend(Ext.Window,{initComponent:function(){Deluge.add.Window.superclass.initComponent.call(this);this.addEvents("beforeadd","add","addfailed")},createTorrentId:function(){return new Date().getTime()}}); +/* + * Deluge.add.AddWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.add");Deluge.add.AddWindow=Ext.extend(Deluge.add.Window,{title:_("Add Torrents"),layout:"border",width:470,height:450,bodyStyle:"padding: 10px 5px;",buttonAlign:"right",closeAction:"hide",closable:true,plain:true,iconCls:"x-deluge-add-window-icon",initComponent:function(){Deluge.add.AddWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Add"),this.onAddClick,this);function a(c,d,b){if(b.data.info_hash){return String.format('
{0}
',c)}else{return String.format('
{0}
',c)}}this.list=new Ext.list.ListView({store:new Ext.data.SimpleStore({fields:[{name:"info_hash",mapping:1},{name:"text",mapping:2}],id:0}),columns:[{id:"torrent",width:150,sortable:true,renderer:a,dataIndex:"text"}],stripeRows:true,singleSelect:true,listeners:{selectionchange:{fn:this.onSelect,scope:this}},hideHeaders:true,autoExpandColumn:"torrent",height:"100%",autoScroll:true});this.add({region:"center",items:[this.list],margins:"5 5 5 5",bbar:new Ext.Toolbar({items:[{iconCls:"x-deluge-add-file",text:_("File"),handler:this.onFile,scope:this},{text:_("Url"),iconCls:"icon-add-url",handler:this.onUrl,scope:this},{text:_("Infohash"),iconCls:"icon-add-magnet",hidden:true,disabled:true},"->",{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemove,scope:this}]})});this.optionsPanel=this.add(new Deluge.add.OptionsPanel());this.on("hide",this.onHide,this);this.on("show",this.onShow,this)},clear:function(){this.list.getStore().removeAll();this.optionsPanel.clear()},onAddClick:function(){var a=[];if(!this.list){return}this.list.getStore().each(function(b){var c=b.get("info_hash");a.push({path:this.optionsPanel.getFilename(c),options:this.optionsPanel.getOptions(c)})},this);deluge.client.web.add_torrents(a,{success:function(b){}});this.clear();this.hide()},onCancelClick:function(){this.clear();this.hide()},onFile:function(){if(!this.file){this.file=new Deluge.add.FileWindow()}this.file.show()},onHide:function(){this.optionsPanel.setActiveTab(0);this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)},onRemove:function(){if(!this.list.getSelectionCount()){return}var a=this.list.getSelectedRecords()[0];this.list.getStore().remove(a);this.optionsPanel.clear();if(this.torrents&&this.torrents[a.id]){delete this.torrents[a.id]}},onSelect:function(c,b){if(b.length){var a=this.list.getRecord(b[0]);this.optionsPanel.setTorrent(a.get("info_hash"))}else{this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)}},onShow:function(){if(!this.url){this.url=new Deluge.add.UrlWindow();this.url.on("beforeadd",this.onTorrentBeforeAdd,this);this.url.on("add",this.onTorrentAdd,this);this.url.on("addfailed",this.onTorrentAddFailed,this)}if(!this.file){this.file=new Deluge.add.FileWindow();this.file.on("beforeadd",this.onTorrentBeforeAdd,this);this.file.on("add",this.onTorrentAdd,this);this.file.on("addfailed",this.onTorrentAddFailed,this)}this.optionsPanel.form.getDefaults()},onTorrentBeforeAdd:function(b,c){var a=this.list.getStore();a.loadData([[b,null,c]],true)},onTorrentAdd:function(a,c){var b=this.list.getStore().getById(a);if(!c){Ext.MessageBox.show({title:_("Error"),msg:_("Not a valid torrent"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.list.getStore().remove(b)}else{b.set("info_hash",c.info_hash);b.set("text",c.name);this.list.getStore().commitChanges();this.optionsPanel.addTorrent(c);this.list.select(b)}},onTorrentAddFailed:function(c){var b=this.list.getStore();var a=b.getById(c);if(a){b.remove(a)}},onUrl:function(a,b){this.url.show()}}); +/* + * Deluge.add.File.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.add");Deluge.add.FileWindow=Ext.extend(Deluge.add.Window,{title:_("Add from File"),layout:"fit",width:350,height:115,modal:true,plain:true,buttonAlign:"center",closeAction:"hide",bodyStyle:"padding: 10px 5px;",iconCls:"x-deluge-add-file",initComponent:function(){Deluge.add.FileWindow.superclass.initComponent.call(this);this.addButton(_("Add"),this.onAddClick,this);this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:35,autoHeight:true,fileUpload:true,items:[{xtype:"fileuploadfield",id:"torrentFile",width:280,height:24,emptyText:_("Select a torrent"),fieldLabel:_("File"),name:"file",buttonCfg:{text:_("Browse")+"..."}}]})},onAddClick:function(c,b){if(this.form.getForm().isValid()){this.torrentId=this.createTorrentId();this.form.getForm().submit({url:deluge.config.base+"upload",waitMsg:_("Uploading your torrent..."),failure:this.onUploadFailure,success:this.onUploadSuccess,scope:this});var a=this.form.getForm().findField("torrentFile").value;a=a.split("\\").slice(-1)[0];this.fireEvent("beforeadd",this.torrentId,a)}},onGotInfo:function(d,c,a,b){d.filename=b.options.filename;this.fireEvent("add",this.torrentId,d)},onUploadFailure:function(a,b){this.hide();Ext.MessageBox.show({title:_("Error"),msg:_("Failed to upload torrent"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.fireEvent("addfailed",this.torrentId)},onUploadSuccess:function(c,b){this.hide();if(b.result.success){var a=b.result.files[0];this.form.getForm().findField("torrentFile").setValue("");deluge.client.web.get_torrent_info(a,{success:this.onGotInfo,scope:this,filename:a})}}}); +/* + * Deluge.add.FilesTab.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.add");Deluge.add.FilesTab=Ext.extend(Ext.ux.tree.TreeGrid,{layout:"fit",title:_("Files"),autoScroll:false,animate:false,border:false,disabled:true,rootVisible:false,columns:[{header:_("Filename"),width:295,dataIndex:"filename"},{header:_("Size"),width:60,dataIndex:"size",tpl:new Ext.XTemplate("{size:this.fsize}",{fsize:function(a){return fsize(a)}})},{header:_("Download"),width:65,dataIndex:"download",tpl:new Ext.XTemplate("{download:this.format}",{format:function(a){return'
'}})}],initComponent:function(){Deluge.add.FilesTab.superclass.initComponent.call(this);this.on("click",this.onNodeClick,this)},clearFiles:function(){var a=this.getRootNode();if(!a.hasChildNodes()){return}a.cascade(function(b){if(!b.parentNode||!b.getOwnerTree()){return}b.remove()})},setDownload:function(b,c,d){b.attributes.download=c;b.ui.updateColumns();if(b.isLeaf()){if(!d){return this.fireEvent("fileschecked",[b],c,!c)}}else{var a=[b];b.cascade(function(e){e.attributes.download=c;e.ui.updateColumns();a.push(e)},this);if(!d){return this.fireEvent("fileschecked",a,c,!c)}}},onNodeClick:function(b,c){var a=new Ext.Element(c.target);if(a.getAttribute("rel")=="chkbox"){this.setDownload(b,!b.attributes.download)}}}); +/* + * Deluge.add.Infohash.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Ext.deluge.add"); +/* + * Deluge.add.OptionsPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.add");Deluge.add.OptionsPanel=Ext.extend(Ext.TabPanel,{torrents:{},region:"south",margins:"5 5 5 5",activeTab:0,height:265,initComponent:function(){Deluge.add.OptionsPanel.superclass.initComponent.call(this);this.files=this.add(new Deluge.add.FilesTab());this.form=this.add(new Deluge.add.OptionsTab());this.files.on("fileschecked",this.onFilesChecked,this)},addTorrent:function(c){this.torrents[c.info_hash]=c;var b={};this.walkFileTree(c.files_tree,function(e,g,h,f){if(g!="file"){return}b[h.index]=h.download},this);var a=[];Ext.each(Ext.keys(b),function(e){a[e]=b[e]});var d=this.form.optionsManager.changeId(c.info_hash,true);this.form.optionsManager.setDefault("file_priorities",a);this.form.optionsManager.changeId(d,true)},clear:function(){this.files.clearFiles();this.form.optionsManager.resetAll()},getFilename:function(a){return this.torrents[a]["filename"]},getOptions:function(a){var c=this.form.optionsManager.changeId(a,true);var b=this.form.optionsManager.get();this.form.optionsManager.changeId(c,true);Ext.each(b.file_priorities,function(e,d){b.file_priorities[d]=(e)?1:0});return b},setTorrent:function(b){if(!b){return}this.torrentId=b;this.form.optionsManager.changeId(b);this.files.clearFiles();var a=this.files.getRootNode();var c=this.form.optionsManager.get("file_priorities");this.form.setDisabled(false);if(this.torrents[b]["files_tree"]){this.walkFileTree(this.torrents[b]["files_tree"],function(e,f,h,d){var g=new Ext.tree.TreeNode({download:(h.index)?c[h.index]:true,filename:e,fileindex:h.index,leaf:f!="dir",size:h.length});d.appendChild(g);if(f=="dir"){return g}},this,a);a.firstChild.expand();this.files.setDisabled(false);this.files.show()}else{this.form.show();this.files.setDisabled(true)}},walkFileTree:function(g,h,e,a){for(var b in g.contents){var f=g.contents[b];var d=f.type;if(e){var c=h.apply(e,[b,d,f,a])}else{var c=h(b,d,f,a)}if(d=="dir"){this.walkFileTree(f,h,e,c)}}},onFilesChecked:function(a,c,b){if(this.form.optionsManager.get("compact_allocation")){Ext.Msg.show({title:_("Unable to set file priority!"),msg:_("File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?"),buttons:Ext.Msg.YESNO,fn:function(d){if(d=="yes"){this.form.optionsManager.update("compact_allocation",false);Ext.each(a,function(f){if(f.attributes.fileindex<0){return}var e=this.form.optionsManager.get("file_priorities");e[f.attributes.fileindex]=c;this.form.optionsManager.update("file_priorities",e)},this)}else{this.files.setDownload(a[0],b,true)}},scope:this,icon:Ext.MessageBox.QUESTION})}else{Ext.each(a,function(e){if(e.attributes.fileindex<0){return}var d=this.form.optionsManager.get("file_priorities");d[e.attributes.fileindex]=c;this.form.optionsManager.update("file_priorities",d)},this)}}}); +/* + * Deluge.add.OptionsPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.add");Deluge.add.OptionsTab=Ext.extend(Ext.form.FormPanel,{title:_("Options"),height:170,border:false,bodyStyle:"padding: 5px",disabled:true,labelWidth:1,initComponent:function(){Deluge.add.OptionsTab.superclass.initComponent.call(this);this.optionsManager=new Deluge.MultiOptionsManager();var a=this.add({xtype:"fieldset",title:_("Download Location"),border:false,autoHeight:true,defaultType:"textfield",labelWidth:1,fieldLabel:"",style:"padding-bottom: 5px; margin-bottom: 0px;"});this.optionsManager.bind("download_location",a.add({fieldLabel:"",name:"download_location",width:400,labelSeparator:""}));var a=this.add({xtype:"fieldset",title:_("Move Completed Location"),border:false,autoHeight:true,defaultType:"togglefield",labelWidth:1,fieldLabel:"",style:"padding-bottom: 5px; margin-bottom: 0px;"});var c=a.add({fieldLabel:"",name:"move_completed_path",width:425});this.optionsManager.bind("move_completed",c.toggle);this.optionsManager.bind("move_completed_path",c.input);var b=this.add({border:false,layout:"column",defaultType:"fieldset"});a=b.add({title:_("Allocation"),border:false,autoHeight:true,defaultType:"radio"});this.optionsManager.bind("compact_allocation",a.add({xtype:"radiogroup",columns:1,vertical:true,labelSeparator:"",width:80,items:[{name:"compact_allocation",value:false,inputValue:false,boxLabel:_("Full"),fieldLabel:"",labelSeparator:""},{name:"compact_allocation",value:true,inputValue:true,boxLabel:_("Compact"),fieldLabel:"",labelSeparator:""}]}));a=b.add({title:_("Bandwidth"),border:false,autoHeight:true,bodyStyle:"margin-left: 7px",labelWidth:105,width:200,defaultType:"spinnerfield"});this.optionsManager.bind("max_download_speed",a.add({fieldLabel:_("Max Down Speed"),name:"max_download_speed",width:60}));this.optionsManager.bind("max_upload_speed",a.add({fieldLabel:_("Max Up Speed"),name:"max_upload_speed",width:60}));this.optionsManager.bind("max_connections",a.add({fieldLabel:_("Max Connections"),name:"max_connections",width:60}));this.optionsManager.bind("max_upload_slots",a.add({fieldLabel:_("Max Upload Slots"),name:"max_upload_slots",width:60}));a=b.add({title:_("General"),border:false,autoHeight:true,defaultType:"checkbox"});this.optionsManager.bind("add_paused",a.add({name:"add_paused",boxLabel:_("Add In Paused State"),fieldLabel:"",labelSeparator:""}));this.optionsManager.bind("prioritize_first_last_pieces",a.add({name:"prioritize_first_last_pieces",boxLabel:_("Prioritize First/Last Pieces"),fieldLabel:"",labelSeparator:""}))},getDefaults:function(){var a=["add_paused","compact_allocation","download_location","max_connections_per_torrent","max_download_speed_per_torrent","move_completed","move_completed_path","max_upload_slots_per_torrent","max_upload_speed_per_torrent","prioritize_first_last_pieces"];deluge.client.core.get_config_values(a,{success:function(c){var b={file_priorities:[],add_paused:c.add_paused,compact_allocation:c.compact_allocation,download_location:c.download_location,move_completed:c.move_completed,move_completed_path:c.move_completed_path,max_connections:c.max_connections_per_torrent,max_download_speed:c.max_download_speed_per_torrent,max_upload_slots:c.max_upload_slots_per_torrent,max_upload_speed:c.max_upload_speed_per_torrent,prioritize_first_last_pieces:c.prioritize_first_last_pieces};this.optionsManager.options=b;this.optionsManager.resetAll()},scope:this})}}); +/* + * Deluge.add.UrlWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.add");Deluge.add.UrlWindow=Ext.extend(Deluge.add.Window,{title:_("Add from Url"),modal:true,plain:true,layout:"fit",width:350,height:155,buttonAlign:"center",closeAction:"hide",bodyStyle:"padding: 10px 5px;",iconCls:"x-deluge-add-url-window-icon",initComponent:function(){Deluge.add.UrlWindow.superclass.initComponent.call(this);this.addButton(_("Add"),this.onAddClick,this);var a=this.add({xtype:"form",defaultType:"textfield",baseCls:"x-plain",labelWidth:55});this.urlField=a.add({fieldLabel:_("Url"),id:"url",name:"url",width:"97%"});this.urlField.on("specialkey",this.onAdd,this);this.cookieField=a.add({fieldLabel:_("Cookies"),id:"cookies",name:"cookies",width:"97%"});this.cookieField.on("specialkey",this.onAdd,this)},onAddClick:function(f,d){if((f.id=="url"||f.id=="cookies")&&d.getKey()!=d.ENTER){return}var f=this.urlField;var b=f.getValue();var c=this.cookieField.getValue();var a=this.createTorrentId();if(b.indexOf("magnet:?")==0&&b.indexOf("xt=urn:btih")>-1){deluge.client.web.get_magnet_info(b,{success:this.onGotInfo,scope:this,filename:b,torrentId:a})}else{deluge.client.web.download_torrent_from_url(b,c,{success:this.onDownload,failure:this.onDownloadFailed,scope:this,torrentId:a})}this.hide();this.urlField.setValue("");this.fireEvent("beforeadd",a,b)},onDownload:function(a,c,d,b){deluge.client.web.get_torrent_info(a,{success:this.onGotInfo,scope:this,filename:a,torrentId:b.options.torrentId})},onDownloadFailed:function(b,c,a){Ext.MessageBox.show({title:_("Error"),msg:_("Failed to download torrent"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.fireEvent("addfailed",a.options.torrentId)},onGotInfo:function(d,c,a,b){d.filename=b.options.filename;this.fireEvent("add",b.options.torrentId,d)}}); +/* + * Deluge.preferences.BandwidthPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Bandwidth=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Bandwidth"),layout:"form",labelWidth:10},a);Deluge.preferences.Bandwidth.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Bandwidth.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Global Bandwidth Usage"),labelWidth:200,defaultType:"spinnerfield",defaults:{minValue:-1,maxValue:99999},style:"margin-bottom: 0px; padding-bottom: 0px;",autoHeight:true});b.bind("max_connections_global",a.add({name:"max_connections_global",fieldLabel:_("Maximum Connections"),width:80,value:-1,decimalPrecision:0}));b.bind("max_upload_slots_global",a.add({name:"max_upload_slots_global",fieldLabel:_("Maximum Upload Slots"),width:80,value:-1,decimalPrecision:0}));b.bind("max_download_speed",a.add({name:"max_download_speed",fieldLabel:_("Maximum Download Speed (KiB/s)"),width:80,value:-1,decimalPrecision:1}));b.bind("max_upload_speed",a.add({name:"max_upload_speed",fieldLabel:_("Maximum Upload Speed (KiB/s)"),width:80,value:-1,decimalPrecision:1}));b.bind("max_half_open_connections",a.add({name:"max_half_open_connections",fieldLabel:_("Maximum Half-Open Connections"),width:80,value:-1,decimalPrecision:0}));b.bind("max_connections_per_second",a.add({name:"max_connections_per_second",fieldLabel:_("Maximum Connection Attempts per Second"),width:80,value:-1,decimalPrecision:0}));a=this.add({xtype:"fieldset",border:false,title:"",defaultType:"checkbox",style:"padding-top: 0px; padding-bottom: 5px; margin-top: 0px; margin-bottom: 0px;",autoHeight:true});b.bind("ignore_limits_on_local_network",a.add({name:"ignore_limits_on_local_network",height:22,fieldLabel:"",labelSeparator:"",boxLabel:_("Ignore limits on local network")}));b.bind("rate_limit_ip_overhead",a.add({name:"rate_limit_ip_overhead",height:22,fieldLabel:"",labelSeparator:"",boxLabel:_("Rate limit IP overhead")}));a=this.add({xtype:"fieldset",border:false,title:_("Per Torrent Bandwidth Usage"),style:"margin-bottom: 0px; padding-bottom: 0px;",defaultType:"spinnerfield",labelWidth:200,defaults:{minValue:-1,maxValue:99999},autoHeight:true});b.bind("max_connections_per_torrent",a.add({name:"max_connections_per_torrent",fieldLabel:_("Maximum Connections"),width:80,value:-1,decimalPrecision:0}));b.bind("max_upload_slots_per_torrent",a.add({name:"max_upload_slots_per_torrent",fieldLabel:_("Maximum Upload Slots"),width:80,value:-1,decimalPrecision:0}));b.bind("max_download_speed_per_torrent",a.add({name:"max_download_speed_per_torrent",fieldLabel:_("Maximum Download Speed (KiB/s)"),width:80,value:-1,decimalPrecision:0}));b.bind("max_upload_speed_per_torrent",a.add({name:"max_upload_speed_per_torrent",fieldLabel:_("Maximum Upload Speed (KiB/s)"),width:80,value:-1,decimalPrecision:0}))}}); +/* + * Deluge.preferences.CachePage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Cache=Ext.extend(Ext.form.FormPanel,{border:false,title:_("Cache"),layout:"form",initComponent:function(){Deluge.preferences.Cache.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Settings"),autoHeight:true,labelWidth:180,defaultType:"spinnerfield",defaults:{decimalPrecision:0,minValue:-1,maxValue:999999}});b.bind("cache_size",a.add({fieldLabel:_("Cache Size (16 KiB Blocks)"),name:"cache_size",width:60,value:512}));b.bind("cache_expiry",a.add({fieldLabel:_("Cache Expiry (seconds)"),name:"cache_expiry",width:60,value:60}))}}); +/* + * Deluge.preferences.DaemonPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Daemon=Ext.extend(Ext.form.FormPanel,{border:false,title:_("Daemon"),layout:"form",initComponent:function(){Deluge.preferences.Daemon.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Port"),autoHeight:true,defaultType:"spinnerfield"});b.bind("daemon_port",a.add({fieldLabel:_("Daemon port"),name:"daemon_port",value:58846,decimalPrecision:0,minValue:-1,maxValue:99999}));a=this.add({xtype:"fieldset",border:false,title:_("Connections"),autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("allow_remote",a.add({fieldLabel:"",height:22,labelSeparator:"",boxLabel:_("Allow Remote Connections"),name:"allow_remote"}));a=this.add({xtype:"fieldset",border:false,title:_("Other"),autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("new_release_check",a.add({fieldLabel:"",labelSeparator:"",height:40,boxLabel:_("Periodically check the website for new releases"),id:"new_release_check"}))}}); +/* + * Deluge.preferences.DownloadsPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Downloads=Ext.extend(Ext.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Downloads"),layout:"form",autoHeight:true,width:320},a);Deluge.preferences.Downloads.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Downloads.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Folders"),labelWidth:150,defaultType:"togglefield",autoHeight:true,labelAlign:"top",width:300,style:"margin-bottom: 5px; padding-bottom: 5px;"});b.bind("download_location",a.add({xtype:"textfield",name:"download_location",fieldLabel:_("Download to"),width:280}));var c=a.add({name:"move_completed_path",fieldLabel:_("Move completed to"),width:280});b.bind("move_completed",c.toggle);b.bind("move_completed_path",c.input);c=a.add({name:"torrentfiles_location",fieldLabel:_("Copy of .torrent files to"),width:280});b.bind("copy_torrent_file",c.toggle);b.bind("torrentfiles_location",c.input);c=a.add({name:"autoadd_location",fieldLabel:_("Autoadd .torrent files from"),width:280});b.bind("autoadd_enable",c.toggle);b.bind("autoadd_location",c.input);a=this.add({xtype:"fieldset",border:false,title:_("Allocation"),autoHeight:true,labelWidth:1,defaultType:"radiogroup",style:"margin-bottom: 5px; margin-top: 0; padding-bottom: 5px; padding-top: 0;",width:240});b.bind("compact_allocation",a.add({name:"compact_allocation",width:200,labelSeparator:"",defaults:{width:80,height:22,name:"compact_allocation"},items:[{boxLabel:_("Use Full"),inputValue:false},{boxLabel:_("Use Compact"),inputValue:true}]}));a=this.add({xtype:"fieldset",border:false,title:_("Options"),autoHeight:true,labelWidth:1,defaultType:"checkbox",style:"margin-bottom: 0; padding-bottom: 0;",width:280});b.bind("prioritize_first_last_pieces",a.add({name:"prioritize_first_last_pieces",labelSeparator:"",height:22,boxLabel:_("Prioritize first and last pieces of torrent")}));b.bind("add_paused",a.add({name:"add_paused",labelSeparator:"",height:22,boxLabel:_("Add torrents in Paused state")}))}}); +/* + * Deluge.preferences.EncryptionPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Encryption=Ext.extend(Ext.form.FormPanel,{border:false,title:_("Encryption"),initComponent:function(){Deluge.preferences.Encryption.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Settings"),autoHeight:true,defaultType:"combo",width:300});b.bind("enc_in_policy",a.add({fieldLabel:_("Inbound"),mode:"local",width:150,store:new Ext.data.ArrayStore({fields:["id","text"],data:[[0,_("Forced")],[1,_("Enabled")],[2,_("Disabled")]]}),editable:false,triggerAction:"all",valueField:"id",displayField:"text"}));b.bind("enc_out_policy",a.add({fieldLabel:_("Outbound"),mode:"local",width:150,store:new Ext.data.SimpleStore({fields:["id","text"],data:[[0,_("Forced")],[1,_("Enabled")],[2,_("Disabled")]]}),editable:false,triggerAction:"all",valueField:"id",displayField:"text"}));b.bind("enc_level",a.add({fieldLabel:_("Level"),mode:"local",width:150,store:new Ext.data.SimpleStore({fields:["id","text"],data:[[0,_("Handshake")],[1,_("Full Stream")],[2,_("Either")]]}),editable:false,triggerAction:"all",valueField:"id",displayField:"text"}));b.bind("enc_prefer_rc4",a.add({xtype:"checkbox",name:"enc_prefer_rc4",height:40,hideLabel:true,boxLabel:_("Encrypt entire stream")}))}}); +/* + * Deluge.preferences.InstallPluginWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.InstallPluginWindow=Ext.extend(Ext.Window,{title:_("Install Plugin"),layout:"fit",height:115,width:350,bodyStyle:"padding: 10px 5px;",buttonAlign:"center",closeAction:"hide",iconCls:"x-deluge-install-plugin",modal:true,plain:true,initComponent:function(){Deluge.add.FileWindow.superclass.initComponent.call(this);this.addButton(_("Install"),this.onInstall,this);this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:70,autoHeight:true,fileUpload:true,items:[{xtype:"fileuploadfield",width:240,emptyText:_("Select an egg"),fieldLabel:_("Plugin Egg"),name:"file",buttonCfg:{text:_("Browse")+"..."}}]})},onInstall:function(b,a){this.form.getForm().submit({url:deluge.config.base+"upload",waitMsg:_("Uploading your plugin..."),success:this.onUploadSuccess,scope:this})},onUploadPlugin:function(d,c,a,b){this.fireEvent("pluginadded")},onUploadSuccess:function(c,b){this.hide();if(b.result.success){var a=this.form.getForm().getFieldValues().file;a=a.split("\\").slice(-1)[0];var d=b.result.files[0];this.form.getForm().setValues({file:""});deluge.client.web.upload_plugin(a,d,{success:this.onUploadPlugin,scope:this,filename:a})}}}); +/* + * Deluge.preferences.InterfacePage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Interface=Ext.extend(Ext.form.FormPanel,{border:false,title:_("Interface"),layout:"form",initComponent:function(){Deluge.preferences.Interface.superclass.initComponent.call(this);var c=this.optionsManager=new Deluge.OptionsManager();this.on("show",this.onPageShow,this);var a=this.add({xtype:"fieldset",border:false,title:_("Interface"),style:"margin-bottom: 0px; padding-bottom: 5px; padding-top: 5px",autoHeight:true,labelWidth:1,defaultType:"checkbox"});c.bind("show_session_speed",a.add({name:"show_session_speed",height:22,fieldLabel:"",labelSeparator:"",boxLabel:_("Show session speed in titlebar")}));c.bind("sidebar_show_zero",a.add({name:"sidebar_show_zero",height:22,fieldLabel:"",labelSeparator:"",boxLabel:_("Show filters with zero torrents")}));c.bind("sidebar_multiple_filters",a.add({name:"sidebar_multiple_filters",height:22,fieldLabel:"",labelSeparator:"",boxLabel:_("Allow the use of multiple filters at once")}));a=this.add({xtype:"fieldset",border:false,title:_("Password"),style:"margin-bottom: 0px; padding-bottom: 0px; padding-top: 5px",autoHeight:true,labelWidth:110,defaultType:"textfield",defaults:{width:180,inputType:"password"}});this.oldPassword=a.add({name:"old_password",fieldLabel:_("Old Password")});this.newPassword=a.add({name:"new_password",fieldLabel:_("New Password")});this.confirmPassword=a.add({name:"confirm_password",fieldLabel:_("Confirm Password")});var b=a.add({xtype:"panel",autoHeight:true,border:false,width:320,bodyStyle:"padding-left: 230px"});b.add({xtype:"button",text:_("Change"),listeners:{click:{fn:this.onPasswordChange,scope:this}}});a=this.add({xtype:"fieldset",border:false,title:_("Server"),style:"margin-top: 0px; padding-top: 0px; margin-bottom: 0px; padding-bottom: 0px",autoHeight:true,labelWidth:110,defaultType:"spinnerfield",defaults:{width:80}});c.bind("session_timeout",a.add({name:"session_timeout",fieldLabel:_("Session Timeout"),decimalPrecision:0,minValue:-1,maxValue:99999}));c.bind("port",a.add({name:"port",fieldLabel:_("Port"),decimalPrecision:0,minValue:-1,maxValue:99999}));this.httpsField=c.bind("https",a.add({xtype:"checkbox",name:"https",hideLabel:true,width:280,height:22,boxLabel:_("Use SSL (paths relative to Deluge config folder)")}));this.httpsField.on("check",this.onSSLCheck,this);this.pkeyField=c.bind("pkey",a.add({xtype:"textfield",disabled:true,name:"pkey",width:180,fieldLabel:_("Private Key")}));this.certField=c.bind("cert",a.add({xtype:"textfield",disabled:true,name:"cert",width:180,fieldLabel:_("Certificate")}))},onApply:function(){var b=this.optionsManager.getDirty();if(!Ext.isObjectEmpty(b)){deluge.client.web.set_config(b,{success:this.onSetConfig,scope:this});for(var a in deluge.config){deluge.config[a]=this.optionsManager.get(a)}}},onGotConfig:function(a){this.optionsManager.set(a)},onPasswordChange:function(){var b=this.newPassword.getValue();if(b!=this.confirmPassword.getValue()){Ext.MessageBox.show({title:_("Invalid Password"),msg:_("Your passwords don't match!"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});return}var a=this.oldPassword.getValue();deluge.client.auth.change_password(a,b,{success:function(c){if(!c){Ext.MessageBox.show({title:_("Password"),msg:_("Your old password was incorrect!"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.oldPassword.setValue("")}else{Ext.MessageBox.show({title:_("Change Successful"),msg:_("Your password was successfully changed!"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.INFO,iconCls:"x-deluge-icon-info"});this.oldPassword.setValue("");this.newPassword.setValue("");this.confirmPassword.setValue("")}},scope:this})},onSetConfig:function(){this.optionsManager.commit()},onPageShow:function(){deluge.client.web.get_config({success:this.onGotConfig,scope:this})},onSSLCheck:function(b,a){this.pkeyField.setDisabled(!a);this.certField.setDisabled(!a)}}); +/* + * Deluge.preferences.NetworkPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Network=Ext.extend(Ext.form.FormPanel,{border:false,layout:"form",title:_("Network"),initComponent:function(){Deluge.preferences.Network.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Incoming Ports"),style:"margin-bottom: 5px; padding-bottom: 0px;",autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("random_port",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Use Random Ports"),name:"random_port",height:22,listeners:{check:{fn:function(d,c){this.listenPorts.setDisabled(c)},scope:this}}}));this.listenPorts=a.add({xtype:"spinnergroup",name:"listen_ports",fieldLabel:"",labelSeparator:"",colCfg:{labelWidth:40,style:"margin-right: 10px;"},items:[{fieldLabel:"From",strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999}},{fieldLabel:"To",strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999}}]});b.bind("listen_ports",this.listenPorts);a=this.add({xtype:"fieldset",border:false,title:_("Outgoing Ports"),style:"margin-bottom: 5px; padding-bottom: 0px;",autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("random_outgoing_ports",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Use Random Ports"),name:"random_outgoing_ports",height:22,listeners:{check:{fn:function(d,c){this.outgoingPorts.setDisabled(c)},scope:this}}}));this.outgoingPorts=a.add({xtype:"spinnergroup",name:"outgoing_ports",fieldLabel:"",labelSeparator:"",colCfg:{labelWidth:40,style:"margin-right: 10px;"},items:[{fieldLabel:"From",strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999}},{fieldLabel:"To",strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:99999}}]});b.bind("outgoing_ports",this.outgoingPorts);a=this.add({xtype:"fieldset",border:false,title:_("Network Interface"),style:"margin-bottom: 5px; padding-bottom: 0px;",autoHeight:true,labelWidth:1,defaultType:"textfield"});b.bind("listen_interface",a.add({name:"listen_interface",fieldLabel:"",labelSeparator:"",width:200}));a=this.add({xtype:"fieldset",border:false,title:_("TOS"),style:"margin-bottom: 5px; padding-bottom: 0px;",bodyStyle:"margin: 0px; padding: 0px",autoHeight:true,defaultType:"textfield"});b.bind("peer_tos",a.add({name:"peer_tos",fieldLabel:_("Peer TOS Byte"),width:80}));a=this.add({xtype:"fieldset",border:false,title:_("Network Extras"),autoHeight:true,layout:"table",layoutConfig:{columns:3},defaultType:"checkbox"});b.bind("upnp",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("UPnP"),name:"upnp"}));b.bind("natpmp",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("NAT-PMP"),ctCls:"x-deluge-indent-checkbox",name:"natpmp"}));b.bind("utpex",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("Peer Exchange"),ctCls:"x-deluge-indent-checkbox",name:"utpex"}));b.bind("lsd",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("LSD"),name:"lsd"}));b.bind("dht",a.add({fieldLabel:"",labelSeparator:"",boxLabel:_("DHT"),ctCls:"x-deluge-indent-checkbox",name:"dht"}))}}); +/* + * Deluge.preferences.OtherPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Other=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Other"),layout:"form"},a);Deluge.preferences.Other.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Other.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("Updates"),autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("new_release_check",a.add({fieldLabel:"",labelSeparator:"",height:22,name:"new_release_check",boxLabel:_("Be alerted about new releases")}));a=this.add({xtype:"fieldset",border:false,title:_("System Information"),autoHeight:true,labelWidth:1,defaultType:"checkbox"});a.add({xtype:"panel",border:false,bodyCfg:{html:_("Help us improve Deluge by sending us your Python version, PyGTK version, OS and processor types. Absolutely no other information is sent.")}});b.bind("send_info",a.add({fieldLabel:"",labelSeparator:"",height:22,boxLabel:_("Yes, please send anonymous statistics"),name:"send_info"}));a=this.add({xtype:"fieldset",border:false,title:_("GeoIP Database"),autoHeight:true,labelWidth:80,defaultType:"textfield"});b.bind("geoip_db_location",a.add({name:"geoip_db_location",fieldLabel:_("Location"),width:200}))}}); +/* + * Deluge.preferences.PluginsPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Plugins=Ext.extend(Ext.Panel,{layout:"border",title:_("Plugins"),border:false,height:400,cls:"x-deluge-plugins",pluginTemplate:new Ext.Template('
Author:
{author}
Version:
{version}
Author Email:
{email}
Homepage:
{homepage}
Details:
{details}
'),initComponent:function(){Deluge.preferences.Plugins.superclass.initComponent.call(this);this.defaultValues={version:"",email:"",homepage:"",details:""};this.pluginTemplate.compile();var c=function(e,f,d){f.css+=" x-grid3-check-col-td";return'
'};this.list=this.add({xtype:"listview",store:new Ext.data.ArrayStore({fields:[{name:"enabled",mapping:0},{name:"plugin",mapping:1}]}),columns:[{id:"enabled",header:_("Enabled"),width:0.2,sortable:true,tpl:new Ext.XTemplate("{enabled:this.getCheckbox}",{getCheckbox:function(d){return'
'}}),dataIndex:"enabled"},{id:"plugin",header:_("Plugin"),width:0.8,sortable:true,dataIndex:"plugin"}],singleSelect:true,autoExpandColumn:"plugin",listeners:{selectionchange:{fn:this.onPluginSelect,scope:this}}});this.panel=this.add({region:"center",autoScroll:true,margins:"5 5 5 5",items:[this.list],bbar:new Ext.Toolbar({items:[{cls:"x-btn-text-icon",iconCls:"x-deluge-install-plugin",text:_("Install"),handler:this.onInstallPluginWindow,scope:this},"->",{cls:"x-btn-text-icon",text:_("Find More"),iconCls:"x-deluge-find-more",handler:this.onFindMorePlugins,scope:this}]})});var b=this.pluginInfo=this.add({xtype:"panel",border:true,height:160,region:"south",margins:"0 5 5 5"});var a=b.add({xtype:"fieldset",title:_("Info"),border:false,autoHeight:true,labelWidth:1,style:"margin-top: 5px;"});this.pluginInfo=a.add({xtype:"panel",border:false,bodyCfg:{style:"margin-left: 10px"}});this.pluginInfo.on("render",this.onPluginInfoRender,this);this.list.on("click",this.onNodeClick,this);deluge.preferences.on("show",this.onPreferencesShow,this);deluge.events.on("PluginDisabledEvent",this.onPluginDisabled,this);deluge.events.on("PluginEnabledEvent",this.onPluginEnabled,this)},disablePlugin:function(a){deluge.client.core.disable_plugin(a)},enablePlugin:function(a){deluge.client.core.enable_plugin(a)},setInfo:function(b){if(!this.pluginInfo.rendered){return}var a=b||this.defaultValues;this.pluginInfo.body.dom.innerHTML=this.pluginTemplate.apply(a)},updatePlugins:function(){deluge.client.web.get_plugins({success:this.onGotPlugins,scope:this})},updatePluginsGrid:function(){var a=[];Ext.each(this.availablePlugins,function(b){if(this.enabledPlugins.indexOf(b)>-1){a.push([true,b])}else{a.push([false,b])}},this);this.list.getStore().loadData(a)},onNodeClick:function(b,a,f,g){var c=new Ext.Element(g.target);if(c.getAttribute("rel")!="chkbox"){return}var d=b.getStore().getAt(a);d.set("enabled",!d.get("enabled"));d.commit();if(d.get("enabled")){this.enablePlugin(d.get("plugin"))}else{this.disablePlugin(d.get("plugin"))}},onFindMorePlugins:function(){window.open("http://dev.deluge-torrent.org/wiki/Plugins")},onGotPlugins:function(a){this.enabledPlugins=a.enabled_plugins;this.availablePlugins=a.available_plugins;this.setInfo();this.updatePluginsGrid()},onGotPluginInfo:function(b){var a={author:b.Author,version:b.Version,email:b["Author-email"],homepage:b["Home-page"],details:b.Description};this.setInfo(a);delete b},onInstallPluginWindow:function(){if(!this.installWindow){this.installWindow=new Deluge.preferences.InstallPluginWindow();this.installWindow.on("pluginadded",this.onPluginInstall,this)}this.installWindow.show()},onPluginEnabled:function(c){var a=this.list.getStore().find("plugin",c);if(a==-1){return}var b=this.list.getStore().getAt(a);b.set("enabled",true);b.commit()},onPluginDisabled:function(c){var a=this.list.getStore().find("plugin",c);if(a==-1){return}var b=this.list.getStore().getAt(a);b.set("enabled",false);b.commit()},onPluginInstall:function(){this.updatePlugins()},onPluginSelect:function(a,b){if(b.length==0){return}var c=a.getRecords(b)[0];deluge.client.web.get_plugin_info(c.get("plugin"),{success:this.onGotPluginInfo,scope:this})},onPreferencesShow:function(){this.updatePlugins()},onPluginInfoRender:function(b,a){this.setInfo()}}); +/* + * Deluge.preferences.PreferencesWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");PreferencesRecord=Ext.data.Record.create([{name:"name",type:"string"}]);Deluge.preferences.PreferencesWindow=Ext.extend(Ext.Window,{currentPage:null,title:_("Preferences"),layout:"border",width:485,height:500,buttonAlign:"right",closeAction:"hide",closable:true,iconCls:"x-deluge-preferences",plain:true,resizable:false,pages:{},initComponent:function(){Deluge.preferences.PreferencesWindow.superclass.initComponent.call(this);this.list=new Ext.list.ListView({store:new Ext.data.Store(),columns:[{id:"name",renderer:fplain,dataIndex:"name"}],singleSelect:true,listeners:{selectionchange:{fn:this.onPageSelect,scope:this}},hideHeaders:true,autoExpandColumn:"name",deferredRender:false,autoScroll:true,collapsible:true});this.add({region:"west",title:_("Categories"),items:[this.list],width:120,margins:"5 0 5 5",cmargins:"5 0 5 5"});this.configPanel=this.add({type:"container",autoDestroy:false,region:"center",layout:"card",layoutConfig:{deferredRender:true},autoScroll:true,width:300,margins:"5 5 5 5",cmargins:"5 5 5 5"});this.addButton(_("Close"),this.onClose,this);this.addButton(_("Apply"),this.onApply,this);this.addButton(_("Ok"),this.onOk,this);this.optionsManager=new Deluge.OptionsManager();this.on("afterrender",this.onAfterRender,this);this.on("show",this.onShow,this);this.initPages()},initPages:function(){deluge.preferences=this;this.addPage(new Deluge.preferences.Downloads());this.addPage(new Deluge.preferences.Network());this.addPage(new Deluge.preferences.Encryption());this.addPage(new Deluge.preferences.Bandwidth());this.addPage(new Deluge.preferences.Interface());this.addPage(new Deluge.preferences.Other());this.addPage(new Deluge.preferences.Daemon());this.addPage(new Deluge.preferences.Queue());this.addPage(new Deluge.preferences.Proxy());this.addPage(new Deluge.preferences.Cache());this.addPage(new Deluge.preferences.Plugins())},onApply:function(b){var c=this.optionsManager.getDirty();if(!Ext.isObjectEmpty(c)){deluge.client.core.set_config(c,{success:this.onSetConfig,scope:this})}for(var a in this.pages){if(this.pages[a].onApply){this.pages[a].onApply()}}},getOptionsManager:function(){return this.optionsManager},addPage:function(c){var a=this.list.getStore();var b=c.title;a.add([new PreferencesRecord({name:b})]);c.bodyStyle="padding: 5px";c.preferences=this;this.pages[b]=this.configPanel.add(c);this.pages[b].index=-1;return this.pages[b]},removePage:function(c){var b=c.title;var a=this.list.getStore();a.removeAt(a.find("name",b));this.configPanel.remove(c);delete this.pages[c.title]},selectPage:function(a){if(this.pages[a].index<0){this.pages[a].index=this.configPanel.items.indexOf(this.pages[a])}this.list.select(this.pages[a].index)},doSelectPage:function(a){if(this.pages[a].index<0){this.pages[a].index=this.configPanel.items.indexOf(this.pages[a])}this.configPanel.getLayout().setActiveItem(this.pages[a].index);this.currentPage=a},onGotConfig:function(a){this.getOptionsManager().set(a)},onPageSelect:function(c,a){var b=c.getRecord(a[0]);this.doSelectPage(b.get("name"))},onSetConfig:function(){this.getOptionsManager().commit()},onAfterRender:function(){if(!this.list.getSelectionCount()){this.list.select(0)}this.configPanel.getLayout().setActiveItem(0)},onShow:function(){if(!deluge.client.core){return}deluge.client.core.get_config({success:this.onGotConfig,scope:this})},onClose:function(){this.hide()},onOk:function(){var b=this.optionsManager.getDirty();if(!Ext.isObjectEmpty(b)){deluge.client.core.set_config(b,{success:this.onSetConfig,scope:this})}for(var a in this.pages){if(this.pages[a].onOk){this.pages[a].onOk()}}this.hide()}}); +/* + * Deluge.preferences.ProxyField.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge.preferences");Deluge.preferences.ProxyField=Ext.extend(Ext.form.FieldSet,{border:false,autoHeight:true,labelWidth:70,initComponent:function(){Deluge.preferences.ProxyField.superclass.initComponent.call(this);this.proxyType=this.add({xtype:"combo",fieldLabel:_("Type"),name:"proxytype",mode:"local",width:150,store:new Ext.data.ArrayStore({fields:["id","text"],data:[[0,_("None")],[1,_("Socksv4")],[2,_("Socksv5")],[3,_("Socksv5 with Auth")],[4,_("HTTP")],[5,_("HTTP with Auth")]]}),editable:false,triggerAction:"all",valueField:"id",displayField:"text"});this.proxyType.on("change",this.onFieldChange,this);this.proxyType.on("select",this.onTypeSelect,this);this.hostname=this.add({xtype:"textfield",name:"hostname",fieldLabel:_("Host"),width:220});this.hostname.on("change",this.onFieldChange,this);this.port=this.add({xtype:"spinnerfield",name:"port",fieldLabel:_("Port"),width:80,decimalPrecision:0,minValue:-1,maxValue:99999});this.port.on("change",this.onFieldChange,this);this.username=this.add({xtype:"textfield",name:"username",fieldLabel:_("Username"),width:220});this.username.on("change",this.onFieldChange,this);this.password=this.add({xtype:"textfield",name:"password",fieldLabel:_("Password"),inputType:"password",width:220});this.password.on("change",this.onFieldChange,this);this.setting=false},getName:function(){return this.initialConfig.name},getValue:function(){return{type:this.proxyType.getValue(),hostname:this.hostname.getValue(),port:Number(this.port.getValue()),username:this.username.getValue(),password:this.password.getValue()}},setValue:function(c){this.setting=true;this.proxyType.setValue(c.type);var b=this.proxyType.getStore().find("id",c.type);var a=this.proxyType.getStore().getAt(b);this.hostname.setValue(c.hostname);this.port.setValue(c.port);this.username.setValue(c.username);this.password.setValue(c.password);this.onTypeSelect(this.type,a,b);this.setting=false},onFieldChange:function(e,d,c){if(this.setting){return}var b=this.getValue();var a=Ext.apply({},b);a[e.getName()]=c;this.fireEvent("change",this,b,a)},onTypeSelect:function(d,a,b){var c=a.get("id");if(c>0){this.hostname.show();this.port.show()}else{this.hostname.hide();this.port.hide()}if(c==3||c==5){this.username.show();this.password.show()}else{this.username.hide();this.password.hide()}}}); +/* + * Deluge.preferences.ProxyPage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Proxy=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Proxy"),layout:"form",autoScroll:true},a);Deluge.preferences.Proxy.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Proxy.superclass.initComponent.call(this);this.peer=this.add(new Deluge.preferences.ProxyField({title:_("Peer"),name:"peer"}));this.peer.on("change",this.onProxyChange,this);this.web_seed=this.add(new Deluge.preferences.ProxyField({title:_("Web Seed"),name:"web_seed"}));this.web_seed.on("change",this.onProxyChange,this);this.tracker=this.add(new Deluge.preferences.ProxyField({title:_("Tracker"),name:"tracker"}));this.tracker.on("change",this.onProxyChange,this);this.dht=this.add(new Deluge.preferences.ProxyField({title:_("DHT"),name:"dht"}));this.dht.on("change",this.onProxyChange,this);deluge.preferences.getOptionsManager().bind("proxies",this)},getValue:function(){return{dht:this.dht.getValue(),peer:this.peer.getValue(),tracker:this.tracker.getValue(),web_seed:this.web_seed.getValue()}},setValue:function(b){for(var a in b){this[a].setValue(b[a])}},onProxyChange:function(e,d,c){var b=this.getValue();var a=Ext.apply({},b);a[e.getName()]=c;this.fireEvent("change",this,b,a)}}); +/* + * Deluge.preferences.QueuePage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge.preferences");Deluge.preferences.Queue=Ext.extend(Ext.form.FormPanel,{border:false,title:_("Queue"),layout:"form",initComponent:function(){Deluge.preferences.Queue.superclass.initComponent.call(this);var b=deluge.preferences.getOptionsManager();var a=this.add({xtype:"fieldset",border:false,title:_("General"),style:"padding-top: 5px;",autoHeight:true,labelWidth:1,defaultType:"checkbox"});b.bind("queue_new_to_top",a.add({fieldLabel:"",labelSeparator:"",height:22,boxLabel:_("Queue new torrents to top"),name:"queue_new_to_top"}));a=this.add({xtype:"fieldset",border:false,title:_("Active Torrents"),autoHeight:true,labelWidth:150,defaultType:"spinnerfield",style:"margin-bottom: 0px; padding-bottom: 0px;"});b.bind("max_active_limit",a.add({fieldLabel:_("Total Active"),name:"max_active_limit",value:8,width:80,decimalPrecision:0,minValue:-1,maxValue:99999}));b.bind("max_active_downloading",a.add({fieldLabel:_("Total Active Downloading"),name:"max_active_downloading",value:3,width:80,decimalPrecision:0,minValue:-1,maxValue:99999}));b.bind("max_active_seeding",a.add({fieldLabel:_("Total Active Seeding"),name:"max_active_seeding",value:5,width:80,decimalPrecision:0,minValue:-1,maxValue:99999}));b.bind("dont_count_slow_torrents",a.add({xtype:"checkbox",name:"dont_count_slow_torrents",height:40,hideLabel:true,boxLabel:_("Do not count slow torrents")}));a=this.add({xtype:"fieldset",border:false,title:_("Seeding"),autoHeight:true,labelWidth:150,defaultType:"spinnerfield",style:"margin-bottom: 0px; padding-bottom: 0px; margin-top: 0; padding-top: 0;"});b.bind("share_ratio_limit",a.add({fieldLabel:_("Share Ratio Limit"),name:"share_ratio_limit",value:8,width:80,incrementValue:0.1,minValue:-1,maxValue:99999,alternateIncrementValue:1,decimalPrecision:2}));b.bind("seed_time_ratio_limit",a.add({fieldLabel:_("Share Time Ratio"),name:"seed_time_ratio_limit",value:3,width:80,incrementValue:0.1,minValue:-1,maxValue:99999,alternateIncrementValue:1,decimalPrecision:2}));b.bind("seed_time_limit",a.add({fieldLabel:_("Seed Time (m)"),name:"seed_time_limit",value:5,width:80,decimalPrecision:0,minValue:-1,maxValue:99999}));a=this.add({xtype:"fieldset",border:false,autoHeight:true,layout:"table",layoutConfig:{columns:2},labelWidth:0,defaultType:"checkbox",defaults:{fieldLabel:"",labelSeparator:""}});this.stopAtRatio=a.add({name:"stop_seed_at_ratio",boxLabel:_("Stop seeding when share ratio reaches:")});this.stopAtRatio.on("check",this.onStopRatioCheck,this);b.bind("stop_seed_at_ratio",this.stopAtRatio);this.stopRatio=a.add({xtype:"spinnerfield",name:"stop_seed_ratio",ctCls:"x-deluge-indent-checkbox",disabled:true,value:"2.0",width:60,incrementValue:0.1,minValue:-1,maxValue:99999,alternateIncrementValue:1,decimalPrecision:2});b.bind("stop_seed_ratio",this.stopRatio);this.removeAtRatio=a.add({name:"remove_seed_at_ratio",ctCls:"x-deluge-indent-checkbox",boxLabel:_("Remove torrent when share ratio is reached"),disabled:true,colspan:2});b.bind("remove_seed_at_ratio",this.removeAtRatio)},onStopRatioCheck:function(b,a){this.stopRatio.setDisabled(!a);this.removeAtRatio.setDisabled(!a)}}); +/* + * Deluge.StatusbarMenu.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.StatusbarMenu=Ext.extend(Ext.menu.Menu,{initComponent:function(){Deluge.StatusbarMenu.superclass.initComponent.call(this);this.otherWin=new Deluge.OtherLimitWindow(this.initialConfig.otherWin||{});this.items.each(function(a){if(a.getXType()!="menucheckitem"){return}if(a.value=="other"){a.on("click",this.onOtherClicked,this)}else{a.on("checkchange",this.onLimitChanged,this)}},this)},setValue:function(b){var c=false;this.value=b=(b==0)?-1:b;var a=null;this.items.each(function(d){if(d.setChecked){d.suspendEvents();if(d.value==b){d.setChecked(true);c=true}else{d.setChecked(false)}d.resumeEvents()}if(d.value=="other"){a=d}});if(c){return}a.suspendEvents();a.setChecked(true);a.resumeEvents()},onLimitChanged:function(c,b){if(!b||c.value=="other"){return}var a={};a[c.group]=c.value;deluge.client.core.set_config(a,{success:function(){deluge.ui.update()}})},onOtherClicked:function(a,b){this.otherWin.group=a.group;this.otherWin.setValue(this.value);this.otherWin.show()}}); +/* + * Deluge.OptionsManager.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge");Deluge.OptionsManager=Ext.extend(Ext.util.Observable,{constructor:function(a){a=a||{};this.binds={};this.changed={};this.options=(a&&a.options)||{};this.focused=null;this.addEvents({add:true,changed:true,reset:true});this.on("changed",this.onChange,this);Deluge.OptionsManager.superclass.constructor.call(this)},addOptions:function(a){this.options=Ext.applyIf(this.options,a)},bind:function(a,b){this.binds[a]=this.binds[a]||[];this.binds[a].push(b);b._doption=a;b.on("focus",this.onFieldFocus,this);b.on("blur",this.onFieldBlur,this);b.on("change",this.onFieldChange,this);b.on("check",this.onFieldChange,this);b.on("spin",this.onFieldChange,this);return b},commit:function(){this.options=Ext.apply(this.options,this.changed);this.reset()},convertValueType:function(a,b){if(Ext.type(a)!=Ext.type(b)){switch(Ext.type(a)){case"string":b=String(b);break;case"number":b=Number(b);break;case"boolean":if(Ext.type(b)=="string"){b=b.toLowerCase();b=(b=="true"||b=="1"||b=="on")?true:false}else{b=Boolean(b)}break}}return b},get:function(){if(arguments.length==1){var b=arguments[0];return(this.isDirty(b))?this.changed[b]:this.options[b]}else{var a={};Ext.each(arguments,function(c){if(!this.has(c)){return}a[c]=(this.isDirty(c))?this.changed[c]:this.options[c]},this);return a}},getDefault:function(a){return this.options[a]},getDirty:function(){return this.changed},isDirty:function(a){return !Ext.isEmpty(this.changed[a])},has:function(a){return(this.options[a])},reset:function(){this.changed={}},set:function(b,c){if(b===undefined){return}else{if(typeof b=="object"){var a=b;this.options=Ext.apply(this.options,a);for(var b in a){this.onChange(b,a[b])}}else{this.options[b]=c;this.onChange(b,c)}}},update:function(d,e){if(d===undefined){return}else{if(e===undefined){for(var c in d){this.update(c,d[c])}}else{var a=this.getDefault(d);e=this.convertValueType(a,e);var b=this.get(d);if(b==e){return}if(a==e){if(this.isDirty(d)){delete this.changed[d]}this.fireEvent("changed",d,e,b);return}this.changed[d]=e;this.fireEvent("changed",d,e,b)}}},onFieldBlur:function(b,a){if(this.focused==b){this.focused=null}},onFieldChange:function(b,a){if(b.field){b=b.field}this.update(b._doption,b.getValue())},onFieldFocus:function(b,a){this.focused=b},onChange:function(b,c,a){if(Ext.isEmpty(this.binds[b])){return}Ext.each(this.binds[b],function(d){if(d==this.focused){return}d.setValue(c)},this)}}); +/* + * Deluge.AddConnectionWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.AddConnectionWindow=Ext.extend(Ext.Window,{title:_("Add Connection"),iconCls:"x-deluge-add-window-icon",layout:"fit",width:300,height:195,bodyStyle:"padding: 10px 5px;",closeAction:"hide",initComponent:function(){Deluge.AddConnectionWindow.superclass.initComponent.call(this);this.addEvents("hostadded");this.addButton(_("Close"),this.hide,this);this.addButton(_("Add"),this.onAddClick,this);this.on("hide",this.onHide,this);this.form=this.add({xtype:"form",defaultType:"textfield",baseCls:"x-plain",labelWidth:60,items:[{fieldLabel:_("Host"),name:"host",anchor:"75%",value:""},{xtype:"spinnerfield",fieldLabel:_("Port"),name:"port",strategy:{xtype:"number",decimalPrecision:0,minValue:-1,maxValue:65535},value:"58846",anchor:"40%"},{fieldLabel:_("Username"),name:"username",anchor:"75%",value:""},{fieldLabel:_("Password"),anchor:"75%",name:"password",inputType:"password",value:""}]})},onAddClick:function(){var a=this.form.getForm().getValues();deluge.client.web.add_host(a.host,a.port,a.username,a.password,{success:function(b){if(!b[0]){Ext.MessageBox.show({title:_("Error"),msg:"Unable to add host: "+b[1],buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"})}else{this.fireEvent("hostadded")}this.hide()},scope:this})},onHide:function(){this.form.getForm().reset()}}); +/* + * Deluge.AddTrackerWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");var trackerUrlTest=/(((^https?)|(^udp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;Ext.apply(Ext.form.VTypes,{trackerUrl:function(b,a){return trackerUrlTest.test(b)},trackerUrlText:"Not a valid tracker url"});Deluge.AddTrackerWindow=Ext.extend(Ext.Window,{title:_("Add Tracker"),layout:"fit",width:375,height:150,plain:true,closable:true,resizable:false,bodyStyle:"padding: 5px",buttonAlign:"right",closeAction:"hide",iconCls:"x-deluge-edit-trackers",initComponent:function(){Deluge.AddTrackerWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Add"),this.onAddClick,this);this.addEvents("add");this.form=this.add({xtype:"form",defaultType:"textarea",baseCls:"x-plain",labelWidth:55,items:[{fieldLabel:_("Trackers"),name:"trackers",anchor:"100%"}]})},onAddClick:function(){var b=this.form.getForm().findField("trackers").getValue();b=b.split("\n");var a=[];Ext.each(b,function(c){if(Ext.form.VTypes.trackerUrl(c)){a.push(c)}},this);this.fireEvent("add",a);this.hide();this.form.getForm().findField("trackers").setValue("")},onCancelClick:function(){this.form.getForm().findField("trackers").setValue("");this.hide()}}); +/* + * Deluge.Client.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Ext.ux.util");Ext.ux.util.RpcClient=Ext.extend(Ext.util.Observable,{_components:[],_methods:[],_requests:{},_url:null,_optionKeys:["scope","success","failure"],constructor:function(a){Ext.ux.util.RpcClient.superclass.constructor.call(this,a);this._url=a.url||null;this._id=0;this.addEvents("connected","error");this.reloadMethods()},reloadMethods:function(){this._execute("system.listMethods",{success:this._setMethods,scope:this})},_execute:function(c,a){a=a||{};a.params=a.params||[];a.id=this._id;var b=Ext.encode({method:c,params:a.params,id:a.id});this._id++;return Ext.Ajax.request({url:this._url,method:"POST",success:this._onSuccess,failure:this._onFailure,scope:this,jsonData:b,options:a})},_onFailure:function(b,a){var c=a.options;errorObj={id:c.id,result:null,error:{msg:"HTTP: "+b.status+" "+b.statusText,code:255}};this.fireEvent("error",errorObj,b,a);if(Ext.type(c.failure)!="function"){return}if(c.scope){c.failure.call(c.scope,errorObj,b,a)}else{c.failure(errorObj,b,a)}},_onSuccess:function(c,a){var b=Ext.decode(c.responseText);var d=a.options;if(b.error){this.fireEvent("error",b,c,a);if(Ext.type(d.failure)!="function"){return}if(d.scope){d.failure.call(d.scope,b,c,a)}else{d.failure(b,c,a)}}else{if(Ext.type(d.success)!="function"){return}if(d.scope){d.success.call(d.scope,b.result,b,c,a)}else{d.success(b.result,b,c,a)}}},_parseArgs:function(c){var e=[];Ext.each(c,function(f){e.push(f)});var b=e[e.length-1];if(Ext.type(b)=="object"){var d=Ext.keys(b),a=false;Ext.each(this._optionKeys,function(f){if(d.indexOf(f)>-1){a=true}});if(a){e.remove(b)}else{b={}}}else{b={}}b.params=e;return b},_setMethods:function(b){var d={},a=this;Ext.each(b,function(h){var g=h.split(".");var e=d[g[0]]||{};var f=function(){var i=a._parseArgs(arguments);return a._execute(h,i)};e[g[1]]=f;d[g[0]]=e});for(var c in d){a[c]=d[c]}Ext.each(this._components,function(e){if(!e in d){delete this[e]}},this);this._components=Ext.keys(d);this.fireEvent("connected",this)}}); +/* + * Deluge.ConnectionManager.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.ConnectionManager=Ext.extend(Ext.Window,{layout:"fit",width:300,height:220,bodyStyle:"padding: 10px 5px;",buttonAlign:"right",closeAction:"hide",closable:true,plain:true,title:_("Connection Manager"),iconCls:"x-deluge-connect-window-icon",initComponent:function(){Deluge.ConnectionManager.superclass.initComponent.call(this);this.on("hide",this.onHide,this);this.on("show",this.onShow,this);deluge.events.on("login",this.onLogin,this);deluge.events.on("logout",this.onLogout,this);this.addButton(_("Close"),this.onClose,this);this.addButton(_("Connect"),this.onConnect,this);this.list=new Ext.list.ListView({store:new Ext.data.ArrayStore({fields:[{name:"status",mapping:3},{name:"host",mapping:1},{name:"port",mapping:2},{name:"version",mapping:4}],id:0}),columns:[{header:_("Status"),width:0.24,sortable:true,tpl:new Ext.XTemplate("",_("Online"),"","",_("Offline"),"","",_("Connected"),""),dataIndex:"status"},{id:"host",header:_("Host"),width:0.51,sortable:true,tpl:"{host}:{port}",dataIndex:"host"},{header:_("Version"),width:0.25,sortable:true,tpl:'{version}',dataIndex:"version"}],singleSelect:true,listeners:{selectionchange:{fn:this.onSelectionChanged,scope:this}}});this.panel=this.add({autoScroll:true,items:[this.list],bbar:new Ext.Toolbar({buttons:[{id:"cm-add",cls:"x-btn-text-icon",text:_("Add"),iconCls:"icon-add",handler:this.onAddClick,scope:this},{id:"cm-remove",cls:"x-btn-text-icon",text:_("Remove"),iconCls:"icon-remove",handler:this.onRemoveClick,disabled:true,scope:this},"->",{id:"cm-stop",cls:"x-btn-text-icon",text:_("Stop Daemon"),iconCls:"icon-error",handler:this.onStopClick,disabled:true,scope:this}]})});this.update=this.update.createDelegate(this)},checkConnected:function(){deluge.client.web.connected({success:function(a){if(a){deluge.events.fire("connect")}else{this.show()}},scope:this})},disconnect:function(a){deluge.events.fire("disconnect");if(a){if(this.isVisible()){return}this.show()}},loadHosts:function(){deluge.client.web.get_hosts({success:this.onGetHosts,scope:this})},update:function(){this.list.getStore().each(function(a){deluge.client.web.get_host_status(a.id,{success:this.onGetHostStatus,scope:this})},this)},updateButtons:function(b){var c=this.buttons[1],a=b.get("status");if(a=="Connected"){c.enable();c.setText(_("Disconnect"))}else{if(a=="Offline"){c.disable()}else{c.enable();c.setText(_("Connect"))}}if(a=="Offline"){if(b.get("host")=="127.0.0.1"||b.get("host")=="localhost"){this.stopHostButton.enable();this.stopHostButton.setText(_("Start Daemon"))}else{this.stopHostButton.disable()}}else{this.stopHostButton.enable();this.stopHostButton.setText(_("Stop Daemon"))}},onAddClick:function(a,b){if(!this.addWindow){this.addWindow=new Deluge.AddConnectionWindow();this.addWindow.on("hostadded",this.onHostAdded,this)}this.addWindow.show()},onHostAdded:function(){this.loadHosts()},onClose:function(a){this.hide()},onConnect:function(b){var a=this.list.getSelectedRecords()[0];if(!a){return}if(a.get("status")=="Connected"){deluge.client.web.disconnect({success:function(d){this.update(this);deluge.events.fire("disconnect")},scope:this})}else{var c=a.id;deluge.client.web.connect(c,{success:function(d){deluge.client.reloadMethods();deluge.client.on("connected",function(f){deluge.events.fire("connect")},this,{single:true})}});this.hide()}},onGetHosts:function(a){this.list.getStore().loadData(a);Ext.each(a,function(b){deluge.client.web.get_host_status(b[0],{success:this.onGetHostStatus,scope:this})},this)},onGetHostStatus:function(b){var a=this.list.getStore().getById(b[0]);a.set("status",b[3]);a.set("version",b[4]);a.commit();if(this.list.getSelectedRecords()[0]==a){this.updateButtons(a)}},onHide:function(){if(this.running){window.clearInterval(this.running)}},onLogin:function(){if(deluge.config.first_login){Ext.MessageBox.confirm(_("Change Default Password"),_("We recommend changing the default password.

Would you like to change it now?"),function(a){this.checkConnected();if(a=="yes"){deluge.preferences.show();deluge.preferences.selectPage("Interface")}deluge.client.web.set_config({first_login:false})},this)}else{this.checkConnected()}},onLogout:function(){this.disconnect();if(!this.hidden&&this.rendered){this.hide()}},onRemoveClick:function(b){var a=this.list.getSelectedRecords()[0];if(!a){return}deluge.client.web.remove_host(a.id,{success:function(c){if(!c){Ext.MessageBox.show({title:_("Error"),msg:c[1],buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"})}else{this.list.getStore().remove(a)}},scope:this})},onSelectionChanged:function(b,a){if(a[0]){this.removeHostButton.enable();this.stopHostButton.enable();this.stopHostButton.setText(_("Stop Daemon"));this.updateButtons(this.list.getRecord(a[0]))}else{this.removeHostButton.disable();this.stopHostButton.disable()}},onShow:function(){if(!this.addHostButton){var a=this.panel.getBottomToolbar();this.addHostButton=a.items.get("cm-add");this.removeHostButton=a.items.get("cm-remove");this.stopHostButton=a.items.get("cm-stop")}this.loadHosts();if(this.running){return}this.running=window.setInterval(this.update,2000,this)},onStopClick:function(b,c){var a=this.list.getSelectedRecords()[0];if(!a){return}if(a.get("status")=="Offline"){deluge.client.web.start_daemon(a.get("port"))}else{deluge.client.web.stop_daemon(a.id,{success:function(d){if(!d[0]){Ext.MessageBox.show({title:_("Error"),msg:d[1],buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"})}}})}}}); +/* + * Deluge.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.state.Manager.setProvider(new Ext.state.CookieProvider({expires:new Date(new Date().getTime()+(1000*60*60*24*365*10))}));Ext.apply(Ext,{escapeHTML:function(a){a=String(a).replace("<","<").replace(">",">");return a.replace("&","&")},isObjectEmpty:function(b){for(var a in b){return false}return true},areObjectsEqual:function(d,c){var b=true;if(!d||!c){return false}for(var a in d){if(d[a]!=c[a]){b=false}}return b},keys:function(c){var b=[];for(var a in c){if(c.hasOwnProperty(a)){b.push(a)}}return b},values:function(c){var a=[];for(var b in c){if(c.hasOwnProperty(b)){a.push(c[b])}}return a},splat:function(b){var a=Ext.type(b);return(a)?((a!="array")?[b]:b):[]}});Ext.getKeys=Ext.keys;Ext.BLANK_IMAGE_URL=deluge.config.base+"images/s.gif";Ext.USE_NATIVE_JSON=true;Ext.apply(Deluge,{pluginStore:{},progressTpl:'
{0}
{0}
',progressBar:function(c,e,g,a){a=Ext.value(a,10);var b=((e/100)*c).toFixed(0);var d=b-1;var f=((b-a)>0?b-a:0);return String.format(Deluge.progressTpl,g,e,d,f)},createPlugin:function(a){return new Deluge.pluginStore[a]()},hasPlugin:function(a){return(Deluge.pluginStore[a])?true:false},registerPlugin:function(a,b){Deluge.pluginStore[a]=b}});deluge.plugins={};FILE_PRIORITY={9:"Mixed",0:"Do Not Download",1:"Normal Priority",2:"High Priority",5:"High Priority",7:"Highest Priority",Mixed:9,"Do Not Download":0,"Normal Priority":1,"High Priority":5,"Highest Priority":7};FILE_PRIORITY_CSS={9:"x-mixed-download",0:"x-no-download",1:"x-normal-download",2:"x-high-download",5:"x-high-download",7:"x-highest-download"} +/* + * Deluge.EditTrackerWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +;Ext.ns("Deluge");Deluge.EditTrackerWindow=Ext.extend(Ext.Window,{title:_("Edit Tracker"),layout:"fit",width:375,height:110,plain:true,closable:true,resizable:false,bodyStyle:"padding: 5px",buttonAlign:"right",closeAction:"hide",iconCls:"x-deluge-edit-trackers",initComponent:function(){Deluge.EditTrackerWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Save"),this.onSaveClick,this);this.on("hide",this.onHide,this);this.form=this.add({xtype:"form",defaultType:"textfield",baseCls:"x-plain",labelWidth:55,items:[{fieldLabel:_("Tracker"),name:"tracker",anchor:"100%"}]})},show:function(a){Deluge.EditTrackerWindow.superclass.show.call(this);this.record=a;this.form.getForm().findField("tracker").setValue(a.data.url)},onCancelClick:function(){this.hide()},onHide:function(){this.form.getForm().findField("tracker").setValue("")},onSaveClick:function(){var a=this.form.getForm().findField("tracker").getValue();this.record.set("url",a);this.record.commit();this.hide()}}); +/* + * Deluge.EditTrackers.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.EditTrackersWindow=Ext.extend(Ext.Window,{title:_("Edit Trackers"),layout:"fit",width:350,height:220,plain:true,closable:true,resizable:true,bodyStyle:"padding: 5px",buttonAlign:"right",closeAction:"hide",iconCls:"x-deluge-edit-trackers",initComponent:function(){Deluge.EditTrackersWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Ok"),this.onOkClick,this);this.addEvents("save");this.on("show",this.onShow,this);this.on("save",this.onSave,this);this.addWindow=new Deluge.AddTrackerWindow();this.addWindow.on("add",this.onAddTrackers,this);this.editWindow=new Deluge.EditTrackerWindow();this.list=new Ext.list.ListView({store:new Ext.data.JsonStore({root:"trackers",fields:["tier","url"]}),columns:[{header:_("Tier"),width:0.1,dataIndex:"tier"},{header:_("Tracker"),width:0.9,dataIndex:"url"}],columnSort:{sortClasses:["",""]},stripeRows:true,singleSelect:true,listeners:{dblclick:{fn:this.onListNodeDblClicked,scope:this},selectionchange:{fn:this.onSelect,scope:this}}});this.panel=this.add({margins:"0 0 0 0",items:[this.list],autoScroll:true,bbar:new Ext.Toolbar({items:[{text:_("Up"),iconCls:"icon-up",handler:this.onUpClick,scope:this},{text:_("Down"),iconCls:"icon-down",handler:this.onDownClick,scope:this},"->",{text:_("Add"),iconCls:"icon-add",handler:this.onAddClick,scope:this},{text:_("Edit"),iconCls:"icon-edit-trackers",handler:this.onEditClick,scope:this},{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemoveClick,scope:this}]})})},onAddClick:function(){this.addWindow.show()},onAddTrackers:function(b){var a=this.list.getStore();Ext.each(b,function(d){var e=false,c=-1;a.each(function(f){if(f.get("tier")>c){c=f.get("tier")}if(d==f.get("tracker")){e=true;return false}},this);if(e){return}a.add(new a.recordType({tier:c+1,url:d}))},this)},onCancelClick:function(){this.hide()},onEditClick:function(){this.editWindow.show(this.list.getSelectedRecords()[0])},onHide:function(){this.list.getStore().removeAll()},onListNodeDblClicked:function(c,a,b,d){this.editWindow.show(this.list.getRecord(b))},onOkClick:function(){var a=[];this.list.getStore().each(function(b){a.push({tier:b.get("tier"),url:b.get("url")})},this);deluge.client.core.set_torrent_trackers(this.torrentId,a,{failure:this.onSaveFail,scope:this});this.hide()},onRemoveClick:function(){this.list.getStore().remove(this.list.getSelectedRecords()[0])},onRequestComplete:function(a){this.list.getStore().loadData(a);this.list.getStore().sort("tier","ASC")},onSaveFail:function(){},onSelect:function(a){if(a.getSelectionCount()){this.panel.getBottomToolbar().items.get(4).enable()}},onShow:function(){this.panel.getBottomToolbar().items.get(4).disable();var a=deluge.torrents.getSelected();this.torrentId=a.id;deluge.client.core.get_torrent_status(a.id,["trackers"],{success:this.onRequestComplete,scope:this})},onDownClick:function(){var a=this.list.getSelectedRecords()[0];if(!a){return}a.set("tier",a.get("tier")+1);a.store.sort("tier","ASC");a.store.commitChanges();this.list.select(a.store.indexOf(a))},onUpClick:function(){var a=this.list.getSelectedRecords()[0];if(!a){return}if(a.get("tier")==0){return}a.set("tier",a.get("tier")-1);a.store.sort("tier","ASC");a.store.commitChanges();this.list.select(a.store.indexOf(a))}}); +/* + * Deluge.EventsManager.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.EventsManager=Ext.extend(Ext.util.Observable,{constructor:function(){this.toRegister=[];this.on("login",this.onLogin,this);Deluge.EventsManager.superclass.constructor.call(this)},addListener:function(a,c,b,d){this.addEvents(a);if(/[A-Z]/.test(a.substring(0,1))){if(!deluge.client){this.toRegister.push(a)}else{deluge.client.web.register_event_listener(a)}}Deluge.EventsManager.superclass.addListener.call(this,a,c,b,d)},getEvents:function(){deluge.client.web.get_events({success:this.onGetEventsSuccess,failure:this.onGetEventsFailure,scope:this})},start:function(){Ext.each(this.toRegister,function(a){deluge.client.web.register_event_listener(a)});this.running=true;this.errorCount=0;this.getEvents()},stop:function(){this.running=false},onLogin:function(){this.start()},onGetEventsSuccess:function(a){if(!this.running){return}if(a){Ext.each(a,function(d){var c=d[0],b=d[1];b.splice(0,0,c);this.fireEvent.apply(this,b)},this)}this.getEvents()},onGetEventsFailure:function(a,b){if(!this.running){return}if(!b.isTimeout&&this.errorCount++>=3){this.stop();return}this.getEvents()}});Deluge.EventsManager.prototype.on=Deluge.EventsManager.prototype.addListener;Deluge.EventsManager.prototype.fire=Deluge.EventsManager.prototype.fireEvent;deluge.events=new Deluge.EventsManager(); +/* + * Deluge.FileBrowser.js + * + * Copyright (c) Damien Churchill 2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge");Deluge.FileBrowser=Ext.extend(Ext.Window,{title:_("File Browser"),width:500,height:400,initComponent:function(){Deluge.FileBrowser.superclass.initComponent.call(this);this.add({xtype:"toolbar",items:[{text:_("Back"),iconCls:"icon-back"},{text:_("Forward"),iconCls:"icon-forward"},{text:_("Up"),iconCls:"icon-up"},{text:_("Home"),iconCls:"icon-home"}]})}}); +/* + * Deluge.FilterPanel.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.FilterPanel=Ext.extend(Ext.Panel,{autoScroll:true,border:false,show_zero:null,initComponent:function(){Deluge.FilterPanel.superclass.initComponent.call(this);this.filterType=this.initialConfig.filter;var c=this.filterType.replace("_"," "),b=c.split(" "),c="";Ext.each(b,function(d){fl=d.substring(0,1).toUpperCase();c+=fl+d.substring(1)+" "});this.setTitle(_(c));if(Deluge.FilterPanel.templates[this.filterType]){var a=Deluge.FilterPanel.templates[this.filterType]}else{var a='
{filter} ({count})
'}this.list=this.add({xtype:"listview",singleSelect:true,hideHeaders:true,reserveScrollOffset:true,store:new Ext.data.ArrayStore({idIndex:0,fields:["filter","count"]}),columns:[{id:"filter",sortable:false,tpl:a,dataIndex:"filter"}]});this.relayEvents(this.list,["selectionchange"])},getState:function(){if(!this.list.getSelectionCount()){return}var a=this.list.getSelectedRecords()[0];if(a.id=="All"){return}return a.id},getStates:function(){return this.states},getStore:function(){return this.list.getStore()},updateStates:function(b){this.states={};Ext.each(b,function(f){this.states[f[0]]=f[1]},this);var e=(this.show_zero==null)?deluge.config.sidebar_show_zero:this.show_zero;if(!e){var c=[];Ext.each(b,function(f){if(f[1]>0||f[0]==_("All")){c.push(f)}});b=c}var a=this.getStore();var d={};Ext.each(b,function(h,g){var f=a.getById(h[0]);if(!f){f=new a.recordType({filter:h[0],count:h[1]});f.id=h[0];a.insert(g,f)}f.beginEdit();f.set("filter",h[0]);f.set("count",h[1]);f.endEdit();d[h[0]]=true},this);a.each(function(f){if(d[f.id]){return}var g=this.list.getSelectedRecords()[0];a.remove(f);if(g.id==f.id){this.list.select(0)}},this);a.commitChanges();if(!this.list.getSelectionCount()){this.list.select(0)}}});Deluge.FilterPanel.templates={tracker_host:'
{filter} ({count})
'} +/* + * Deluge.Formatters.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +;Deluge.Formatters={date:function(c){function b(d,e){var f=d+"";while(f.length0){return b+"m "+d+"s"}else{return b+"m"}}else{c=c/60}if(c<24){var a=Math.floor(c);var b=Math.round(60*(c-a));if(b>0){return a+"h "+b+"m"}else{return a+"h"}}else{c=c/24}var e=Math.floor(c);var a=Math.round(24*(c-e));if(a>0){return e+"d "+a+"h"}else{return e+"d"}},plain:function(a){return a},cssClassEscape:function(a){return a.toLowerCase().replace(".","_")}};var fsize=Deluge.Formatters.size;var fsize_short=Deluge.Formatters.sizeShort;var fspeed=Deluge.Formatters.speed;var ftime=Deluge.Formatters.timeRemaining;var fdate=Deluge.Formatters.date;var fplain=Deluge.Formatters.plain;Ext.util.Format.cssClassEscape=Deluge.Formatters.cssClassEscape; +/* + * Deluge.Keys.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.Keys={Grid:["queue","name","total_wanted","state","progress","num_seeds","total_seeds","num_peers","total_peers","download_payload_rate","upload_payload_rate","eta","ratio","distributed_copies","is_auto_managed","time_added","tracker_host","save_path","total_done","total_uploaded","max_download_speed","max_upload_speed","seeds_peers_ratio"],Status:["total_done","total_payload_download","total_uploaded","total_payload_upload","next_announce","tracker_status","num_pieces","piece_length","is_auto_managed","active_time","seeding_time","seed_rank"],Files:["files","file_progress","file_priorities"],Peers:["peers"],Details:["name","save_path","total_size","num_files","message","tracker","comment"],Options:["max_download_speed","max_upload_speed","max_connections","max_upload_slots","is_auto_managed","stop_at_ratio","stop_ratio","remove_at_ratio","private","prioritize_first_last","move_completed","move_completed_path"]};Ext.each(Deluge.Keys.Grid,function(a){Deluge.Keys.Status.push(a)}); +/* + * Deluge.LoginWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.LoginWindow=Ext.extend(Ext.Window,{firstShow:true,bodyStyle:"padding: 10px 5px;",buttonAlign:"center",closable:false,closeAction:"hide",iconCls:"x-deluge-login-window-icon",layout:"fit",modal:true,plain:true,resizable:false,title:_("Login"),width:300,height:120,initComponent:function(){Deluge.LoginWindow.superclass.initComponent.call(this);this.on("show",this.onShow,this);this.addButton({text:_("Login"),handler:this.onLogin,scope:this});this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:120,labelAlign:"right",defaults:{width:110},defaultType:"textfield"});this.passwordField=this.form.add({xtype:"textfield",fieldLabel:_("Password"),grow:true,growMin:"110",growMax:"145",id:"_password",name:"password",inputType:"password"});this.passwordField.on("specialkey",this.onSpecialKey,this)},logout:function(){deluge.events.fire("logout");deluge.client.auth.delete_session({success:function(a){this.show(true)},scope:this})},show:function(a){if(this.firstShow){deluge.client.on("error",this.onClientError,this);this.firstShow=false}if(a){return Deluge.LoginWindow.superclass.show.call(this)}deluge.client.auth.check_session({success:function(b){if(b){deluge.events.fire("login")}else{this.show(true)}},failure:function(b){this.show(true)},scope:this})},onSpecialKey:function(b,a){if(a.getKey()==13){this.onLogin()}},onLogin:function(){var a=this.passwordField;deluge.client.auth.login(a.getValue(),{success:function(b){if(b){deluge.events.fire("login");this.hide();a.setRawValue("")}else{Ext.MessageBox.show({title:_("Login Failed"),msg:_("You entered an incorrect password"),buttons:Ext.MessageBox.OK,modal:false,fn:function(){a.focus(true,10)},icon:Ext.MessageBox.WARNING,iconCls:"x-deluge-icon-warning"})}},scope:this})},onClientError:function(c,b,a){if(c.error.code==1){deluge.events.fire("logout");this.show(true)}},onShow:function(){this.passwordField.focus(true,300)}}); +/* + * Deluge.Menus.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +deluge.menus={onTorrentActionSetOpt:function(c,f){var a=deluge.torrents.getSelectedIds();var d=c.initialConfig.torrentAction;var b={};b[d[0]]=d[1];deluge.client.core.set_torrent_options(a,b)},onTorrentActionMethod:function(b,d){var a=deluge.torrents.getSelectedIds();var c=b.initialConfig.torrentAction;deluge.client.core[c](a,{success:function(){deluge.ui.update()}})},onTorrentActionShow:function(b,d){var a=deluge.torrents.getSelectedIds();var c=b.initialConfig.torrentAction;switch(c){case"edit_trackers":deluge.editTrackers.show();break;case"remove":deluge.removeWindow.show(a);break;case"move":deluge.moveStorage.show(a);break}},};deluge.menus.torrent=new Ext.menu.Menu({id:"torrentMenu",items:[{torrentAction:"pause_torrent",text:_("Pause"),iconCls:"icon-pause",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"resume_torrent",text:_("Resume"),iconCls:"icon-resume",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},"-",{text:_("Options"),iconCls:"icon-options",hideOnClick:false,menu:new Ext.menu.Menu({items:[{text:_("D/L Speed Limit"),iconCls:"x-deluge-downloading",hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:["max_download_speed",5],text:_("5 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_download_speed",10],text:_("10 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_download_speed",30],text:_("30 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_download_speed",80],text:_("80 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_download_speed",300],text:_("300 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_download_speed",-1],text:_("Unlimited"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus}]})},{text:_("U/L Speed Limit"),iconCls:"x-deluge-seeding",hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:["max_upload_speed",5],text:_("5 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_speed",10],text:_("10 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_speed",30],text:_("30 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_speed",80],text:_("80 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_speed",300],text:_("300 KiB/s"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_speed",-1],text:_("Unlimited"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus}]})},{text:_("Connection Limit"),iconCls:"x-deluge-connections",hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:["max_connections",50],text:_("50"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_connections",100],text:_("100"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_connections",200],text:_("200"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_connections",300],text:_("300"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_connections",500],text:_("500"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_connections",-1],text:_("Unlimited"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus}]})},{text:_("Upload Slot Limit"),iconCls:"icon-upload-slots",hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:["max_upload_slots",0],text:_("0"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_slots",1],text:_("1"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_slots",2],text:_("2"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_slots",3],text:_("3"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_slots",5],text:_("5"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["max_upload_slots",-1],text:_("Unlimited"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus}]})},{id:"auto_managed",text:_("Auto Managed"),hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:["auto_managed",true],text:_("On"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus},{torrentAction:["auto_managed",false],text:_("Off"),handler:deluge.menus.onTorrentActionSetOpt,scope:deluge.menus}]})}]})},"-",{text:_("Queue"),iconCls:"icon-queue",hideOnClick:false,menu:new Ext.menu.Menu({items:[{torrentAction:"queue_top",text:_("Top"),iconCls:"icon-top",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"queue_up",text:_("Up"),iconCls:"icon-up",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"queue_down",text:_("Down"),iconCls:"icon-down",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"queue_bottom",text:_("Bottom"),iconCls:"icon-bottom",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus}]})},"-",{torrentAction:"force_reannounce",text:_("Update Tracker"),iconCls:"icon-update-tracker",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"edit_trackers",text:_("Edit Trackers"),iconCls:"icon-edit-trackers",handler:deluge.menus.onTorrentActionShow,scope:deluge.menus},"-",{torrentAction:"remove",text:_("Remove Torrent"),iconCls:"icon-remove",handler:deluge.menus.onTorrentActionShow,scope:deluge.menus},"-",{torrentAction:"force_recheck",text:_("Force Recheck"),iconCls:"icon-recheck",handler:deluge.menus.onTorrentActionMethod,scope:deluge.menus},{torrentAction:"move",text:_("Move Storage"),iconCls:"icon-move",handler:deluge.menus.onTorrentActionShow,scope:deluge.menus}]});deluge.menus.filePriorities=new Ext.menu.Menu({id:"filePrioritiesMenu",items:[{id:"expandAll",text:_("Expand All"),iconCls:"icon-expand-all"},"-",{id:"no_download",text:_("Do Not Download"),iconCls:"icon-do-not-download",filePriority:FILE_PRIORITY["Do Not Download"]},{id:"normal",text:_("Normal Priority"),iconCls:"icon-normal",filePriority:FILE_PRIORITY["Normal Priority"]},{id:"high",text:_("High Priority"),iconCls:"icon-high",filePriority:FILE_PRIORITY["High Priority"]},{id:"highest",text:_("Highest Priority"),iconCls:"icon-highest",filePriority:FILE_PRIORITY["Highest Priority"]}]}); +/* + * Deluge.MoveStorage.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge");Deluge.MoveStorage=Ext.extend(Ext.Window,{constructor:function(a){a=Ext.apply({title:_("Move Storage"),width:375,height:110,layout:"fit",buttonAlign:"right",closeAction:"hide",closable:true,iconCls:"x-deluge-move-storage",plain:true,resizable:false},a);Deluge.MoveStorage.superclass.constructor.call(this,a)},initComponent:function(){Deluge.MoveStorage.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancel,this);this.addButton(_("Move"),this.onMove,this);this.form=this.add({xtype:"form",border:false,defaultType:"textfield",width:300,bodyStyle:"padding: 5px"});this.moveLocation=this.form.add({fieldLabel:_("Location"),name:"location",width:240})},hide:function(){Deluge.MoveStorage.superclass.hide.call(this);this.torrentIds=null},show:function(a){Deluge.MoveStorage.superclass.show.call(this);this.torrentIds=a},onCancel:function(){this.hide()},onMove:function(){var a=this.moveLocation.getValue();deluge.client.core.move_storage(this.torrentIds,a);this.hide()}});deluge.moveStorage=new Deluge.MoveStorage(); +/* + * Deluge.MultiOptionsManager.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.MultiOptionsManager=Ext.extend(Deluge.OptionsManager,{constructor:function(a){this.currentId=null;this.stored={};Deluge.MultiOptionsManager.superclass.constructor.call(this,a)},changeId:function(d,b){var c=this.currentId;this.currentId=d;if(!b){for(var a in this.options){if(!this.binds[a]){continue}Ext.each(this.binds[a],function(e){e.setValue(this.get(a))},this)}}return c},commit:function(){this.stored[this.currentId]=Ext.apply(this.stored[this.currentId],this.changed[this.currentId]);this.reset()},get:function(){if(arguments.length==1){var b=arguments[0];return(this.isDirty(b))?this.changed[this.currentId][b]:this.getDefault(b)}else{if(arguments.length==0){var a={};for(var b in this.options){a[b]=(this.isDirty(b))?this.changed[this.currentId][b]:this.getDefault(b)}return a}else{var a={};Ext.each(arguments,function(c){a[c]=(this.isDirty(c))?this.changed[this.currentId][c]:this.getDefault(c)},this);return a}}},getDefault:function(a){return(this.has(a))?this.stored[this.currentId][a]:this.options[a]},getDirty:function(){return(this.changed[this.currentId])?this.changed[this.currentId]:{}},isDirty:function(a){return(this.changed[this.currentId]&&!Ext.isEmpty(this.changed[this.currentId][a]))},has:function(a){return(this.stored[this.currentId]&&!Ext.isEmpty(this.stored[this.currentId][a]))},reset:function(){if(this.changed[this.currentId]){delete this.changed[this.currentId]}if(this.stored[this.currentId]){delete this.stored[this.currentId]}},resetAll:function(){this.changed={};this.stored={};this.changeId(null)},setDefault:function(c,d){if(c===undefined){return}else{if(d===undefined){for(var b in c){this.setDefault(b,c[b])}}else{var a=this.getDefault(c);d=this.convertValueType(a,d);if(a==d){return}if(!this.stored[this.currentId]){this.stored[this.currentId]={}}this.stored[this.currentId][c]=d;if(!this.isDirty(c)){this.fireEvent("changed",c,d,a)}}}},update:function(d,e){if(d===undefined){return}else{if(e===undefined){for(var c in d){this.update(c,d[c])}}else{if(!this.changed[this.currentId]){this.changed[this.currentId]={}}var a=this.getDefault(d);e=this.convertValueType(a,e);var b=this.get(d);if(b==e){return}if(a==e){if(this.isDirty(d)){delete this.changed[this.currentId][d]}this.fireEvent("changed",d,e,b);return}else{this.changed[this.currentId][d]=e;this.fireEvent("changed",d,e,b)}}}}}); +/* + * Deluge.OtherLimitWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.OtherLimitWindow=Ext.extend(Ext.Window,{layout:"fit",width:210,height:100,closeAction:"hide",initComponent:function(){Deluge.OtherLimitWindow.superclass.initComponent.call(this);this.form=this.add({xtype:"form",baseCls:"x-plain",bodyStyle:"padding: 5px",layout:"hbox",layoutConfig:{pack:"start"},items:[{xtype:"spinnerfield",name:"limit"}]});if(this.initialConfig.unit){this.form.add({border:false,baseCls:"x-plain",bodyStyle:"padding: 5px",html:this.initialConfig.unit})}else{this.setSize(180,100)}this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Ok"),this.onOkClick,this);this.afterMethod("show",this.doFocusField,this)},setValue:function(a){this.form.getForm().setValues({limit:a})},onCancelClick:function(){this.form.getForm().reset();this.hide()},onOkClick:function(){var a={};a[this.group]=this.form.getForm().getValues().limit;deluge.client.core.set_config(a,{success:function(){deluge.ui.update()}});this.hide()},doFocusField:function(){this.form.getForm().findField("limit").focus(true,10)}}); +/* + * Deluge.Plugin.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Deluge");Deluge.Plugin=Ext.extend(Ext.util.Observable,{name:null,constructor:function(a){this.isDelugePlugin=true;this.addEvents({enabled:true,disabled:true});Deluge.Plugin.superclass.constructor.call(this,a)},disable:function(){this.fireEvent("disabled",this);if(this.onDisable){this.onDisable()}},enable:function(){deluge.client.reloadMethods();this.fireEvent("enable",this);if(this.onEnable){this.onEnable()}},registerTorrentStatus:function(b,f,a){a=a||{};var e=a.colCfg||{},d=a.storeCfg||{};d=Ext.apply(d,{name:b});deluge.torrents.meta.fields.push(d);deluge.torrents.getStore().reader.onMetaChange(deluge.torrents.meta);e=Ext.apply(e,{header:f,dataIndex:b});var c=deluge.torrents.columns.slice(0);c.push(e);deluge.torrents.colModel.setConfig(c);deluge.torrents.columns=c;Deluge.Keys.Grid.push(b);deluge.torrents.getView().refresh(true)},deregisterTorrentStatus:function(b){var a=[];Ext.each(deluge.torrents.meta.fields,function(e){if(e.name!=b){a.push(e)}});deluge.torrents.meta.fields=a;deluge.torrents.getStore().reader.onMetaChange(deluge.torrents.meta);var d=[];Ext.each(deluge.torrents.columns,function(e){if(e.dataIndex!=b){d.push(e)}});deluge.torrents.colModel.setConfig(d);deluge.torrents.columns=d;var c=[];Ext.each(Deluge.Keys.Grid,function(e){if(e==b){c.push(e)}});Deluge.Keys.Grid=c;deluge.torrents.getView().refresh(true)}});Ext.ns("Deluge.plugins"); +/* + * Deluge.RemoveWindow.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.RemoveWindow=Ext.extend(Ext.Window,{title:_("Remove Torrent"),layout:"fit",width:350,height:100,buttonAlign:"right",closeAction:"hide",closable:true,iconCls:"x-deluge-remove-window-icon",plain:true,bodyStyle:"padding: 5px; padding-left: 10px;",html:"Are you sure you wish to remove the torrent (s)?",initComponent:function(){Deluge.RemoveWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancel,this);this.addButton(_("Remove With Data"),this.onRemoveData,this);this.addButton(_("Remove Torrent"),this.onRemove,this)},remove:function(a){Ext.each(this.torrentIds,function(b){deluge.client.core.remove_torrent(b,a,{success:function(){this.onRemoved(b)},scope:this,torrentId:b})},this)},show:function(a){Deluge.RemoveWindow.superclass.show.call(this);this.torrentIds=a},onCancel:function(){this.hide();this.torrentIds=null},onRemove:function(){this.remove(false)},onRemoveData:function(){this.remove(true)},onRemoved:function(a){deluge.events.fire("torrentRemoved",a);this.hide();deluge.ui.update()}});deluge.removeWindow=new Deluge.RemoveWindow(); +/* + * Deluge.Sidebar.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.Sidebar=Ext.extend(Ext.Panel,{panels:{},selected:null,constructor:function(a){a=Ext.apply({id:"sidebar",region:"west",cls:"deluge-sidebar",title:_("Filters"),layout:"accordion",split:true,width:200,minSize:100,collapsible:true,margins:"5 0 0 5",cmargins:"5 0 0 5"},a);Deluge.Sidebar.superclass.constructor.call(this,a)},initComponent:function(){Deluge.Sidebar.superclass.initComponent.call(this);deluge.events.on("disconnect",this.onDisconnect,this)},createFilter:function(c,b){var a=new Deluge.FilterPanel({filter:c});a.on("selectionchange",function(d,e){deluge.ui.update()});this.add(a);this.doLayout();this.panels[c]=a;a.header.on("click",function(d){if(!deluge.config.sidebar_multiple_filters){deluge.ui.update()}if(!a.list.getSelectionCount()){a.list.select(0)}});this.fireEvent("filtercreate",this,a);a.updateStates(b);this.fireEvent("afterfiltercreate",this,a)},getFilter:function(a){return this.panels[a]},getFilterStates:function(){var b={};if(deluge.config.sidebar_multiple_filters){this.items.each(function(d){var e=d.getState();if(e==null){return}b[d.filterType]=e},this)}else{var a=this.getLayout().activeItem;if(a){var c=a.getState();if(!c==null){return}b[a.filterType]=c}}return b},hasFilter:function(a){return(this.panels[a])?true:false},onDisconnect:function(){for(var a in this.panels){this.remove(this.panels[a])}this.panels={};this.selected=null},onFilterSelect:function(b,c,a){deluge.ui.update()},update:function(c){for(var b in c){var a=c[b];if(Ext.getKeys(this.panels).indexOf(b)>-1){this.panels[b].updateStates(a)}else{this.createFilter(b,a)}}Ext.each(Ext.keys(this.panels),function(d){if(Ext.keys(c).indexOf(d)==-1){this.remove(this.panels[d]);this.doLayout();delete this.panels[d]}},this)}}); +/* + * Deluge.Statusbar.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Deluge");Deluge.Statusbar=Ext.extend(Ext.ux.StatusBar,{constructor:function(a){a=Ext.apply({id:"deluge-statusbar",defaultIconCls:"x-deluge-statusbar x-not-connected",defaultText:_("Not Connected")},a);Deluge.Statusbar.superclass.constructor.call(this,a)},initComponent:function(){Deluge.Statusbar.superclass.initComponent.call(this);deluge.events.on("connect",this.onConnect,this);deluge.events.on("disconnect",this.onDisconnect,this)},createButtons:function(){this.buttons=this.add({id:"statusbar-connections",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-connections",tooltip:_("Connections"),menu:new Deluge.StatusbarMenu({items:[{text:"50",value:"50",group:"max_connections_global",checked:false},{text:"100",value:"100",group:"max_connections_global",checked:false},{text:"200",value:"200",group:"max_connections_global",checked:false},{text:"300",value:"300",group:"max_connections_global",checked:false},{text:"500",value:"500",group:"max_connections_global",checked:false},{text:_("Unlimited"),value:"-1",group:"max_connections_global",checked:false},"-",{text:_("Other"),value:"other",group:"max_connections_global",checked:false}],otherWin:{title:_("Set Maximum Connections")}})},"-",{id:"statusbar-downspeed",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-downloading",tooltip:_("Download Speed"),menu:new Deluge.StatusbarMenu({items:[{value:"5",text:"5 KiB/s",group:"max_download_speed",checked:false},{value:"10",text:"10 KiB/s",group:"max_download_speed",checked:false},{value:"30",text:"30 KiB/s",group:"max_download_speed",checked:false},{value:"80",text:"80 KiB/s",group:"max_download_speed",checked:false},{value:"300",text:"300 KiB/s",group:"max_download_speed",checked:false},{value:"-1",text:_("Unlimited"),group:"max_download_speed",checked:false},"-",{value:"other",text:_("Other"),group:"max_download_speed",checked:false}],otherWin:{title:_("Set Maximum Download Speed"),unit:_("Kib/s")}})},"-",{id:"statusbar-upspeed",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-seeding",tooltip:_("Upload Speed"),menu:new Deluge.StatusbarMenu({items:[{value:"5",text:"5 KiB/s",group:"max_upload_speed",checked:false},{value:"10",text:"10 KiB/s",group:"max_upload_speed",checked:false},{value:"30",text:"30 KiB/s",group:"max_upload_speed",checked:false},{value:"80",text:"80 KiB/s",group:"max_upload_speed",checked:false},{value:"300",text:"300 KiB/s",group:"max_upload_speed",checked:false},{value:"-1",text:_("Unlimited"),group:"max_upload_speed",checked:false},"-",{value:"other",text:_("Other"),group:"max_upload_speed",checked:false}],otherWin:{title:_("Set Maximum Upload Speed"),unit:_("Kib/s")}})},"-",{id:"statusbar-traffic",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-traffic",tooltip:_("Protocol Traffic Download/Upload"),handler:function(){deluge.preferences.show();deluge.preferences.selectPage("Network")}},"-",{id:"statusbar-dht",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-dht",tooltip:_("DHT Nodes")},"-",{id:"statusbar-freespace",text:" ",cls:"x-btn-text-icon",iconCls:"x-deluge-freespace",tooltip:_("Freespace in download location"),handler:function(){deluge.preferences.show();deluge.preferences.selectPage("Downloads")}});this.created=true},onConnect:function(){this.setStatus({iconCls:"x-connected",text:""});if(!this.created){this.createButtons()}else{Ext.each(this.buttons,function(a){a.show();a.enable()})}this.doLayout()},onDisconnect:function(){this.clearStatus({useDefaults:true});Ext.each(this.buttons,function(a){a.hide();a.disable()});this.doLayout()},update:function(b){if(!b){return}function c(d){return d+" KiB/s"}var a=function(f,e){var g=this.items.get("statusbar-"+f);if(e.limit.value>0){var h=(e.value.formatter)?e.value.formatter(e.value.value,true):e.value.value;var d=(e.limit.formatter)?e.limit.formatter(e.limit.value,true):e.limit.value;var i=String.format(e.format,h,d)}else{var i=(e.value.formatter)?e.value.formatter(e.value.value,true):e.value.value}g.setText(i);if(!g.menu){return}g.menu.setValue(e.limit.value)}.createDelegate(this);a("connections",{value:{value:b.num_connections},limit:{value:b.max_num_connections},format:"{0} ({1})"});a("downspeed",{value:{value:b.download_rate,formatter:Deluge.Formatters.speed},limit:{value:b.max_download,formatter:c},format:"{0} ({1})"});a("upspeed",{value:{value:b.upload_rate,formatter:Deluge.Formatters.speed},limit:{value:b.max_upload,formatter:c},format:"{0} ({1})"});a("traffic",{value:{value:b.download_protocol_rate,formatter:Deluge.Formatters.speed},limit:{value:b.upload_protocol_rate,formatter:Deluge.Formatters.speed},format:"{0}/{1}"});this.items.get("statusbar-dht").setText(b.dht_nodes);this.items.get("statusbar-freespace").setText(fsize(b.free_space))}}); +/* + * Deluge.Toolbar.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Deluge.Toolbar=Ext.extend(Ext.Toolbar,{constructor:function(a){a=Ext.apply({items:[{id:"tbar-deluge-text",disabled:true,text:_("Deluge"),iconCls:"x-deluge-main-panel"},new Ext.Toolbar.Separator(),{id:"create",disabled:true,hidden:true,text:_("Create"),iconCls:"icon-create",handler:this.onTorrentAction},{id:"add",disabled:true,text:_("Add"),iconCls:"icon-add",handler:this.onTorrentAdd},{id:"remove",disabled:true,text:_("Remove"),iconCls:"icon-remove",handler:this.onTorrentAction},new Ext.Toolbar.Separator(),{id:"pause",disabled:true,text:_("Pause"),iconCls:"icon-pause",handler:this.onTorrentAction},{id:"resume",disabled:true,text:_("Resume"),iconCls:"icon-resume",handler:this.onTorrentAction},new Ext.Toolbar.Separator(),{id:"up",cls:"x-btn-text-icon",disabled:true,text:_("Up"),iconCls:"icon-up",handler:this.onTorrentAction},{id:"down",disabled:true,text:_("Down"),iconCls:"icon-down",handler:this.onTorrentAction},new Ext.Toolbar.Separator(),{id:"preferences",text:_("Preferences"),iconCls:"x-deluge-preferences",handler:this.onPreferencesClick,scope:this},{id:"connectionman",text:_("Connection Manager"),iconCls:"x-deluge-connection-manager",handler:this.onConnectionManagerClick,scope:this},"->",{id:"help",iconCls:"icon-help",text:_("Help"),handler:this.onHelpClick,scope:this},{id:"logout",iconCls:"icon-logout",disabled:true,text:_("Logout"),handler:this.onLogout,scope:this}]},a);Deluge.Toolbar.superclass.constructor.call(this,a)},connectedButtons:["add","remove","pause","resume","up","down"],initComponent:function(){Deluge.Toolbar.superclass.initComponent.call(this);deluge.events.on("connect",this.onConnect,this);deluge.events.on("login",this.onLogin,this)},onConnect:function(){Ext.each(this.connectedButtons,function(a){this.items.get(a).enable()},this)},onDisconnect:function(){Ext.each(this.connectedButtons,function(a){this.items.get(a).disable()},this)},onLogin:function(){this.items.get("logout").enable()},onLogout:function(){this.items.get("logout").disable();deluge.login.logout()},onConnectionManagerClick:function(){deluge.connectionManager.show()},onHelpClick:function(){window.open("http://dev.deluge-torrent.org/wiki/UserGuide")},onPreferencesClick:function(){deluge.preferences.show()},onTorrentAction:function(c){var b=deluge.torrents.getSelections();var a=[];Ext.each(b,function(d){a.push(d.id)});switch(c.id){case"remove":deluge.removeWindow.show(a);break;case"pause":case"resume":deluge.client.core[c.id+"_torrent"](a,{success:function(){deluge.ui.update()}});break;case"up":case"down":deluge.client.core["queue_"+c.id](a,{success:function(){deluge.ui.update()}});break}},onTorrentAdd:function(){deluge.add.show()}}); +/* + * Deluge.TorrentGrid.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +(function(){function c(k){return(k==-1)?"":k+1}function f(l,m,k){return String.format('
{1}
',k.data.state.toLowerCase(),l)}function g(k){if(!k){return}return fspeed(k)}function i(k){if(k==-1){return""}return fspeed(k*1024)}function j(o,q,n){o=new Number(o);var k=o;var s=n.data.state+" "+o.toFixed(2)+"%";if(this.style){var m=this.style}else{var m=q.style}var l=new Number(m.match(/\w+:\s*(\d+)\w+/)[1]);return Deluge.progressBar(o,l-8,s)}function a(l,m,k){if(k.data.total_seeds>-1){return String.format("{0} ({1})",l,k.data.total_seeds)}else{return l}}function e(l,m,k){if(k.data.total_peers>-1){return String.format("{0} ({1})",l,k.data.total_peers)}else{return l}}function b(l,m,k){return(l<0)?"∞":parseFloat(new Number(l).toFixed(3))}function d(l,m,k){return String.format('
{0}
',l)}function h(k){return k*-1}Deluge.TorrentGrid=Ext.extend(Ext.grid.GridPanel,{torrents:{},columns:[{id:"queue",header:_("#"),width:30,sortable:true,renderer:c,dataIndex:"queue"},{id:"name",header:_("Name"),width:150,sortable:true,renderer:f,dataIndex:"name"},{header:_("Size"),width:75,sortable:true,renderer:fsize,dataIndex:"total_wanted"},{header:_("Progress"),width:150,sortable:true,renderer:j,dataIndex:"progress"},{header:_("Down Speed"),width:80,sortable:true,renderer:g,dataIndex:"download_payload_rate"},{header:_("Up Speed"),width:80,sortable:true,renderer:g,dataIndex:"upload_payload_rate"},{header:_("ETA"),width:60,sortable:true,renderer:ftime,dataIndex:"eta"},{header:_("Seeders"),hidden:true,width:60,sortable:true,renderer:a,dataIndex:"num_seeds"},{header:_("Peers"),hidden:true,width:60,sortable:true,renderer:e,dataIndex:"num_peers"},{header:_("Ratio"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"ratio"},{header:_("Avail"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"distributed_copies"},{header:_("Added"),hidden:true,width:80,sortable:true,renderer:fdate,dataIndex:"time_added"},{header:_("Tracker"),hidden:true,width:120,sortable:true,renderer:d,dataIndex:"tracker_host"},{header:_("Save Path"),hidden:true,width:120,sortable:true,renderer:fplain,dataIndex:"save_path"},{header:_("Downloaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_done"},{header:_("Uploaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_uploaded"},{header:_("Down Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_download_speed"},{header:_("Up Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_upload_speed"},{header:_("Seeders")+"/"+_("Peers"),hidden:true,width:75,sortable:true,renderer:b,dataIndex:"seeds_peers_ratio"}],meta:{root:"torrents",idProperty:"id",fields:[{name:"queue",sortType:Deluge.data.SortTypes.asQueuePosition},{name:"name",sortType:Deluge.data.SortTypes.asName},{name:"total_wanted",type:"int"},{name:"state"},{name:"progress",type:"float"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int",sortType:h},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host"},{name:"save_path"},{name:"total_done",type:"int"},{name:"total_uploaded",type:"int"},{name:"max_download_speed",type:"int"},{name:"max_upload_speed",type:"int"},{name:"seeds_peers_ratio",type:"float"}]},keys:[{key:"a",ctrl:true,stopEvent:true,handler:function(){deluge.torrents.getSelectionModel().selectAll()}},{key:[46],stopEvent:true,handler:function(){ids=deluge.torrents.getSelectedIds();deluge.removeWindow.show(ids)}}],constructor:function(k){k=Ext.apply({id:"torrentGrid",store:new Ext.data.JsonStore(this.meta),columns:this.columns,keys:this.keys,region:"center",cls:"deluge-torrents",stripeRows:true,autoExpandColumn:"name",autoExpandMin:150,deferredRender:false,autoScroll:true,margins:"5 5 0 0",stateful:true,view:new Ext.ux.grid.BufferView({rowHeight:26,scrollDelay:false})},k);Deluge.TorrentGrid.superclass.constructor.call(this,k)},initComponent:function(){Deluge.TorrentGrid.superclass.initComponent.call(this);deluge.events.on("torrentRemoved",this.onTorrentRemoved,this);deluge.events.on("disconnect",this.onDisconnect,this);this.on("rowcontextmenu",function(k,n,m){m.stopEvent();var l=k.getSelectionModel();if(!l.isSelected(n)){l.selectRow(n)}deluge.menus.torrent.showAt(m.getPoint())})},getTorrent:function(k){return this.getStore().getAt(k)},getSelected:function(){return this.getSelectionModel().getSelected()},getSelections:function(){return this.getSelectionModel().getSelections()},getSelectedId:function(){return this.getSelectionModel().getSelected().id},getSelectedIds:function(){var k=[];Ext.each(this.getSelectionModel().getSelections(),function(l){k.push(l.id)});return k},update:function(o,m){var q=this.getStore();if(m){q.removeAll();this.torrents={}}var p=[];for(var r in o){var u=o[r];if(this.torrents[r]){var n=q.getById(r);n.beginEdit();for(var l in u){if(n.get(l)!=u[l]){n.set(l,u[l])}}n.endEdit()}else{var n=new Deluge.data.Torrent(u);n.id=r;this.torrents[r]=1;p.push(n)}}q.add(p);q.each(function(k){if(!o[k.id]){q.remove(k);delete this.torrents[k.id]}},this);q.commitChanges();var s=q.getSortState();if(!s){return}q.sort(s.field,s.direction)},onDisconnect:function(){this.getStore().removeAll();this.torrents={}},onTorrentRemoved:function(l){var k=this.getSelectionModel();Ext.each(l,function(n){var m=this.getStore().getById(n);if(k.isSelected(m)){k.deselectRow(this.getStore().indexOf(m))}this.getStore().remove(m);delete this.torrents[n]},this)}});deluge.torrents=new Deluge.TorrentGrid()})(); +/* + * Deluge.UI.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +deluge.ui={errorCount:0,filters:null,initialize:function(){deluge.add=new Deluge.add.AddWindow();deluge.details=new Deluge.details.DetailsPanel();deluge.connectionManager=new Deluge.ConnectionManager();deluge.editTrackers=new Deluge.EditTrackersWindow();deluge.login=new Deluge.LoginWindow();deluge.preferences=new Deluge.preferences.PreferencesWindow();deluge.sidebar=new Deluge.Sidebar();deluge.statusbar=new Deluge.Statusbar();deluge.toolbar=new Deluge.Toolbar();this.detailsPanel=new Ext.Panel({id:"detailsPanel",cls:"detailsPanel",region:"south",split:true,height:215,minSize:100,collapsible:true,margins:"0 5 5 5",cmargins:"0 5 5 5",layout:"fit",items:[deluge.details]});this.MainPanel=new Ext.Panel({id:"mainPanel",iconCls:"x-deluge-main-panel",layout:"border",border:false,tbar:deluge.toolbar,items:[deluge.sidebar,this.detailsPanel,deluge.torrents],bbar:deluge.statusbar});this.Viewport=new Ext.Viewport({layout:"fit",items:[this.MainPanel]});deluge.events.on("connect",this.onConnect,this);deluge.events.on("disconnect",this.onDisconnect,this);deluge.events.on("PluginDisabledEvent",this.onPluginDisabled,this);deluge.events.on("PluginEnabledEvent",this.onPluginEnabled,this);deluge.client=new Ext.ux.util.RpcClient({url:deluge.config.base+"json"});for(var a in Deluge.pluginStore){a=Deluge.createPlugin(a);a.enable();deluge.plugins[a.name]=a}Ext.QuickTips.init();deluge.client.on("connected",function(b){deluge.login.show()},this,{single:true});this.update=this.update.createDelegate(this);this.checkConnection=this.checkConnection.createDelegate(this);this.originalTitle=document.title},checkConnection:function(){deluge.client.web.connected({success:this.onConnectionSuccess,failure:this.onConnectionError,scope:this})},update:function(){var a=deluge.sidebar.getFilterStates();this.oldFilters=this.filters;this.filters=a;deluge.client.web.update_ui(Deluge.Keys.Grid,a,{success:this.onUpdate,failure:this.onUpdateError,scope:this});deluge.details.update()},onConnectionError:function(a){},onConnectionSuccess:function(a){deluge.statusbar.setStatus({iconCls:"x-deluge-statusbar icon-ok",text:_("Connection restored")});clearInterval(this.checking);if(!a){deluge.connectionManager.show()}},onUpdateError:function(a){if(this.errorCount==2){Ext.MessageBox.show({title:"Lost Connection",msg:"The connection to the webserver has been lost!",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR});deluge.events.fire("disconnect");deluge.statusbar.setStatus({text:"Lost connection to webserver"});this.checking=setInterval(this.checkConnection,2000)}this.errorCount++},onUpdate:function(a){if(!a.connected){deluge.connectionManager.disconnect(true);return}if(deluge.config.show_session_speed){document.title="D: "+fsize_short(a.stats.download_rate,true)+" U: "+fsize_short(a.stats.upload_rate,true)+" - "+this.originalTitle}if(Ext.areObjectsEqual(this.filters,this.oldFilters)){deluge.torrents.update(a.torrents)}else{deluge.torrents.update(a.torrents,true)}deluge.statusbar.update(a.stats);deluge.sidebar.update(a.filters);this.errorCount=0},onConnect:function(){if(!this.running){this.running=setInterval(this.update,2000);this.update()}deluge.client.web.get_plugins({success:this.onGotPlugins,scope:this})},onDisconnect:function(){this.stop()},onGotPlugins:function(a){Ext.each(a.enabled_plugins,function(b){if(deluge.plugins[b]){return}deluge.client.web.get_plugin_resources(b,{success:this.onGotPluginResources,scope:this})},this)},onPluginEnabled:function(a){if(deluge.plugins[a]){deluge.plugins[a].enable()}else{deluge.client.web.get_plugin_resources(a,{success:this.onGotPluginResources,scope:this})}},onGotPluginResources:function(b){var a=(Deluge.debug)?b.debug_scripts:b.scripts;Ext.each(a,function(c){Ext.ux.JSLoader({url:deluge.config.base+c,onLoad:this.onPluginLoaded,pluginName:b.name})},this)},onPluginDisabled:function(a){if(deluge.plugins[a]){deluge.plugins[a].disable()}},onPluginLoaded:function(a){if(!Deluge.hasPlugin(a.pluginName)){return}plugin=Deluge.createPlugin(a.pluginName);plugin.enable();deluge.plugins[plugin.name]=plugin},stop:function(){if(this.running){clearInterval(this.running);this.running=false;deluge.torrents.getStore().removeAll()}}};Ext.onReady(function(a){deluge.ui.initialize()}); \ No newline at end of file diff -Nru deluge-1.3.12/deluge/ui/web/js/ext-extensions.js deluge-1.3.13/deluge/ui/web/js/ext-extensions.js --- deluge-1.3.12/deluge/ui/web/js/ext-extensions.js 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/js/ext-extensions.js 2016-07-20 14:23:28.000000000 +0000 @@ -1,83 +1,269 @@ -Ext.ns("Ext.ux.form"); -Ext.ux.form.FileUploadField=Ext.extend(Ext.form.TextField,{buttonText:"Browse...",buttonOnly:!1,buttonOffset:3,readOnly:!0,autoSize:Ext.emptyFn,initComponent:function(){Ext.ux.form.FileUploadField.superclass.initComponent.call(this);this.addEvents("fileselected")},onRender:function(a,b){Ext.ux.form.FileUploadField.superclass.onRender.call(this,a,b);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-file-wrap"});this.el.addClass("x-form-file-text");this.el.dom.removeAttribute("name");this.createFileInput(); -var c=Ext.applyIf(this.buttonCfg||{},{text:this.buttonText});this.button=new Ext.Button(Ext.apply(c,{renderTo:this.wrap,cls:"x-form-file-btn"+(c.iconCls?" x-btn-icon":"")}));this.buttonOnly&&(this.el.hide(),this.wrap.setWidth(this.button.getEl().getWidth()));this.bindListeners();this.resizeEl=this.positionEl=this.wrap},bindListeners:function(){this.fileInput.on({scope:this,mouseenter:function(){this.button.addClass(["x-btn-over","x-btn-focus"])},mouseleave:function(){this.button.removeClass(["x-btn-over", -"x-btn-focus","x-btn-click"])},mousedown:function(){this.button.addClass("x-btn-click")},mouseup:function(){this.button.removeClass(["x-btn-over","x-btn-focus","x-btn-click"])},change:function(){var a=this.fileInput.dom.value;this.setValue(a);this.fireEvent("fileselected",this,a)}})},createFileInput:function(){this.fileInput=this.wrap.createChild({id:this.getFileInputId(),name:this.name||this.getId(),cls:"x-form-file",tag:"input",type:"file",size:1})},reset:function(){this.rendered&&(this.fileInput.remove(), -this.createFileInput(),this.bindListeners());Ext.ux.form.FileUploadField.superclass.reset.call(this)},getFileInputId:function(){return this.id+"-file"},onResize:function(a,b){Ext.ux.form.FileUploadField.superclass.onResize.call(this,a,b);this.wrap.setWidth(a);this.buttonOnly||(a=this.wrap.getWidth()-this.button.getEl().getWidth()-this.buttonOffset,this.el.setWidth(a))},onDestroy:function(){Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);Ext.destroy(this.fileInput,this.button,this.wrap)}, -onDisable:function(){Ext.ux.form.FileUploadField.superclass.onDisable.call(this);this.doDisable(!0)},onEnable:function(){Ext.ux.form.FileUploadField.superclass.onEnable.call(this);this.doDisable(!1)},doDisable:function(a){this.fileInput.dom.disabled=a;this.button.setDisabled(a)},preFocus:Ext.emptyFn,alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}});Ext.reg("fileuploadfield",Ext.ux.form.FileUploadField);Ext.form.FileUploadField=Ext.ux.form.FileUploadField; -Ext.override(Ext.form.RadioGroup,{afterRender:function(){this.items.each(function(a){this.relayEvents(a,["check"])},this);this.lazyValue&&(this.setValue(this.value),delete this.value,delete this.lazyValue);Ext.form.RadioGroup.superclass.afterRender.call(this)},getName:function(){return this.items.first().getName()},getValue:function(){return this.items.first().getGroupValue()},setValue:function(a){this.items.each?this.items.each(function(b){if(b.rendered){var c=b.el.getValue()==String(a);b.el.dom.checked= -c;b.el.dom.defaultChecked=c;b.wrap[c?"addClass":"removeClass"](b.checkedCls)}}):(this.value=a,this.lazyValue=!0)}});Ext.ns("Ext.ux.form"); -Ext.ux.form.SpinnerField=Ext.extend(Ext.form.NumberField,{actionMode:"wrap",deferHeight:!0,autoSize:Ext.emptyFn,onBlur:Ext.emptyFn,adjustSize:Ext.BoxComponent.prototype.adjustSize,constructor:function(a){var b=Ext.copyTo({},a,"incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass"),b=this.spinner=new Ext.ux.Spinner(b),b=a.plugins?Ext.isArray(a.plugins)?a.plugins.push(b):[a.plugins,b]:b;Ext.ux.form.SpinnerField.superclass.constructor.call(this,Ext.apply(a,{plugins:b}))}, -getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},alignErrorIcon:function(){this.wrap&&this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])},validateBlur:function(){return!0}});Ext.reg("spinnerfield",Ext.ux.form.SpinnerField);Ext.form.SpinnerField=Ext.ux.form.SpinnerField;Ext.override(Ext.ux.form.SpinnerField,{onBlur:Ext.form.Field.prototype.onBlur});Ext.ns("Ext.ux.form"); -Ext.ux.form.SpinnerGroup=Ext.extend(Ext.form.CheckboxGroup,{defaultType:"spinnerfield",anchor:"98%",groupCls:"x-form-spinner-group",colCfg:{},onRender:function(a,b){if(!this.el){var c={cls:this.groupCls,layout:"column",border:!1,renderTo:a},d=Ext.apply({defaultType:this.defaultType,layout:"form",border:!1,labelWidth:60,defaults:{hideLabel:!0,anchor:"60%"}},this.colCfg);if(this.items[0].items){Ext.apply(c,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e= -0,g=this.items.length;e=this.columns[e]?"columnWidth":"width"]=this.columns[e],this.defaults&&(g.defaults=Ext.apply(g.defaults||{},this.defaults)),h.push(g);if(this.vertical)for(var d=Math.ceil(this.items.length/ -f),k=0,e=0,g=this.items.length;e');a.rowHolder.disableFormats=!0;a.rowHolder.compile();a.rowBody=new Ext.Template('',"{cells}", -this.enableRowBody?'':"","
{body}
");a.rowBody.disableFormats=!0;a.rowBody.compile()},getStyleRowHeight:function(){return Ext.isBorderBox?this.rowHeight+this.borderHeight:this.rowHeight},getCalculatedRowHeight:function(){return this.rowHeight+this.borderHeight},getVisibleRowCount:function(){var a=this.getCalculatedRowHeight(), -b=this.scroller.dom.clientHeight;return 1>b?0:Math.ceil(b/a)},getVisibleRows:function(){var a=this.getVisibleRowCount(),b=this.scroller.dom.scrollTop,b=0===b?0:Math.floor(b/this.getCalculatedRowHeight())-1;return{first:Math.max(b,0),last:Math.min(b+a+2,this.ds.getCount()-1)}},doRender:function(a,b,c,d,e,g,f){for(var h=this.templates,k=h.cell,l=h.row,u=h.rowBody,p=e-1,v=this.getStyleRowHeight(),z=this.getVisibleRows(),y=[],n,m={},q={tstyle:"width:"+this.getTotalWidth()+";height:"+v+"px;"},r,x=0,B= -b.length;x=z.first&&w<=z.last;if(A)for(var t=0;t=a.first&&(b=a.last+1);for(var d=this.ds.getCount();ba.last)&&c[b].innerHTML&&(c[b].innerHTML="")}},removeTask:function(a){var b=this[a];b&&b.cancel&&(b.cancel(),this[a]=null)},destroy:function(){this.removeTask("cleanTask");this.removeTask("renderTask");Ext.ux.grid.BufferView.superclass.destroy.call(this)}, -layout:function(){Ext.ux.grid.BufferView.superclass.layout.call(this);this.update()}}); -Ext.override(Ext.layout.FormLayout,{renderItem:function(a,b,c){if(a&&!a.rendered&&(a.isFormField||a.fieldLabel)&&"hidden"!=a.inputType){var d=this.getTemplateArgs(a);"number"==typeof b&&(b=c.dom.childNodes[b]||null);a.formItem=b?this.fieldTpl.insertBefore(b,d,!0):this.fieldTpl.append(c,d,!0);a.actionMode="formItem";a.render("x-form-el-"+a.id);a.container=a.formItem;a.actionMode="container"}else Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments)}}); -Ext.override(Ext.tree.MultiSelectionModel,{onNodeClick:function(a,b){if(b.ctrlKey&&this.isSelected(a))this.unselect(a);else if(b.shiftKey&&!this.isSelected(a)){var c=a.parentNode;if(this.lastSelNode.parentNode.id==c.id){var d=c.indexOf(a),e=c.indexOf(this.lastSelNode);this.select(this.lastSelNode,b,!1,!0);d>e&&(d+=e,e=d-e,d-=e);c.eachChild(function(a){var f=c.indexOf(a);d','
','
','', -'','','","","
','
',this.enableHdMenu?'':"",'{header}',"
","
","
","",'
','
', -"
"));this.colgroupTpl||(this.colgroupTpl=new Ext.XTemplate(''))},initColumns:function(){var a=this.columns,b=a.length,c=[],d,e;for(d=0;d=c-e.left&&d.dom!==f.firstChild){for(c=d.dom.previousSibling;c&&Ext.fly(c).hasClass("x-treegrid-hd-hidden");)c=c.previousSibling;c&&(this.activeHd=Ext.get(c),g.cursor=Ext.isWebKit?"e-resize":"col-resize")}else if(5>=e.right-c){for(c=d.dom;c&& -Ext.fly(c).hasClass("x-treegrid-hd-hidden");)c=c.previousSibling;c&&(this.activeHd=Ext.get(c),g.cursor=Ext.isWebKit?"w-resize":"col-resize")}else delete this.activeHd,g.cursor=""}},onBeforeStart:function(a){this.dragHd=this.activeHd;return!!this.dragHd},onStart:function(a){this.dragHeadersDisabled=this.tree.headersDisabled;this.tree.headersDisabled=!0;this.proxy=this.tree.body.createChild({cls:"x-treegrid-resizer"});this.proxy.setHeight(this.tree.body.getHeight());a=this.tracker.getXY()[0];this.hdX= -this.dragHd.getX();this.hdIndex=this.tree.findHeaderIndex(this.dragHd);this.proxy.setX(this.hdX);this.proxy.setWidth(a-this.hdX);this.maxWidth=this.tree.outerCt.getWidth()-this.tree.innerBody.translatePoints(this.hdX).left},onDrag:function(a){a=this.tracker.getXY()[0];this.proxy.setWidth((a-this.hdX).constrain(this.minWidth,this.maxWidth))},onEnd:function(a){a=this.proxy.getWidth();var b=this.tree,c=this.dragHeadersDisabled;this.proxy.remove();delete this.dragHd;b.columns[this.hdIndex].width=a;b.updateColumnWidths(); -setTimeout(function(){b.headersDisabled=c},100)}}); -(function(){Ext.override(Ext.list.Column,{init:function(){var a=Ext.data.Types,b=this.sortType;this.type?Ext.isString(this.type)&&(this.type=Ext.data.Types[this.type.toUpperCase()]||a.AUTO):this.type=a.AUTO;Ext.isString(b)?this.sortType=Ext.data.SortTypes[b]:Ext.isEmpty(b)&&(this.sortType=this.type.sortType)}});Ext.tree.Column=Ext.extend(Ext.list.Column,{});Ext.tree.NumberColumn=Ext.extend(Ext.list.NumberColumn,{});Ext.tree.DateColumn=Ext.extend(Ext.list.DateColumn,{});Ext.tree.BooleanColumn=Ext.extend(Ext.list.BooleanColumn, -{});Ext.reg("tgcolumn",Ext.tree.Column);Ext.reg("tgnumbercolumn",Ext.tree.NumberColumn);Ext.reg("tgdatecolumn",Ext.tree.DateColumn);Ext.reg("tgbooleancolumn",Ext.tree.BooleanColumn)})();Ext.ux.tree.TreeGridLoader=Ext.extend(Ext.tree.TreeLoader,{createNode:function(a){a.uiProvider||(a.uiProvider=Ext.ux.tree.TreeGridNodeUI);return Ext.tree.TreeLoader.prototype.createNode.call(this,a)}}); -Ext.ux.tree.TreeGridNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{isTreeGridNodeUI:!0,renderElements:function(a,b,c,d){var e=a.getOwnerTree(),g=e.columns,f=g[0],h,k,l;this.indentMarkup=a.parentNode?a.parentNode.ui.getChildIndent():"";k=['','','','',this.indentMarkup,"",'', -'','",'',f.tpl?f.tpl.apply(b):b[f.dataIndex]||f.text,"",""];h=1;for(l=g.length;h','
",f.tpl?f.tpl.apply(b):b[f.dataIndex],"
","");k.push('','');h=0;for(l=g.length;h');k.push("");!0!==d&&a.nextSibling&& -a.nextSibling.ui.getEl()?this.wrap=Ext.DomHelper.insertHtml("beforeBegin",a.nextSibling.ui.getEl(),k.join("")):this.wrap=Ext.DomHelper.insertHtml("beforeEnd",c,k.join(""));this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1].firstChild.firstChild;a=this.elNode.firstChild.childNodes;this.indentNode=a[0];this.ecNode=a[1];this.iconNode=a[2];this.anchor=a[3];this.textNode=a[3].firstChild},animExpand:function(a){this.ctNode.style.display="";Ext.ux.tree.TreeGridNodeUI.superclass.animExpand.call(this, -a)}});Ext.ux.tree.TreeGridRootNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{isTreeGridNodeUI:!0,render:function(){this.rendered||(this.wrap=this.ctNode=this.node.ownerTree.innerCt.dom,this.node.expanded=!0);if(Ext.isWebKit){var a=this.ctNode;a.style.tableLayout=null;(function(){a.style.tableLayout="fixed"}).defer(1)}},destroy:function(){this.elNode&&Ext.dd.Registry.unregister(this.elNode.id);delete this.node},collapse:Ext.emptyFn,expand:Ext.emptyFn}); -Ext.override(Ext.ux.tree.TreeGridNodeUI,{updateColumns:function(){if(this.rendered){var a=this.node.attributes,b=this.node.getOwnerTree().columns,c=b[0];this.anchor.firstChild.innerHTML=c.tpl?c.tpl.apply(a):a[c.dataIndex]||c.text;i=1;for(len=b.length;iv2?g?-1:1:0};a.on("afterrender",this.onAfterTreeRender,this,{single:!0});a.on("headermenuclick",this.onHeaderMenuClick,this)},onAfterTreeRender:function(){this.tree.hmenu&&this.tree.hmenu.insert(0,{itemId:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"}, -{itemId:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});this.updateSortIcon(0,"asc")},onHeaderMenuClick:function(a,b,c){if("asc"===b||"desc"===b)return this.onHeaderClick(a,null,c),!1},onHeaderClick:function(a,b,c){if(a&&!this.tree.headersDisabled){var d=this;d.property=a.dataIndex;d.dir=a.dir="desc"===a.dir?"asc":"desc";d.sortType=a.sortType;d.caseSensitive===Ext.isBoolean(a.caseSensitive)?a.caseSensitive:this.caseSensitive;d.sortFn=a.sortFn||this.defaultSortFn;this.tree.root.cascade(function(a){a.isLeaf()|| -d.updateSort(d.tree,a)});this.updateSortIcon(c,a.dir)}},updateSortIcon:function(a,b){var c=this.sortClasses;this.tree.innerHd.select("td").removeClass(c).item(a).addClass(c["desc"==b?1:0])}}); -Ext.ux.JSLoader=function(a){Ext.ux.JSLoader.scripts[++Ext.ux.JSLoader.index]={url:a.url,success:!0,jsLoadObj:null,options:a,onLoad:a.onLoad||Ext.emptyFn,onError:a.onError||Ext.ux.JSLoader.stdError,scope:a.scope||this};Ext.Ajax.request({url:a.url,scriptIndex:Ext.ux.JSLoader.index,success:function(a,c){var d=Ext.ux.JSLoader.scripts[c.scriptIndex];try{eval(a.responseText)}catch(e){d.success=!1,d.onError(d.options,e)}d.success&&d.onLoad.call(d.scope,d.options)},failure:function(a,c){var d=Ext.ux.JSLoader.scripts[c.scriptIndex]; -d.success=!1;d.onError(d.options,a.status)}})};Ext.ux.JSLoader.index=0;Ext.ux.JSLoader.scripts=[];Ext.ux.JSLoader.stdError=function(a,b){window.alert("Error loading script:\n\n"+a.url+"\n\nstatus: "+b)}; -Ext.ux.Spinner=Ext.extend(Ext.util.Observable,{incrementValue:1,alternateIncrementValue:5,triggerClass:"x-form-spinner-trigger",splitterClass:"x-form-spinner-splitter",alternateKey:Ext.EventObject.shiftKey,defaultValue:0,accelerate:!1,constructor:function(a){Ext.ux.Spinner.superclass.constructor.call(this,a);Ext.apply(this,a);this.mimicing=!1},init:function(a){this.field=a;a.afterMethod("onRender",this.doRender,this);a.afterMethod("onEnable",this.doEnable,this);a.afterMethod("onDisable",this.doDisable, -this);a.afterMethod("afterRender",this.doAfterRender,this);a.afterMethod("onResize",this.doResize,this);a.afterMethod("onFocus",this.doFocus,this);a.beforeMethod("onDestroy",this.doDestroy,this)},doRender:function(a,b){var c=this.el=this.field.getEl(),d=this.field;d.wrap?this.wrap=d.wrap.addClass("x-form-field-wrap"):d.wrap=this.wrap=c.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild({tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});d.width||this.wrap.setWidth(c.getWidth()+ -this.trigger.getWidth());this.splitter=this.wrap.createChild({tag:"div",cls:this.splitterClass,style:"width:13px; height:2px;"});this.splitter.setRight(Ext.isIE?1:2).setTop(10).show();this.proxy=this.trigger.createProxy("",this.splitter,!0);this.proxy.addClass("x-form-spinner-proxy");this.proxy.setStyle("left","0px");this.proxy.setSize(14,1);this.proxy.hide();this.dd=new Ext.dd.DDProxy(this.splitter.dom.id,"SpinnerDrag",{dragElId:this.proxy.id});this.initTrigger();this.initSpinner()},doAfterRender:function(){var a; -Ext.isIE&&this.el.getY()!=(a=this.trigger.getY())&&(this.el.position(),this.el.setY(a))},doEnable:function(){this.wrap&&(this.disabled=!1,this.wrap.removeClass(this.field.disabledClass))},doDisable:function(){this.wrap&&(this.disabled=!0,this.wrap.addClass(this.field.disabledClass),this.el.removeClass(this.field.disabledClass))},doResize:function(a,b){"number"==typeof a&&this.el.setWidth(a-this.trigger.getWidth());this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())},doFocus:function(){this.mimicing|| -(this.wrap.addClass("x-trigger-wrap-focus"),this.mimicing=!0,Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10}),this.el.on("keydown",this.checkTab,this))},checkTab:function(a){a.getKey()==a.TAB&&this.triggerBlur()},mimicBlur:function(a){!this.wrap.contains(a.target)&&this.field.validateBlur(a)&&this.triggerBlur()},triggerBlur:function(){this.mimicing=!1;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);this.el.un("keydown",this.checkTab, -this);this.field.beforeBlur();this.wrap.removeClass("x-trigger-wrap-focus");this.field.onBlur.call(this.field)},initTrigger:function(){this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},initSpinner:function(){this.field.addEvents({spin:!0,spinup:!0,spindown:!0});this.keyNav=new Ext.KeyNav(this.el,{up:function(a){a.preventDefault();this.onSpinUp()},down:function(a){a.preventDefault();this.onSpinDown()},pageUp:function(a){a.preventDefault();this.onSpinUpAlternate()}, -pageDown:function(a){a.preventDefault();this.onSpinDownAlternate()},scope:this});this.repeater=new Ext.util.ClickRepeater(this.trigger,{accelerate:this.accelerate});this.field.mon(this.repeater,"click",this.onTriggerClick,this,{preventDefault:!0});this.field.mon(this.trigger,{mouseover:this.onMouseOver,mouseout:this.onMouseOut,mousemove:this.onMouseMove,mousedown:this.onMouseDown,mouseup:this.onMouseUp,scope:this,preventDefault:!0});this.field.mon(this.wrap,"mousewheel",this.handleMouseWheel,this); -this.dd.setXConstraint(0,0,10);this.dd.setYConstraint(1500,1500,10);this.dd.endDrag=this.endDrag.createDelegate(this);this.dd.startDrag=this.startDrag.createDelegate(this);this.dd.onDrag=this.onDrag.createDelegate(this)},onMouseOver:function(){if(!this.disabled){var a=this.getMiddle();this.tmpHoverClass=Ext.EventObject.getPageY()a&&"x-form-spinner-overup"==this.tmpHoverClass||Ext.EventObject.getPageY()}},onMouseDown:function(){if(!this.disabled){var a=this.getMiddle();this.tmpClickClass=Ext.EventObject.getPageY()b&&(this.onSpinDown(),a.stopEvent())}},startDrag:function(){this.proxy.show();this._previousY=Ext.fly(this.dd.getDragEl()).getTop()}, -endDrag:function(){this.proxy.hide()},onDrag:function(){if(!this.disabled){var a=Ext.fly(this.dd.getDragEl()).getTop(),b="";this._previousY>a&&(b="Up");this._previousYthis.field.maxValue&&(a=this.field.maxValue);return this.fixPrecision(a)},fixPrecision:function(a){var b=isNaN(a);return this.field.allowDecimals&&-1!=this.field.decimalPrecision&&!b&&a?parseFloat(parseFloat(a).toFixed(this.field.decimalPrecision)):b?"":a},doDestroy:function(){this.trigger&& -this.trigger.remove();this.wrap&&(this.wrap.remove(),delete this.field.wrap);this.splitter&&this.splitter.remove();this.dd&&(this.dd.unreg(),this.dd=null);this.proxy&&this.proxy.remove();this.repeater&&this.repeater.purgeListeners();this.mimicing&&Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this)}});Ext.form.Spinner=Ext.ux.Spinner; -Ext.ux.StatusBar=Ext.extend(Ext.Toolbar,{cls:"x-statusbar",busyIconCls:"x-status-busy",busyText:"Loading...",autoClear:5E3,emptyText:" ",activeThreadId:0,initComponent:function(){"right"==this.statusAlign&&(this.cls+=" x-status-right");Ext.ux.StatusBar.superclass.initComponent.call(this)},afterRender:function(){Ext.ux.StatusBar.superclass.afterRender.call(this);var a="right"==this.statusAlign;this.currIconCls=this.iconCls||this.defaultIconCls;this.statusEl=new Ext.Toolbar.TextItem({cls:"x-status-text "+ -(this.currIconCls||""),text:this.text||this.defaultText||""});a?(this.add("->"),this.add(this.statusEl)):(this.insert(0,this.statusEl),this.insert(1,"->"));this.doLayout()},setStatus:function(a){a=a||{};"string"==typeof a&&(a={text:a});void 0!==a.text&&this.setText(a.text);void 0!==a.iconCls&&this.setIcon(a.iconCls);if(a.clear){a=a.clear;var b=this.autoClear,c={useDefaults:!0,anim:!0};"object"==typeof a?(a=Ext.applyIf(a,c),a.wait&&(b=a.wait)):"number"==typeof a?(b=a,a=c):"boolean"==typeof a&&(a=c); -a.threadId=this.activeThreadId;this.clearStatus.defer(b,this,[a])}return this},clearStatus:function(a){a=a||{};if(a.threadId&&a.threadId!==this.activeThreadId)return this;var b=a.useDefaults?this.defaultText:this.emptyText,c=a.useDefaults?this.defaultIconCls?this.defaultIconCls:"":"";a.anim?this.statusEl.el.fadeOut({remove:!1,useDisplay:!0,scope:this,callback:function(){this.setStatus({text:b,iconCls:c});this.statusEl.el.show()}}):(this.statusEl.hide(),this.setStatus({text:b,iconCls:c}),this.statusEl.show()); -return this},setText:function(a){this.activeThreadId++;this.text=a||"";this.rendered&&this.statusEl.setText(this.text);return this},getText:function(){return this.text},setIcon:function(a){this.activeThreadId++;a=a||"";this.rendered?(this.currIconCls&&(this.statusEl.removeClass(this.currIconCls),this.currIconCls=null),0 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.override(Ext.layout.FormLayout,{renderItem:function(e,a,d){if(e&&!e.rendered&&(e.isFormField||e.fieldLabel)&&e.inputType!="hidden"){var b=this.getTemplateArgs(e);if(typeof a=="number"){a=d.dom.childNodes[a]||null}if(a){e.formItem=this.fieldTpl.insertBefore(a,b,true)}else{e.formItem=this.fieldTpl.append(d,b,true)}e.actionMode="formItem";e.render("x-form-el-"+e.id);e.container=e.formItem;e.actionMode="container"}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments)}}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ns("Ext.ux.tree");Ext.ux.tree.TreeGrid=Ext.extend(Ext.tree.TreePanel,{rootVisible:false,useArrows:true,lines:false,borderWidth:Ext.isBorderBox?0:2,cls:"x-treegrid",columnResize:true,enableSort:true,reserveScrollOffset:true,enableHdMenu:true,columnsText:"Columns",initComponent:function(){if(!this.root){this.root=new Ext.tree.AsyncTreeNode({text:"Root"})}var a=this.loader;if(!a){a=new Ext.ux.tree.TreeGridLoader({dataUrl:this.dataUrl,requestMethod:this.requestMethod,store:this.store})}else{if(Ext.isObject(a)&&!a.load){a=new Ext.ux.tree.TreeGridLoader(a)}}this.loader=a;Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);this.initColumns();if(this.enableSort){this.treeGridSorter=new Ext.ux.tree.TreeGridSorter(this,this.enableSort)}if(this.columnResize){this.colResizer=new Ext.tree.ColumnResizer(this.columnResize);this.colResizer.init(this)}var b=this.columns;if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('
','
','
','','','','","","
','
',this.enableHdMenu?'':"",'{header}',"
","
","
","
",'
','
',"
")}if(!this.colgroupTpl){this.colgroupTpl=new Ext.XTemplate('')}},initColumns:function(){var e=this.columns,a=e.length,d=[],b,f;for(b=0;b10)){this.setScrollOffset(a)}else{var d=this;setTimeout(function(){d.setScrollOffset(e.offsetWidth-e.clientWidth>10?a:0)},10)}}},updateColumnWidths:function(){var k=this.columns,m=k.length,a=this.outerCt.query("colgroup"),l=a.length,h,e,d,b;for(d=0;d0&&this.columns[a]){this.setColumnVisible(a,!b.checked)}}return true},setColumnVisible:function(a,b){this.columns[a].hidden=!b;this.updateColumnWidths()},scrollToTop:function(){this.innerBody.dom.scrollTop=0;this.innerBody.dom.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var a=this.innerBody.dom;this.fireEvent("bodyscroll",a.scrollLeft,a.scrollTop)},syncHeaderScroll:function(){var a=this.innerBody.dom;this.innerHd.dom.scrollLeft=a.scrollLeft;this.innerHd.dom.scrollLeft=a.scrollLeft},registerNode:function(a){Ext.ux.tree.TreeGrid.superclass.registerNode.call(this,a);if(!a.uiProvider&&!a.isRoot&&!a.ui.isTreeGridNodeUI){a.ui=new Ext.ux.tree.TreeGridNodeUI(a)}}});Ext.reg("treegrid",Ext.ux.tree.TreeGrid); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.tree.ColumnResizer=Ext.extend(Ext.util.Observable,{minWidth:14,constructor:function(a){Ext.apply(this,a);Ext.tree.ColumnResizer.superclass.constructor.call(this)},init:function(a){this.tree=a;a.on("render",this.initEvents,this)},initEvents:function(a){a.mon(a.innerHd,"mousemove",this.handleHdMove,this);this.tracker=new Ext.dd.DragTracker({onBeforeStart:this.onBeforeStart.createDelegate(this),onStart:this.onStart.createDelegate(this),onDrag:this.onDrag.createDelegate(this),onEnd:this.onEnd.createDelegate(this),tolerance:3,autoStart:300});this.tracker.initEl(a.innerHd);a.on("beforedestroy",this.tracker.destroy,this.tracker)},handleHdMove:function(f,k){var g=5,j=f.getPageX(),d=f.getTarget(".x-treegrid-hd",3,true);if(d){var b=d.getRegion(),l=d.dom.style,c=d.dom.parentNode;if(j-b.left<=g&&d.dom!==c.firstChild){var a=d.dom.previousSibling;while(a&&Ext.fly(a).hasClass("x-treegrid-hd-hidden")){a=a.previousSibling}if(a){this.activeHd=Ext.get(a);l.cursor=Ext.isWebKit?"e-resize":"col-resize"}}else{if(b.right-j<=g){var h=d.dom;while(h&&Ext.fly(h).hasClass("x-treegrid-hd-hidden")){h=h.previousSibling}if(h){this.activeHd=Ext.get(h);l.cursor=Ext.isWebKit?"w-resize":"col-resize"}}else{delete this.activeHd;l.cursor=""}}}},onBeforeStart:function(a){this.dragHd=this.activeHd;return !!this.dragHd},onStart:function(b){this.dragHeadersDisabled=this.tree.headersDisabled;this.tree.headersDisabled=true;this.proxy=this.tree.body.createChild({cls:"x-treegrid-resizer"});this.proxy.setHeight(this.tree.body.getHeight());var a=this.tracker.getXY()[0];this.hdX=this.dragHd.getX();this.hdIndex=this.tree.findHeaderIndex(this.dragHd);this.proxy.setX(this.hdX);this.proxy.setWidth(a-this.hdX);this.maxWidth=this.tree.outerCt.getWidth()-this.tree.innerBody.translatePoints(this.hdX).left},onDrag:function(b){var a=this.tracker.getXY()[0];this.proxy.setWidth((a-this.hdX).constrain(this.minWidth,this.maxWidth))},onEnd:function(d){var b=this.proxy.getWidth(),a=this.tree,c=this.dragHeadersDisabled;this.proxy.remove();delete this.dragHd;a.columns[this.hdIndex].width=b;a.updateColumnWidths();setTimeout(function(){a.headersDisabled=c},100)}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +(function(){Ext.override(Ext.list.Column,{init:function(){var b=Ext.data.Types,a=this.sortType;if(this.type){if(Ext.isString(this.type)){this.type=Ext.data.Types[this.type.toUpperCase()]||b.AUTO}}else{this.type=b.AUTO}if(Ext.isString(a)){this.sortType=Ext.data.SortTypes[a]}else{if(Ext.isEmpty(a)){this.sortType=this.type.sortType}}}});Ext.tree.Column=Ext.extend(Ext.list.Column,{});Ext.tree.NumberColumn=Ext.extend(Ext.list.NumberColumn,{});Ext.tree.DateColumn=Ext.extend(Ext.list.DateColumn,{});Ext.tree.BooleanColumn=Ext.extend(Ext.list.BooleanColumn,{});Ext.reg("tgcolumn",Ext.tree.Column);Ext.reg("tgnumbercolumn",Ext.tree.NumberColumn);Ext.reg("tgdatecolumn",Ext.tree.DateColumn);Ext.reg("tgbooleancolumn",Ext.tree.BooleanColumn)})(); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ux.tree.TreeGridLoader=Ext.extend(Ext.tree.TreeLoader,{createNode:function(a){if(!a.uiProvider){a.uiProvider=Ext.ux.tree.TreeGridNodeUI}return Ext.tree.TreeLoader.prototype.createNode.call(this,a)}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ux.tree.TreeGridNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{isTreeGridNodeUI:true,renderElements:function(d,l,h,m){var o=d.getOwnerTree(),k=o.columns,j=k[0],e,b,g;this.indentMarkup=d.parentNode?d.parentNode.ui.getChildIndent():"";b=['','','','',this.indentMarkup,"",'','','",'',(j.tpl?j.tpl.apply(l):l[j.dataIndex]||j.text),"",""];for(e=1,g=k.length;e','
",(j.tpl?j.tpl.apply(l):l[j.dataIndex]),"
","")}b.push('','');for(e=0,g=k.length;e')}b.push("");if(m!==true&&d.nextSibling&&d.nextSibling.ui.getEl()){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",d.nextSibling.ui.getEl(),b.join(""))}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",h,b.join(""))}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1].firstChild.firstChild;var f=this.elNode.firstChild.childNodes;this.indentNode=f[0];this.ecNode=f[1];this.iconNode=f[2];this.anchor=f[3];this.textNode=f[3].firstChild},animExpand:function(a){this.ctNode.style.display="";Ext.ux.tree.TreeGridNodeUI.superclass.animExpand.call(this,a)}});Ext.ux.tree.TreeGridRootNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{isTreeGridNodeUI:true,render:function(){if(!this.rendered){this.wrap=this.ctNode=this.node.ownerTree.innerCt.dom;this.node.expanded=true}if(Ext.isWebKit){var a=this.ctNode;a.style.tableLayout=null;(function(){a.style.tableLayout="fixed"}).defer(1)}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id)}delete this.node},collapse:Ext.emptyFn,expand:Ext.emptyFn}); +/* + * Ext.ux.tree.TreeGridNodeUIFix.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.override(Ext.ux.tree.TreeGridNodeUI,{updateColumns:function(){if(!this.rendered){return}var b=this.node.attributes,d=this.node.getOwnerTree(),e=d.columns,f=e[0];this.anchor.firstChild.innerHTML=(f.tpl?f.tpl.apply(b):b[f.dataIndex]||f.text);for(i=1,len=e.length;iv2){return j?-1:+1}else{return 0}}};a.on("afterrender",this.onAfterTreeRender,this,{single:true});a.on("headermenuclick",this.onHeaderMenuClick,this)},onAfterTreeRender:function(){if(this.tree.hmenu){this.tree.hmenu.insert(0,{itemId:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{itemId:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"})}this.updateSortIcon(0,"asc")},onHeaderMenuClick:function(d,b,a){if(b==="asc"||b==="desc"){this.onHeaderClick(d,null,a);return false}},onHeaderClick:function(e,b,a){if(e&&!this.tree.headersDisabled){var d=this;d.property=e.dataIndex;d.dir=e.dir=(e.dir==="desc"?"asc":"desc");d.sortType=e.sortType;d.caseSensitive===Ext.isBoolean(e.caseSensitive)?e.caseSensitive:this.caseSensitive;d.sortFn=e.sortFn||this.defaultSortFn;this.tree.root.cascade(function(c){if(!c.isLeaf()){d.updateSort(d.tree,c)}});this.updateSortIcon(a,e.dir)}},updateSortIcon:function(b,a){var d=this.sortClasses,c=this.tree.innerHd.select("td").removeClass(d);c.item(b).addClass(d[a=="desc"?1:0])}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ns("Ext.ux.grid");Ext.ux.grid.BufferView=Ext.extend(Ext.grid.GridView,{rowHeight:19,borderHeight:2,scrollDelay:100,cacheSize:20,cleanDelay:500,initTemplates:function(){Ext.ux.grid.BufferView.superclass.initTemplates.call(this);var a=this.templates;a.rowHolder=new Ext.Template('
');a.rowHolder.disableFormats=true;a.rowHolder.compile();a.rowBody=new Ext.Template('',"{cells}",(this.enableRowBody?'':""),"
{body}
");a.rowBody.disableFormats=true;a.rowBody.compile()},getStyleRowHeight:function(){return Ext.isBorderBox?(this.rowHeight+this.borderHeight):this.rowHeight},getCalculatedRowHeight:function(){return this.rowHeight+this.borderHeight},getVisibleRowCount:function(){var b=this.getCalculatedRowHeight(),a=this.scroller.dom.clientHeight;return(a<1)?0:Math.ceil(a/b)},getVisibleRows:function(){var a=this.getVisibleRowCount(),b=this.scroller.dom.scrollTop,c=(b===0?0:Math.floor(b/this.getCalculatedRowHeight())-1);return{first:Math.max(c,0),last:Math.min(c+a+2,this.ds.getCount()-1)}},doRender:function(g,k,u,a,s,A,l){var b=this.templates,f=b.cell,h=b.row,x=b.rowBody,n=s-1,t=this.getStyleRowHeight(),z=this.getVisibleRows(),d="width:"+this.getTotalWidth()+";height:"+t+"px;",D=[],w,E,v={},m={tstyle:d},q;for(var y=0,C=k.length;y=z.first&&o<=z.last;if(e){for(var B=0;B0},syncScroll:function(){Ext.ux.grid.BufferView.superclass.syncScroll.apply(this,arguments);this.update()},update:function(){if(this.scrollDelay){if(!this.renderTask){this.renderTask=new Ext.util.DelayedTask(this.doUpdate,this)}this.renderTask.delay(this.scrollDelay)}else{this.doUpdate()}},onRemove:function(d,a,b,c){Ext.ux.grid.BufferView.superclass.onRemove.apply(this,arguments);if(c!==true){this.update()}},doUpdate:function(){if(this.getVisibleRowCount()>0){var f=this.grid,b=f.colModel,h=f.store,e=this.getColumnData(),a=this.getVisibleRows(),j;for(var d=a.first;d<=a.last;d++){if(!this.isRowRendered(d)&&(j=this.getRow(d))){var c=this.doRender(e,[h.getAt(d)],h,d,b.getColumnCount(),f.stripeRows,true);j.innerHTML=c}}this.clean()}},clean:function(){if(!this.cleanTask){this.cleanTask=new Ext.util.DelayedTask(this.doClean,this)}this.cleanTask.delay(this.cleanDelay)},doClean:function(){if(this.getVisibleRowCount()>0){var b=this.getVisibleRows();b.first-=this.cacheSize;b.last+=this.cacheSize;var c=0,d=this.getRows();if(b.first<=0){c=b.last+1}for(var a=this.ds.getCount();cb.last)&&d[c].innerHTML){d[c].innerHTML=""}}}},removeTask:function(b){var a=this[b];if(a&&a.cancel){a.cancel();this[b]=null}},destroy:function(){this.removeTask("cleanTask");this.removeTask("renderTask");Ext.ux.grid.BufferView.superclass.destroy.call(this)},layout:function(){Ext.ux.grid.BufferView.superclass.layout.call(this);this.update()}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ns("Ext.ux.form");Ext.ux.form.FileUploadField=Ext.extend(Ext.form.TextField,{buttonText:"Browse...",buttonOnly:false,buttonOffset:3,readOnly:true,autoSize:Ext.emptyFn,initComponent:function(){Ext.ux.form.FileUploadField.superclass.initComponent.call(this);this.addEvents("fileselected")},onRender:function(c,a){Ext.ux.form.FileUploadField.superclass.onRender.call(this,c,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-file-wrap"});this.el.addClass("x-form-file-text");this.el.dom.removeAttribute("name");this.createFileInput();var b=Ext.applyIf(this.buttonCfg||{},{text:this.buttonText});this.button=new Ext.Button(Ext.apply(b,{renderTo:this.wrap,cls:"x-form-file-btn"+(b.iconCls?" x-btn-icon":"")}));if(this.buttonOnly){this.el.hide();this.wrap.setWidth(this.button.getEl().getWidth())}this.bindListeners();this.resizeEl=this.positionEl=this.wrap},bindListeners:function(){this.fileInput.on({scope:this,mouseenter:function(){this.button.addClass(["x-btn-over","x-btn-focus"])},mouseleave:function(){this.button.removeClass(["x-btn-over","x-btn-focus","x-btn-click"])},mousedown:function(){this.button.addClass("x-btn-click")},mouseup:function(){this.button.removeClass(["x-btn-over","x-btn-focus","x-btn-click"])},change:function(){var a=this.fileInput.dom.value;this.setValue(a);this.fireEvent("fileselected",this,a)}})},createFileInput:function(){this.fileInput=this.wrap.createChild({id:this.getFileInputId(),name:this.name||this.getId(),cls:"x-form-file",tag:"input",type:"file",size:1})},reset:function(){if(this.rendered){this.fileInput.remove();this.createFileInput();this.bindListeners()}Ext.ux.form.FileUploadField.superclass.reset.call(this)},getFileInputId:function(){return this.id+"-file"},onResize:function(a,b){Ext.ux.form.FileUploadField.superclass.onResize.call(this,a,b);this.wrap.setWidth(a);if(!this.buttonOnly){var a=this.wrap.getWidth()-this.button.getEl().getWidth()-this.buttonOffset;this.el.setWidth(a)}},onDestroy:function(){Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);Ext.destroy(this.fileInput,this.button,this.wrap)},onDisable:function(){Ext.ux.form.FileUploadField.superclass.onDisable.call(this);this.doDisable(true)},onEnable:function(){Ext.ux.form.FileUploadField.superclass.onEnable.call(this);this.doDisable(false)},doDisable:function(a){this.fileInput.dom.disabled=a;this.button.setDisabled(a)},preFocus:Ext.emptyFn,alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}});Ext.reg("fileuploadfield",Ext.ux.form.FileUploadField);Ext.form.FileUploadField=Ext.ux.form.FileUploadField; +/* + * Ext.ux.form.RadioGroup.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.override(Ext.form.RadioGroup,{afterRender:function(){this.items.each(function(a){this.relayEvents(a,["check"])},this);if(this.lazyValue){this.setValue(this.value);delete this.value;delete this.lazyValue}Ext.form.RadioGroup.superclass.afterRender.call(this)},getName:function(){return this.items.first().getName()},getValue:function(){return this.items.first().getGroupValue()},setValue:function(a){if(!this.items.each){this.value=a;this.lazyValue=true;return}this.items.each(function(c){if(c.rendered){var b=(c.el.getValue()==String(a));c.el.dom.checked=b;c.el.dom.defaultChecked=b;c.wrap[b?"addClass":"removeClass"](c.checkedCls)}})}}); +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ns("Ext.ux.form");Ext.ux.form.SpinnerField=Ext.extend(Ext.form.NumberField,{actionMode:"wrap",deferHeight:true,autoSize:Ext.emptyFn,onBlur:Ext.emptyFn,adjustSize:Ext.BoxComponent.prototype.adjustSize,constructor:function(c){var b=Ext.copyTo({},c,"incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass");var d=this.spinner=new Ext.ux.Spinner(b);var a=c.plugins?(Ext.isArray(c.plugins)?c.plugins.push(d):[c.plugins,d]):d;Ext.ux.form.SpinnerField.superclass.constructor.call(this,Ext.apply(c,{plugins:a}))},getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},validateBlur:function(){return true}});Ext.reg("spinnerfield",Ext.ux.form.SpinnerField);Ext.form.SpinnerField=Ext.ux.form.SpinnerField; +/* + * Ext.ux.form.SpinnerField.js + * + * Copyright (c) Damien Churchill 2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.override(Ext.ux.form.SpinnerField,{onBlur:Ext.form.Field.prototype.onBlur}); +/* + * Ext.ux.form.SpinnerGroup.js + * + * Copyright (c) Damien Churchill 2009-2010 + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.ns("Ext.ux.form");Ext.ux.form.SpinnerGroup=Ext.extend(Ext.form.CheckboxGroup,{defaultType:"spinnerfield",anchor:"98%",groupCls:"x-form-spinner-group",colCfg:{},onRender:function(h,f){if(!this.el){var o={cls:this.groupCls,layout:"column",border:false,renderTo:h};var a=Ext.apply({defaultType:this.defaultType,layout:"form",border:false,labelWidth:60,defaults:{hideLabel:true,anchor:"60%"}},this.colCfg);if(this.items[0].items){Ext.apply(o,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,k=this.items.length;e0&&e%q==0){n++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}m[n].items.push(this.items[e])}}else{for(var e=0,k=this.items.length;e + * + * 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 3, 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. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the OpenSSL + * library. + * You must obey the GNU General Public License in all respects for all of + * the code used other than OpenSSL. If you modify file(s) with this + * exception, you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete + * this exception statement from your version. If you delete this exception + * statement from all source files in the program, then also delete it here. + */ +Ext.namespace("Ext.ux.form");Ext.ux.form.ToggleField=Ext.extend(Ext.form.Field,{cls:"x-toggle-field",initComponent:function(){Ext.ux.form.ToggleField.superclass.initComponent.call(this);this.toggle=new Ext.form.Checkbox();this.toggle.on("check",this.onToggleCheck,this);this.input=new Ext.form.TextField({disabled:true})},onRender:function(b,a){if(!this.el){this.panel=new Ext.Panel({cls:this.groupCls,layout:"table",layoutConfig:{columns:2},border:false,renderTo:b});this.panel.ownerCt=this;this.el=this.panel.getEl();this.panel.add(this.toggle);this.panel.add(this.input);this.panel.doLayout();this.toggle.getEl().parent().setStyle("padding-right","10px")}Ext.ux.form.ToggleField.superclass.onRender.call(this,b,a)},onResize:function(a,b){this.panel.setSize(a,b);this.panel.doLayout();var c=a-this.toggle.getSize().width-25;this.input.setSize(c,b)},onToggleCheck:function(a,b){this.input.setDisabled(!b)}});Ext.reg("togglefield",Ext.ux.form.ToggleField);Ext.ux.JSLoader=function(options){Ext.ux.JSLoader.scripts[++Ext.ux.JSLoader.index]={url:options.url,success:true,jsLoadObj:null,options:options,onLoad:options.onLoad||Ext.emptyFn,onError:options.onError||Ext.ux.JSLoader.stdError,scope:options.scope||this};Ext.Ajax.request({url:options.url,scriptIndex:Ext.ux.JSLoader.index,success:function(response,options){var script=Ext.ux.JSLoader.scripts[options.scriptIndex];try{eval(response.responseText)}catch(e){script.success=false;script.onError(script.options,e)}if(script.success){script.onLoad.call(script.scope,script.options)}},failure:function(response,options){var script=Ext.ux.JSLoader.scripts[options.scriptIndex];script.success=false;script.onError(script.options,response.status)}})};Ext.ux.JSLoader.index=0;Ext.ux.JSLoader.scripts=[];Ext.ux.JSLoader.stdError=function(a,b){window.alert("Error loading script:\n\n"+a.url+"\n\nstatus: "+b)} +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +;Ext.ux.Spinner=Ext.extend(Ext.util.Observable,{incrementValue:1,alternateIncrementValue:5,triggerClass:"x-form-spinner-trigger",splitterClass:"x-form-spinner-splitter",alternateKey:Ext.EventObject.shiftKey,defaultValue:0,accelerate:false,constructor:function(a){Ext.ux.Spinner.superclass.constructor.call(this,a);Ext.apply(this,a);this.mimicing=false},init:function(a){this.field=a;a.afterMethod("onRender",this.doRender,this);a.afterMethod("onEnable",this.doEnable,this);a.afterMethod("onDisable",this.doDisable,this);a.afterMethod("afterRender",this.doAfterRender,this);a.afterMethod("onResize",this.doResize,this);a.afterMethod("onFocus",this.doFocus,this);a.beforeMethod("onDestroy",this.doDestroy,this)},doRender:function(b,a){var c=this.el=this.field.getEl();var d=this.field;if(!d.wrap){d.wrap=this.wrap=c.wrap({cls:"x-form-field-wrap"})}else{this.wrap=d.wrap.addClass("x-form-field-wrap")}this.trigger=this.wrap.createChild({tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(!d.width){this.wrap.setWidth(c.getWidth()+this.trigger.getWidth())}this.splitter=this.wrap.createChild({tag:"div",cls:this.splitterClass,style:"width:13px; height:2px;"});this.splitter.setRight((Ext.isIE)?1:2).setTop(10).show();this.proxy=this.trigger.createProxy("",this.splitter,true);this.proxy.addClass("x-form-spinner-proxy");this.proxy.setStyle("left","0px");this.proxy.setSize(14,1);this.proxy.hide();this.dd=new Ext.dd.DDProxy(this.splitter.dom.id,"SpinnerDrag",{dragElId:this.proxy.id});this.initTrigger();this.initSpinner()},doAfterRender:function(){var a;if(Ext.isIE&&this.el.getY()!=(a=this.trigger.getY())){this.el.position();this.el.setY(a)}},doEnable:function(){if(this.wrap){this.disabled=false;this.wrap.removeClass(this.field.disabledClass)}},doDisable:function(){if(this.wrap){this.disabled=true;this.wrap.addClass(this.field.disabledClass);this.el.removeClass(this.field.disabledClass)}},doResize:function(a,b){if(typeof a=="number"){this.el.setWidth(a-this.trigger.getWidth())}this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())},doFocus:function(){if(!this.mimicing){this.wrap.addClass("x-trigger-wrap-focus");this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});this.el.on("keydown",this.checkTab,this)}},checkTab:function(a){if(a.getKey()==a.TAB){this.triggerBlur()}},mimicBlur:function(a){if(!this.wrap.contains(a.target)&&this.field.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);this.el.un("keydown",this.checkTab,this);this.field.beforeBlur();this.wrap.removeClass("x-trigger-wrap-focus");this.field.onBlur.call(this.field)},initTrigger:function(){this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},initSpinner:function(){this.field.addEvents({spin:true,spinup:true,spindown:true});this.keyNav=new Ext.KeyNav(this.el,{up:function(a){a.preventDefault();this.onSpinUp()},down:function(a){a.preventDefault();this.onSpinDown()},pageUp:function(a){a.preventDefault();this.onSpinUpAlternate()},pageDown:function(a){a.preventDefault();this.onSpinDownAlternate()},scope:this});this.repeater=new Ext.util.ClickRepeater(this.trigger,{accelerate:this.accelerate});this.field.mon(this.repeater,"click",this.onTriggerClick,this,{preventDefault:true});this.field.mon(this.trigger,{mouseover:this.onMouseOver,mouseout:this.onMouseOut,mousemove:this.onMouseMove,mousedown:this.onMouseDown,mouseup:this.onMouseUp,scope:this,preventDefault:true});this.field.mon(this.wrap,"mousewheel",this.handleMouseWheel,this);this.dd.setXConstraint(0,0,10);this.dd.setYConstraint(1500,1500,10);this.dd.endDrag=this.endDrag.createDelegate(this);this.dd.startDrag=this.startDrag.createDelegate(this);this.dd.onDrag=this.onDrag.createDelegate(this)},onMouseOver:function(){if(this.disabled){return}var a=this.getMiddle();this.tmpHoverClass=(Ext.EventObject.getPageY()a)&&this.tmpHoverClass=="x-form-spinner-overup")||((Ext.EventObject.getPageY()0){this.onSpinUp();a.stopEvent()}else{if(b<0){this.onSpinDown();a.stopEvent()}}},startDrag:function(){this.proxy.show();this._previousY=Ext.fly(this.dd.getDragEl()).getTop()},endDrag:function(){this.proxy.hide()},onDrag:function(){if(this.disabled){return}var b=Ext.fly(this.dd.getDragEl()).getTop();var a="";if(this._previousY>b){a="Up"}if(this._previousYthis.field.maxValue){a=this.field.maxValue}return this.fixPrecision(a)},fixPrecision:function(b){var a=isNaN(b);if(!this.field.allowDecimals||this.field.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.field.decimalPrecision))},doDestroy:function(){if(this.trigger){this.trigger.remove()}if(this.wrap){this.wrap.remove();delete this.field.wrap}if(this.splitter){this.splitter.remove()}if(this.dd){this.dd.unreg();this.dd=null}if(this.proxy){this.proxy.remove()}if(this.repeater){this.repeater.purgeListeners()}if(this.mimicing){Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this)}}});Ext.form.Spinner=Ext.ux.Spinner; +/* + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +Ext.ux.StatusBar=Ext.extend(Ext.Toolbar,{cls:"x-statusbar",busyIconCls:"x-status-busy",busyText:"Loading...",autoClear:5000,emptyText:" ",activeThreadId:0,initComponent:function(){if(this.statusAlign=="right"){this.cls+=" x-status-right"}Ext.ux.StatusBar.superclass.initComponent.call(this)},afterRender:function(){Ext.ux.StatusBar.superclass.afterRender.call(this);var a=this.statusAlign=="right";this.currIconCls=this.iconCls||this.defaultIconCls;this.statusEl=new Ext.Toolbar.TextItem({cls:"x-status-text "+(this.currIconCls||""),text:this.text||this.defaultText||""});if(a){this.add("->");this.add(this.statusEl)}else{this.insert(0,this.statusEl);this.insert(1,"->")}this.doLayout()},setStatus:function(d){d=d||{};if(typeof d=="string"){d={text:d}}if(d.text!==undefined){this.setText(d.text)}if(d.iconCls!==undefined){this.setIcon(d.iconCls)}if(d.clear){var e=d.clear,b=this.autoClear,a={useDefaults:true,anim:true};if(typeof e=="object"){e=Ext.applyIf(e,a);if(e.wait){b=e.wait}}else{if(typeof e=="number"){b=e;e=a}else{if(typeof e=="boolean"){e=a}}}e.threadId=this.activeThreadId;this.clearStatus.defer(b,this,[e])}return this},clearStatus:function(c){c=c||{};if(c.threadId&&c.threadId!==this.activeThreadId){return this}var b=c.useDefaults?this.defaultText:this.emptyText,a=c.useDefaults?(this.defaultIconCls?this.defaultIconCls:""):"";if(c.anim){this.statusEl.el.fadeOut({remove:false,useDisplay:true,scope:this,callback:function(){this.setStatus({text:b,iconCls:a});this.statusEl.el.show()}})}else{this.statusEl.hide();this.setStatus({text:b,iconCls:a});this.statusEl.show()}return this},setText:function(a){this.activeThreadId++;this.text=a||"";if(this.rendered){this.statusEl.setText(this.text)}return this},getText:function(){return this.text},setIcon:function(a){this.activeThreadId++;a=a||"";if(this.rendered){if(this.currIconCls){this.statusEl.removeClass(this.currIconCls);this.currIconCls=null}if(a.length>0){this.statusEl.addClass(a);this.currIconCls=a}}else{this.currIconCls=a}return this},showBusy:function(a){if(typeof a=="string"){a={text:a}}a=Ext.applyIf(a||{},{text:this.busyText,iconCls:this.busyIconCls});return this.setStatus(a)}});Ext.reg("statusbar",Ext.ux.StatusBar); \ No newline at end of file diff -Nru deluge-1.3.12/deluge/ui/web/json_api.py deluge-1.3.13/deluge/ui/web/json_api.py --- deluge-1.3.12/deluge/ui/web/json_api.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/json_api.py 2016-07-20 14:23:28.000000000 +0000 @@ -150,13 +150,21 @@ return d.addCallback(on_client_connected) def disable(self): - if not client.is_classicmode(): + client.deregister_event_handler("PluginEnabledEvent", self.get_remote_methods) + client.deregister_event_handler("PluginDisabledEvent", self.get_remote_methods) + + if client.is_classicmode(): + component.get("Web.PluginManager").stop() + else: client.disconnect() def enable(self): client.register_event_handler("PluginEnabledEvent", self.get_remote_methods) client.register_event_handler("PluginDisabledEvent", self.get_remote_methods) - if component.get("DelugeWeb").config["default_daemon"]: + + if client.is_classicmode(): + component.get("Web.PluginManager").start() + elif component.get("DelugeWeb").config["default_daemon"]: # Sort out getting the default daemon here default = component.get("DelugeWeb").config["default_daemon"] host = component.get("Web").get_host(default) @@ -428,6 +436,8 @@ def __init__(self): super(WebApi, self).__init__("Web", depend=["SessionProxy"]) self.host_list = ConfigManager("hostlist.conf.1.2", DEFAULT_HOSTS) + if not os.path.isfile(self.host_list.config_file): + self.host_list.save() self.core_config = CoreConfig() self.event_queue = EventQueue() try: @@ -730,7 +740,11 @@ if param.startswith(xt_param): xt_hash = param[len(xt_param):] if len(xt_hash) == 32: - info_hash = base64.b32decode(xt_hash).encode("hex") + try: + info_hash = base64.b32decode(xt_hash.upper()).encode("hex") + except TypeError, ex: + log.debug("Invalid base32 magnet hash: %s, %s", xt_hash, ex) + break elif len(xt_hash) == 40: info_hash = xt_hash else: diff -Nru deluge-1.3.12/deluge/ui/web/pluginmanager.py deluge-1.3.13/deluge/ui/web/pluginmanager.py --- deluge-1.3.12/deluge/ui/web/pluginmanager.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/pluginmanager.py 2016-07-20 14:23:28.000000000 +0000 @@ -83,7 +83,7 @@ try: plugin = component.get("WebPlugin." + name) except KeyError: - log.info("Plugin has no web ui") + log.debug("'%s' plugin contains no WebUI code, ignoring WebUI disable call.", name) return info = gather_info(plugin) @@ -105,7 +105,7 @@ try: plugin = component.get("WebPlugin." + name) except KeyError: - log.info("Plugin has no web ui") + log.info("'%s' plugin contains no WebUI code, ignoring WebUI enable call.", name) return info = gather_info(plugin) diff -Nru deluge-1.3.12/deluge/ui/web/server.py deluge-1.3.13/deluge/ui/web/server.py --- deluge-1.3.12/deluge/ui/web/server.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/deluge/ui/web/server.py 2016-07-20 14:23:28.000000000 +0000 @@ -32,6 +32,7 @@ # statement from all source files in the program, then also delete it here. # # +from __future__ import with_statement import os import time @@ -46,9 +47,10 @@ import mimetypes import pkg_resources +from OpenSSL.crypto import FILETYPE_PEM from twisted.application import service, internet from twisted.internet import reactor, defer, error -from twisted.internet.ssl import SSL +from twisted.internet.ssl import SSL, Certificate, CertificateOptions, KeyPair from twisted.web import http, resource, server, static from deluge import common, component, configmanager @@ -580,20 +582,6 @@ return template.render(scripts=scripts, stylesheets=self.stylesheets, debug=debug, base=request.base, js_config=js_config) -class ServerContextFactory: - - def getContext(self): - """Creates an SSL context.""" - ctx = SSL.Context(SSL.SSLv23_METHOD) - ctx.set_options(SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3) - deluge_web = component.get("DelugeWeb") - log.debug("Enabling SSL using:") - log.debug("Pkey: %s", deluge_web.pkey) - log.debug("Cert: %s", deluge_web.cert) - ctx.use_privatekey_file(configmanager.get_config_dir(deluge_web.pkey)) - ctx.use_certificate_chain_file(configmanager.get_config_dir(deluge_web.cert)) - return ctx - class DelugeWeb(component.Component): def __init__(self): @@ -676,10 +664,18 @@ self.port, self.port) def start_ssl(self): + log.debug("Enabling SSL with PKey: %s, Cert: %s", self.pkey, self.cert) check_ssl_keys() - self.socket = reactor.listenSSL(self.port, self.site, ServerContextFactory()) - log.info("serving on %s:%s view at https://127.0.0.1:%s", "0.0.0.0", - self.port, self.port) + + with open(configmanager.get_config_dir(self.cert)) as cert: + certificate = Certificate.loadPEM(cert.read()).original + with open(configmanager.get_config_dir(self.pkey)) as pkey: + private_key = KeyPair.load(pkey.read(), FILETYPE_PEM).original + options = CertificateOptions(privateKey=private_key, certificate=certificate, method=SSL.SSLv23_METHOD) + options.getContext().set_options(SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3) + + self.socket = reactor.listenSSL(self.port, self.site, options) + log.info("Serving on %s:%s view at https://127.0.0.1:%s", "0.0.0.0", self.port, self.port) def stop(self): log.info("Shutting down webserver") diff -Nru deluge-1.3.12/docs/man/deluge.1 deluge-1.3.13/docs/man/deluge.1 --- deluge-1.3.12/docs/man/deluge.1 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/docs/man/deluge.1 2016-07-20 14:23:28.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DELUGE 1 "September 2015" "1.3.12" +.TH DELUGE 1 "July 2016" "1.3.13" .SH NAME deluge - a bittorrent client diff -Nru deluge-1.3.12/docs/man/deluge-console.1 deluge-1.3.13/docs/man/deluge-console.1 --- deluge-1.3.12/docs/man/deluge-console.1 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/docs/man/deluge-console.1 2016-07-20 14:23:28.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DELUGE-CONSOLE 1 "September 2015" "1.3.12" +.TH DELUGE-CONSOLE 1 "July 2016" "1.3.13" .SH NAME deluge-console - a bittorrent client curses interface diff -Nru deluge-1.3.12/docs/man/deluged.1 deluge-1.3.13/docs/man/deluged.1 --- deluge-1.3.12/docs/man/deluged.1 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/docs/man/deluged.1 2016-07-20 14:23:28.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DELUGED 1 "September 2015" "1.3.12" +.TH DELUGED 1 "July 2016" "1.3.13" .SH NAME deluged - a bittorrent client daemon diff -Nru deluge-1.3.12/docs/man/deluge-gtk.1 deluge-1.3.13/docs/man/deluge-gtk.1 --- deluge-1.3.12/docs/man/deluge-gtk.1 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/docs/man/deluge-gtk.1 2016-07-20 14:23:28.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DELUGE-GTK 1 "September 2015" "1.3.12" +.TH DELUGE-GTK 1 "July 2016" "1.3.13" .SH NAME deluge-gtk - a bittorrent client gtk interface diff -Nru deluge-1.3.12/docs/man/deluge-web.1 deluge-1.3.13/docs/man/deluge-web.1 --- deluge-1.3.12/docs/man/deluge-web.1 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/docs/man/deluge-web.1 2016-07-20 14:23:28.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DELUGE-WEB 1 "September 2015" "1.3.12" +.TH DELUGE-WEB 1 "July 2016" "1.3.13" .SH NAME deluge-web - a bittorrent client ajax web interface diff -Nru deluge-1.3.12/setup.py deluge-1.3.13/setup.py --- deluge-1.3.12/setup.py 2015-09-13 20:32:11.000000000 +0000 +++ deluge-1.3.13/setup.py 2016-07-20 14:23:28.000000000 +0000 @@ -489,7 +489,7 @@ # Data files to be installed to the system. _data_files = [] -if not windows_check(): +if not windows_check() and not osx_check(): _data_files = [ ('share/icons/hicolor/scalable/apps', ['deluge/data/icons/scalable/apps/deluge.svg']), ('share/icons/hicolor/128x128/apps', ['deluge/data/icons/hicolor/128x128/apps/deluge.png']), @@ -535,7 +535,7 @@ # Main setup setup( name = "deluge", - version = "1.3.12", + version = "1.3.13", fullname = "Deluge Bittorrent Client", description = "Bittorrent Client", author = "Andrew Resch, Damien Churchill",