aboutsummaryrefslogtreecommitdiff
path: root/net-p2p
diff options
context:
space:
mode:
authorMario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>2006-07-29 21:52:20 +0000
committerMario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>2006-07-29 21:52:20 +0000
commit3e106f9085f24e5065dbb0bc6315f51092db2758 (patch)
tree0e9e564f187a1d0fecce2b330e996003e3e3953d /net-p2p
parent5fdf8e12dc600334f91204881c18749e19fa9558 (diff)
downloadports-3e106f9085f24e5065dbb0bc6315f51092db2758.tar.gz
ports-3e106f9085f24e5065dbb0bc6315f51092db2758.zip
Notes
Diffstat (limited to 'net-p2p')
-rw-r--r--net-p2p/py-bittorrent-devel/Makefile2
-rw-r--r--net-p2p/py-bittorrent-devel/distinfo6
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py11
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py4
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py35
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py35
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py4
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py16
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py56
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py15
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py15
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py8
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py599
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py12
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py44
-rw-r--r--net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py50
-rw-r--r--net-p2p/py-bittorrent-devel/pkg-plist48
17 files changed, 645 insertions, 315 deletions
diff --git a/net-p2p/py-bittorrent-devel/Makefile b/net-p2p/py-bittorrent-devel/Makefile
index b0933eb96a3f..8fe79dc4c58c 100644
--- a/net-p2p/py-bittorrent-devel/Makefile
+++ b/net-p2p/py-bittorrent-devel/Makefile
@@ -6,7 +6,7 @@
#
PORTNAME= BitTorrent
-PORTVERSION= 4.20.0
+PORTVERSION= 4.20.4
PORTEPOCH= 1
CATEGORIES?= net-p2p python
MASTER_SITES= http://download.bittorrent.com/dl/
diff --git a/net-p2p/py-bittorrent-devel/distinfo b/net-p2p/py-bittorrent-devel/distinfo
index 2207cb72233e..df01d12055a2 100644
--- a/net-p2p/py-bittorrent-devel/distinfo
+++ b/net-p2p/py-bittorrent-devel/distinfo
@@ -1,3 +1,3 @@
-MD5 (BitTorrent-4.20.0.tar.gz) = eb4568ec465421b03827bd5665395a62
-SHA256 (BitTorrent-4.20.0.tar.gz) = 70a78b693336cca4723f3a10eedc97eb88be7b20320f90b3bfee640ea4c14970
-SIZE (BitTorrent-4.20.0.tar.gz) = 2372371
+MD5 (BitTorrent-4.20.4.tar.gz) = 6616f6ae8a8460804ce43b3cf4b6f73b
+SHA256 (BitTorrent-4.20.4.tar.gz) = 54a231c6f95175fab6e493fef1e726f7f198d84396f0d6e5d6541db77b545d69
+SIZE (BitTorrent-4.20.4.tar.gz) = 2395512
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py
new file mode 100644
index 000000000000..f70e5ea80595
--- /dev/null
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__AutoUpdateButler.py
@@ -0,0 +1,11 @@
+--- ./BitTorrent/AutoUpdateButler.py.orig Fri Jul 28 23:30:10 2006
++++ ./BitTorrent/AutoUpdateButler.py Fri Jul 28 23:29:47 2006
+@@ -375,7 +375,7 @@
+ self.multitorrent.remove_auto_updates_except(infohash)
+
+ try:
+- df = self.multitorrent.create_torrent(metainfo, installer_path, installer_path, hidden=True, is_auto_update=True)
++ df = self.multitorrent.create_torrent(metainfo, installer_path, installer_path, installer_path, installer_path, hidden=True, is_auto_update=True)
+ yield df
+ df.getResult()
+ except TorrentAlreadyRunning:
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py
index 5d238869dd4e..c2a4671a75d2 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__HTTPHandler.py
@@ -1,5 +1,5 @@
---- ./BitTorrent/HTTPHandler.py.orig Mon Jun 12 22:45:48 2006
-+++ ./BitTorrent/HTTPHandler.py Wed Jun 21 23:57:08 2006
+--- ./BitTorrent/HTTPHandler.py.orig Wed Jul 12 02:18:18 2006
++++ ./BitTorrent/HTTPHandler.py Sat Jul 22 17:42:24 2006
@@ -19,7 +19,7 @@
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py
new file mode 100644
index 000000000000..4e805f6facfe
--- /dev/null
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__MultiTorrent.py
@@ -0,0 +1,35 @@
+--- ./BitTorrent/MultiTorrent.py.orig Mon Jul 24 00:58:59 2006
++++ ./BitTorrent/MultiTorrent.py Sat Jul 29 00:02:03 2006
+@@ -270,6 +270,8 @@
+ self.logger.log(severity, message, exc_info=exc_info)
+
+ def create_torrent(self, metainfo, save_incomplete_as, save_as,
++ saveas_style_save_incomplete_as=None,
++ saveas_style_save_as=None,
+ hidden=False, is_auto_update=False):
+ if self.is_single_torrent and len(self.torrents) > 0:
+ print "create_torrent: len(self.torrents)=", len(self.torrents)
+@@ -295,9 +297,11 @@
+ infohash,
+ lambda s : self.global_error(logging.ERROR, s))
+
+- t = Torrent(metainfo, save_incomplete_as, save_as, self.config,
+- self.data_dir, self.rawserver, self.choker,
+- self.singleport_listener, self.ratelimiter,
++ t = Torrent(metainfo, save_incomplete_as, save_as,
++ saveas_style_save_incomplete_as,
++ saveas_style_save_as,
++ self.config, self.data_dir, self.rawserver,
++ self.choker, self.singleport_listener, self.ratelimiter,
+ self.total_downmeasure, self.filepool, self.dht, self,
+ self.log_root, hidden=hidden, is_auto_update=is_auto_update)
+ retdf = Deferred()
+@@ -686,7 +690,7 @@
+ '('+unicode(e.args[0])+')')
+ return None
+
+- t = Torrent(metainfo, "", "", self.config, self.data_dir,
++ t = Torrent(metainfo, "", "", "", "", self.config, self.data_dir,
+ self.rawserver, self.choker,
+ self.singleport_listener, self.ratelimiter,
+ self.total_downmeasure, self.filepool, self.dht, self,
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py
new file mode 100644
index 000000000000..f972188f3e18
--- /dev/null
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__NewRateLimiter.py
@@ -0,0 +1,35 @@
+--- ./BitTorrent/NewRateLimiter.py.orig Wed Jul 12 02:18:21 2006
++++ ./BitTorrent/NewRateLimiter.py Sat Jul 22 17:42:24 2006
+@@ -144,24 +144,14 @@
+ def restart_loop(self, t):
+ # check for pending loop event
+ if self.task and not self.task.called:
+- ## look at when it's scheduled to occur
+- # we can special case events which have a delta of 0, since they
+- # should occur asap. no need to check the time.
+- if self.task.delta == 0:
+- return
+- # use time.time since twisted does anyway
+- s = self.task.getTime() - time.time()
+- if s > t:
+- # if it would occur after the time we want, reset it
+- self.task.reset(t)
+- self.task.delta = t
+- else:
+- if t == 0:
+- # don't spin the event loop needlessly
+- self.run()
+- else:
+- self.task = self.add_task(t, self.run)
+- self.task.delta = t
++ # look at when it's scheduled to occur
++ s = self.task.getTime() - bttime()
++ if s <= t:
++ return
++ # if it would occur after the time we want, cancel it
++ self.task.cancel()
++
++ self.task = self.add_task(t, self.run)
+
+ def _write(self, to_write):
+ amount = 0
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py
index 674116757c1f..ca4c402e45e0 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__OldTorrentQueue.py
@@ -1,5 +1,5 @@
---- ./BitTorrent/OldTorrentQueue.py.orig Mon Jun 12 22:45:49 2006
-+++ ./BitTorrent/OldTorrentQueue.py Wed Jun 21 23:57:08 2006
+--- ./BitTorrent/OldTorrentQueue.py.orig Wed Jul 12 02:18:22 2006
++++ ./BitTorrent/OldTorrentQueue.py Sat Jul 22 17:42:24 2006
@@ -20,7 +20,7 @@
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py
index bb710766199c..acf24f0cdad7 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Rerequester.py
@@ -1,16 +1,6 @@
---- BitTorrent/Rerequester.py.orig Sat Jun 24 08:14:52 2006
-+++ BitTorrent/Rerequester.py Sat Jun 24 08:22:14 2006
-@@ -180,8 +180,8 @@
- def _check(self):
- assert thread.get_ident() == self.rawserver.ident
- assert not self.dead
-- self.errorfunc(logging.INFO, 'check: ' + str(self.current_started))
- if self.current_started is not None:
-+ self.errorfunc(logging.INFO, 'check: ' + str(self.current_started))
- if self.current_started <= bttime() - 58:
- self.errorfunc(logging.WARNING,
- _("Tracker announce still not complete "
-@@ -352,7 +352,8 @@
+--- ./BitTorrent/Rerequester.py.orig Wed Jul 12 02:18:25 2006
++++ ./BitTorrent/Rerequester.py Sat Jul 22 17:42:24 2006
+@@ -369,7 +369,8 @@
def _postrequest(self, data=None, errormsg=None, exc=None, peerid=None):
assert thread.get_ident() == self.rawserver.ident
self.current_started = None
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py
index dc31ea318eb1..6b59f773ed70 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__Torrent.py
@@ -1,6 +1,39 @@
---- ./BitTorrent/Torrent.py.orig Mon Jun 12 22:45:53 2006
-+++ ./BitTorrent/Torrent.py Wed Jun 21 23:57:08 2006
-@@ -234,6 +234,9 @@
+--- ./BitTorrent/Torrent.py.orig Wed Jul 12 02:18:28 2006
++++ ./BitTorrent/Torrent.py Sat Jul 29 00:08:59 2006
+@@ -58,7 +58,6 @@
+
+ from khashmir import const
+
+-
+ class Feedback(object):
+ """Inidivual torrents (Torrent) perform callbacks regarding
+ changes of state to the rest of the program via a Feedback
+@@ -90,8 +89,9 @@
+ POLICIES = ["stop", "start", "auto"]
+ PRIORITIES = ["low", "normal", "high"]
+
+- def __init__(self, metainfo, working_path, destination_path, config,
+- data_dir, rawserver, choker,
++ def __init__(self, metainfo, working_path, destination_path,
++ saveas_style_working_path, saveas_style_destination_path,
++ config, data_dir, rawserver, choker,
+ singleport_listener, ratelimiter, total_downmeasure,
+ filepool, dht, feedback, log_root,
+ hidden=False, is_auto_update=False):
+@@ -152,8 +152,11 @@
+
+ self.config = Preferences(config)#, persist_callback=self._dump_torrent_config)
+ self.working_path = working_path #sets in config. See _set_working_path
+-
+ self.destination_path = destination_path # sets in config.
++
++ self.saveas_style_working_path = saveas_style_working_path
++ self.saveas_style_destination_path = saveas_style_destination_path
++
+ self.priority = "normal"
+ self.policy = "auto"
+
+@@ -258,6 +261,9 @@
def is_running(self):
return self.state == "running"
@@ -9,3 +42,20 @@
+
def is_context_valid(self):
return self.context_valid
+
+@@ -819,8 +825,13 @@
+ self.logger.debug("successfully paused torrent, moving file")
+
+ self.state = "finishing"
+- df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task),
+- move, self.working_path, self.destination_path)
++ if self.saveas_style_working_path is not None and self.saveas_style_destination_path is not None:
++ df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task),
++ move, self.saveas_style_working_path,
++ self.saveas_style_destination_path)
++ else:
++ df = ThreadedDeferred(_wrap_task(self._rawserver.external_add_task),
++ move, self.working_path, self.destination_path)
+ yield df
+ df.getResult()
+
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py
new file mode 100644
index 000000000000..5d60552e6e3a
--- /dev/null
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XMultiTorrent.py
@@ -0,0 +1,15 @@
+--- ./BitTorrent/XMultiTorrent.py.orig Fri Jul 28 23:25:45 2006
++++ ./BitTorrent/XMultiTorrent.py Fri Jul 28 23:27:31 2006
+@@ -50,10 +50,10 @@
+
+ return Binary(infohash)
+
+- def _create_torrent(self, torrent, dlpath):
++ def _create_torrent(self, torrent, save_incomplete_as, save_as):
+ d = bdecode(torrent)
+ metainfo = ConvertedMetainfo(d)
+- self.multitorrent.create_torrent(metainfo, dlpath)
++ self.multitorrent.create_torrent(metainfo, save_incomplete_as, save_as)
+ return metainfo.infohash
+
+ def xmlrpc_start_torrent(self, infohash):
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py
new file mode 100644
index 000000000000..42420a514b0f
--- /dev/null
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__XTorrentQueue.py
@@ -0,0 +1,15 @@
+--- ./BitTorrent/XTorrentQueue.py.orig Fri Jul 28 23:27:55 2006
++++ ./BitTorrent/XTorrentQueue.py Fri Jul 28 23:28:20 2006
+@@ -32,10 +32,10 @@
+
+ return Binary(infohash)
+
+- def _create_torrent(self, torrent, dlpath):
++ def _create_torrent(self, torrent, save_incomplete_as, save_as):
+ d = bdecode(torrent)
+ metainfo = ConvertedMetainfo(d)
+- self.tq.create_torrent(metainfo, dlpath)
++ self.tq.create_torrent(metainfo, save_incomplete_as, save_as)
+ return metainfo.infohash
+
+ def xmlrpc_start_torrent(self, infohash):
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py
index 4d60a10a5029..0befcfd6c20f 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__defaultargs.py
@@ -1,5 +1,5 @@
---- ./BitTorrent/defaultargs.py.orig Mon Jun 12 22:45:58 2006
-+++ ./BitTorrent/defaultargs.py Wed Jun 21 23:57:08 2006
+--- ./BitTorrent/defaultargs.py.orig Wed Jul 12 02:18:33 2006
++++ ./BitTorrent/defaultargs.py Sat Jul 22 17:42:24 2006
@@ -20,6 +20,8 @@
if os.name == 'posix':
if os.uname()[0] in ['Darwin']:
@@ -9,11 +9,11 @@
MAX_INCOMPLETE = 100
MAX_FILES_OPEN = 50
-@@ -372,6 +374,10 @@
+@@ -376,6 +378,10 @@
"name determined by --saveas_style. If this is left empty "
"each torrent will be saved under the directory of the "
"corresponding .torrent file")),
-+ ('save_incomplete_in', '',
++ ('save_incomplete_in', u'',
+ _("local directory where the incomplete torrent downloads will be "
+ "stored until completion. Upon completion, downloads will be "
+ "moved to the directory specified by --save_in.")),
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py
index e28dd0ad0ddc..e669d2bde00a 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__launchmanycore.py
@@ -1,247 +1,445 @@
---- BitTorrent/launchmanycore.py.orig Mon Jun 12 22:45:59 2006
-+++ BitTorrent/launchmanycore.py Sat Jun 24 14:47:28 2006
-@@ -13,28 +13,33 @@
- # Original version written by John Hoffman, heavily modified for different
- # multitorrent architecture by Uoti Urpala (over 40% shorter than original)
-
--raise ImportError("launchmanycore has not been ported to the 5.0 backend. Please look for it in a future release. Thanks for your patience.")
--
- import os
- from cStringIO import StringIO
+--- ./BitTorrent/launchmanycore.py.orig Wed Jul 12 02:18:34 2006
++++ ./BitTorrent/launchmanycore.py Fri Jul 28 23:45:22 2006
+@@ -22,14 +22,17 @@
from traceback import print_exc
- from BitTorrent.translation import _
-
-+from BitTorrent import BTFailure
+ import logging
from BitTorrent import configfile
--from BitTorrent.parsedir import parsedir
--from BitTorrent.download import Multitorrent, Feedback
-+from BitTorrent import zurllib
-+from BitTorrent.AutoUpdateButler import AutoUpdateButler
++from BitTorrent import platform
+ from BitTorrent.parsedir import parsedir
+-from BitTorrent.MultiTorrent import MultiTorrent, Feedback
++from BitTorrent.MultiTorrent import MultiTorrent, Feedback, TorrentAlreadyRunning, TorrentAlreadyInQueue, TorrentNotInitialized
from BitTorrent.ConvertedMetainfo import ConvertedMetainfo
--from BitTorrent import BTFailure
-+from BitTorrent.MultiTorrent import MultiTorrent, TorrentAlreadyRunning, TorrentAlreadyInQueue, TorrentNotInitialized
-+from BitTorrent.RawServer_twisted import RawServer
-+from BitTorrent.Torrent import Torrent
-+from BitTorrent.TorrentPolicy import Policy
-+from BitTorrent.defer import DeferredEvent
-+from BitTorrent.parsedir import parsedir
+ from BitTorrent import BTFailure, UserFailure
+ from BitTorrent.RawServer_twisted import RawServer
+ from BitTorrent.yielddefer import launch_coroutine, _wrap_task
+ from BitTorrent.ConvertedMetainfo import ConvertedMetainfo
+ from BitTorrent.defer import DeferredEvent
++from BitTorrent.platform import encode_for_filesystem
+from BitTorrent.prefs import Preferences
-
--from threading import Event
from time import time
--
--class LaunchMany(Feedback):
-+class LaunchMany(Policy):
- def __init__(self, config, output, configfile_key):
-+ zurllib.add_unsafe_thread()
-+
- try:
-- self.config = config
-+ self.config = Preferences().initWithDict(config)
- self.output = output
- self.configfile_key = configfile_key
+@@ -51,13 +54,13 @@
+ # logger Formatter, which is specific to exceptions, warnings, and
+ # info messages.
+ try:
++ self.display = display.display
+ self.logger = logging.getLogger(configfile_key)
+
+ self.multitorrent = None
+ self.rawserver = None
+- self.config = config
++ self.config = Preferences().initWithDict(config)
+ self.configfile_key = configfile_key
+- self.display = display
-@@ -45,15 +50,30 @@
-
- self.torrent_list = []
- self.downloads = {}
-- self.doneflag = Event()
-+
-+ self.doneflag = DeferredEvent()
-+ self.rawserver_doneflag = DeferredEvent()
+ self.torrent_dir = config['torrent_dir']
- self.hashcheck_queue = []
- self.hashcheck_store = {}
-- self.hashcheck_current = None
+@@ -78,30 +81,31 @@
-- self.multitorrent = MultiTorrent(config, self.doneflag,
-- self.global_error)
-- self.rawserver = self.multitorrent.rawserver
-+ self.rawserver = RawServer(self.config)
-+ zurllib.set_zurllib_rawserver(self.rawserver)
-+ self.rawserver.associate_thread()
-+
+ self.hashcheck_queue = []
+ self.hashcheck_store = {}
+- self.hashcheck_current = None
+
+ self.core_doneflag = DeferredEvent()
+- rawserver_doneflag = DeferredEvent()
++ self.rawserver_doneflag = DeferredEvent()
+ self.rawserver = RawServer(self.config)
+ try:
+
+ # set up shut-down procedure before we begin doing things that
+ # can throw exceptions.
+ def shutdown():
+- print "SHUTDOWNSHUTDOWNSHUTDOWN"
++ #print "SHUTDOWNSHUTDOWNSHUTDOWN"
+ self.logger.critical(_("shutting down"))
+- for infohash in self.multitorrent.get_torrents():
+- self.logger.info(_('dropped "%s"') %
+- self.torrent_cache[infohash]['path'])
+- # torrent = self.downloads[infohash]
+- # if torrent is not None:
+- # torrent.shutdown()
++ for torrent in self.multitorrent.get_torrents():
++ try:
++ removed = self.torrent_cache[torrent.infohash]['path']
++ self.logger.info(_('dropped "%s"') % removed)
++ except KeyError:
++ pass
++ if torrent is not None:
++ torrent.shutdown()
+ if self.multitorrent:
+ df = self.multitorrent.shutdown()
+- set_flag = lambda *a : rawserver_doneflag.set()
++ set_flag = lambda *a : self.rawserver_doneflag.set()
+ df.addCallbacks(set_flag, set_flag)
+ else:
+- rawserver_doneflag.set()
++ self.rawserver_doneflag.set()
+
+ # It is safe to addCallback here, because there is only one thread,
+ # but even if the code were multi-threaded, core_doneflag has not
+@@ -112,9 +116,9 @@
+
+ self.rawserver.install_sigint_handler(self.core_doneflag)
+
+- data_dir = config['data_dir']
+- print "Creating MultiTorrent"
+- self.multitorrent = MultiTorrent(config, self.rawserver, data_dir)
+ data_dir = self.config['data_dir']
-+ self.multitorrent = \
-+ MultiTorrent(self.config, self.doneflag, self.rawserver, data_dir)
-+
-+ # to handle the callbacks
-+ self.multitorrent.add_policy(self)
-+
-+# auto_update_butler = AutoUpdateButler(self.multitorrent, self.rawserver,
-+# test_new_version=self.config['new_version'],
-+# test_current_version=self.config['current_version'])
-+# self.multitorrent.add_auto_update_policy(auto_update_butler)
-+# self.rawserver.add_task(0, auto_update_butler.check_version)
-+
-
++ #print "Creating MultiTorrent"
++ self.multitorrent = MultiTorrent(self.config, self.rawserver, data_dir)
+
self.rawserver.add_task(0, self.scan)
self.rawserver.add_task(0, self.stats)
-@@ -63,23 +83,40 @@
- def handler(signum, frame):
- self.rawserver.external_add_task(0, self.read_config)
- signal.signal(signal.SIGHUP, handler)
-- self.rawserver.install_sigint_handler()
-+ self.rawserver.install_sigint_handler(self.doneflag)
- except Exception, e:
- self.output.message(_("Could not set signal handler: ") + str(e))
-
-- self.rawserver.listen_forever()
-+ def shutdown():
-+ self.output.message(_("shutting down"))
-+ for infohash in self.torrent_list:
-+ self.output.message(_('dropped "%s"') %
-+ self.torrent_cache[infohash]['path'])
-+ torrent = self.downloads[infohash]
-+ if torrent is not None:
-+ torrent.shutdown()
-+ if self.multitorrent:
-+ df = self.multitorrent.shutdown()
-+ set_flag = lambda *a : self.rawserver_doneflag.set()
-+ df.addCallbacks(set_flag, set_flag)
-+
-+ self.rawserver.add_task(0, self.doneflag.addCallback, \
-+ lambda r: self.rawserver.external_add_task(0, shutdown))
-+
-+ try:
-+ self.rawserver.listen_forever(self.rawserver_doneflag)
-+ except AttributeError, e:
-+ output.message(str(e))
-+ raise
-+ except KeyboardInterrupt:
-+ raise
-
-- self.output.message(_("shutting down"))
-- for infohash in self.torrent_list:
-- self.output.message(_('dropped "%s"') %
-- self.torrent_cache[infohash]['path'])
-- torrent = self.downloads[infohash]
-- if torrent is not None:
-- torrent.shutdown()
+@@ -131,162 +135,221 @@
+ self.rawserver.add_task(0,self.core_doneflag.set())
+
+ except UserFailure, e:
+- output.exception(unicode(e.args[0]))
++ display.exception(unicode(e.args[0]))
+ self.rawserver.add_task(0,self.core_doneflag.set())
except:
data = StringIO()
print_exc(file = data)
- output.exception(data.getvalue())
-+ self.doneflag.set()
-+ self.rawserver_doneflag.set()
+- output.exception(data.getvalue())
++ display.exception(data.getvalue())
+ self.rawserver.add_task(0,self.core_doneflag.set())
+
+ # always make sure events get processed even if only for
+ # shutting down.
+- print "listening forever"
+- self.rawserver.listen_forever(rawserver_doneflag)
++ #print "listening forever"
++ try:
++ self.rawserver.listen_forever(self.rawserver_doneflag)
++ except AttributeError, e:
++ output.message(str(e))
++ raise
++ except KeyboardInterrupt:
++ raise
+
+ except:
+ data = StringIO()
+ print_exc(file = data)
+- output.exception(data.getvalue())
++ display.exception(data.getvalue())
++ self.core_doneflag.set()
++ self.rawserver_doneflag.set()
def scan(self):
+- print "LaunchMany.scan top."
++ #print "LaunchMany.scan top."
self.rawserver.add_task(self.config['parse_dir_interval'], self.scan)
-@@ -122,17 +159,16 @@
- upamt = 0
- dnamt = 0
- t = 0
+
+ r = parsedir(self.torrent_dir, self.torrent_cache,
+ self.file_cache, self.blocked_files,
+ self.logger.error)
+
+- print "After parsedir"
++ #print "After parsedir"
+ ( self.torrent_cache, self.file_cache, self.blocked_files,
+ added, removed ) = r
+ for infohash, data in removed.items():
+ self.logger.info(_('dropped "%s"') % data['path'])
+ self.remove(infohash)
+ for infohash, data in added.items():
+- print "adding item:", data['path']
++ #print "adding item:", data['path']
+ self.logger.info(_('added "%s"' ) % data['path'])
+- print "after self.logger.info"
++ #print "after self.logger.info"
+ if self.config['launch_delay'] > 0:
+ self.rawserver.add_task(self.config['launch_delay'], self.add, infohash, data)
+ # torrent may have been known from resume state.
+ elif not self.multitorrent.torrent_known(infohash):
+ self.add(infohash, data)
+- print "LaunchMany.scan bottom"
++ #print "LaunchMany.scan bottom"
+
+ def stats(self):
+ self.rawserver.add_task(self.config['display_interval'], self.stats)
+ data = []
+- for d in self.get_torrents():
+- infohash = d.infohash
+- cache = self.torrent_cache[infohash]
+- if self.config['display_path']:
+- name = cache['path']
+- else:
+- name = cache['name']
+- size = cache['length']
+- #d = self.downloads[infohash]
+- progress = '0.0%'
+- peers = 0
+- seeds = 0
+- seedsmsg = "S"
+- dist = 0.0
+- uprate = 0.0
+- dnrate = 0.0
+- upamt = 0
+- dnamt = 0
+- t = 0
- msg = ''
- if d is None:
- status = _("waiting for hash check")
- else:
- stats = d.get_status()
- status = stats['activity']
- progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0)
-- if d.started and not d.closed:
-+ if d.is_running() and d.is_context_valid():
- s = stats
-- dist = s['numCopies']
-- if d.is_seed:
+- #if d.state in ["created", "initializing"]:
+- # status = _("waiting for hash check")
+- #else:
+- stats = d.get_status()
+- status = stats['activity']
+- progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0)
+- if d.is_running():
+- s = stats
+- dist = s['numCopies']
+- if d.is_seed:
+- seeds = 0 # s['numOldSeeds']
+- seedsmsg = "s"
++ for d in self.multitorrent.get_torrents():
++ if d is not None:
++ infohash = d.infohash
++ try:
++ cache = self.torrent_cache[infohash]
++ except KeyError:
++ self.remove(infohash)
++ continue
++ if self.config['display_path']:
++ name = cache['path']
+ else:
+- if s['numSeeds'] + s['numPeers']:
+- t = stats['timeEst']
+- if t is None:
+- t = -1
+- if t == 0: # unlikely
+- t = 0.01
+- status = _("downloading")
++ name = cache['name']
++ size = cache['length']
++ progress = '0.0%'
++ peers = 0
++ seeds = 0
++ seedsmsg = "S"
++ dist = 0.0
++ uprate = 0.0
++ dnrate = 0.0
++ upamt = 0
++ dnamt = 0
++ t = 0
++ msg = ''
++ #if d.state in ["created", "initializing"]:
++ # status = _("waiting for hash check")
++ #else:
++ stats = d.get_status()
++ status = stats['activity']
++ progress = '%.1f%%' % (int(stats['fractionDone']*1000)/10.0)
++ if d.is_running():
++ s = stats
+ dist = int(s['distributed_copies'])
+ if d.is_seeding():
- seeds = 0 # s['numOldSeeds']
- seedsmsg = "s"
++ seeds = 0 # s['numOldSeeds']
++ seedsmsg = "s"
else:
-@@ -152,11 +188,9 @@
- uprate = stats['upRate']
- upamt = s['upTotal']
- dnamt = s['downTotal']
-- if d.errors and (d.closed or d.errors[-1][0] + 300 > time()):
-- msg = d.errors[-1][2]
+- t = -1
+- status = _("connecting to peers")
+- seeds = s['numSeeds']
+- dnrate = stats['downRate']
+- peers = s['numPeers']
+- uprate = stats['upRate']
+- upamt = s['upTotal']
+- dnamt = s['downTotal']
++ if s['numSeeds'] + s['numPeers']:
++ t = stats['timeEst']
++ if t is None:
++ t = -1
++ if t == 0: # unlikely
++ t = 0.01
++ status = _("downloading")
++ else:
++ t = -1
++ status = _("connecting to peers")
++ seeds = s['numSeeds']
++ dnrate = stats['downRate']
++ peers = s['numPeers']
++ uprate = stats['upRate']
++ upamt = s['upTotal']
++ dnamt = s['downTotal']
- data.append(( name, status, progress, peers, seeds, seedsmsg, dist,
-- uprate, dnrate, upamt, dnamt, size, t, msg ))
-+ uprate, dnrate, upamt, dnamt, size, t ))
- stop = self.output.display(data)
+- data.append(( name, status, progress, peers, seeds, seedsmsg, dist,
++ data.append(( name, status, progress, peers, seeds, seedsmsg, dist,
+ uprate, dnrate, upamt, dnamt, size, t, msg ))
+ stop = self.display(data)
if stop:
- self.doneflag.set()
-@@ -176,22 +210,55 @@
+ self.core_doneflag.set()
+
+ def remove(self, infohash):
+- self.torrent_list.remove(infohash)
+- if self.downloads[infohash] is not None:
+- self.downloads[infohash].shutdown()
++ torrent = self.multitorrent.get_torrent(infohash)
++ if torrent is not None:
++ torrent.shutdown()
+ self.was_stopped(infohash)
+- del self.downloads[infohash]
+
+ def add(self, infohash, data):
+-
+ # data is a dict like
+ # { path:'/a/b/c.torrent', file:'c.torrent', length:90911, name:'Sea',
+ # metainfo: <metainfo>} Metainfo has bdecoded but not passed
+ # to ConvertedMetainfo.
+- self.torrent_list.append(infohash)
+- self.downloads[infohash] = None
+ self.hashcheck_queue.append(infohash)
+ self.hashcheck_store[infohash] = ConvertedMetainfo(data['metainfo'])
self.check_hashcheck_queue()
def check_hashcheck_queue(self):
- if self.hashcheck_current is not None or not self.hashcheck_queue:
+ if not self.hashcheck_queue:
-+ return
+ return
+- infohash = self.hashcheck_current = self.hashcheck_queue.pop(0)
+ infohash = self.hashcheck_queue.pop(0)
-+ x = self.hashcheck_store[infohash]
-+ metainfo = ConvertedMetainfo(x)
-+ del self.hashcheck_store[infohash]
-+
-+ if not self.torrent_cache[infohash] or self.torrent_cache[infohash] is None:
+ metainfo = self.hashcheck_store[infohash]
+ del self.hashcheck_store[infohash]
+- filename = self.determine_filename(infohash)
++ save_incomplete_as, save_as = self.determine_filename(infohash)
++ saveas_style_save_incomplete_as, saveas_style_save_as = self._determine_filename(infohash)
+ torrent_path = self.torrent_cache[infohash]['path']
+- self.start_torrent(torrent_path, metainfo, filename, filename)
++ self.start_torrent(torrent_path, metainfo, save_incomplete_as,save_as,
++ saveas_style_save_incomplete_as, saveas_style_save_as)
+
+- def start_torrent(self,torrent_path,metainfo,save_incomplete_as,save_as):
++ def start_torrent(self,torrent_path,metainfo,save_incomplete_as,save_as,
++ saveas_style_save_incomplete_as=None,saveas_style_save_as=None):
+ assert isinstance(metainfo, ConvertedMetainfo)
+ df = launch_coroutine(_wrap_task(self.rawserver.add_task),
+ self._start_torrent, metainfo,
+- save_incomplete_as, save_as)
++ save_incomplete_as, save_as,
++ saveas_style_save_incomplete_as=saveas_style_save_incomplete_as,
++ saveas_style_save_as=saveas_style_save_as)
+ df.addErrback(lambda e : self.logger.error(_("DIED: "),exc_info=e))
+ return df
+
+- def _start_torrent(self, metainfo, save_incomplete_as,save_as):
++ def _start_torrent(self, metainfo, save_incomplete_as,save_as,
++ saveas_style_save_incomplete_as,saveas_style_save_as):
+ assert isinstance(metainfo, ConvertedMetainfo)
+- df = self.multitorrent.create_torrent(metainfo,
+- save_incomplete_as, save_as)
+- yield df
+- torrent = self.multitorrent.get_torrent(metainfo.infohash)
+- if torrent.is_initialized():
+- multitorrent.start_torrent(metainfo.infohash)
+- #else: ???? # this would be an error condition already reported
+- # to logger.
+- check_hashcheck_queue()
++ save_incomplete_as, junk = platform.encode_for_filesystem(save_incomplete_as)
++ save_as, junk = platform.encode_for_filesystem(save_as)
++ if saveas_style_save_incomplete_as is not None:
++ saveas_style_save_incomplete_as, junk = platform.encode_for_filesystem(saveas_style_save_incomplete_as)
++ if saveas_style_save_as is not None:
++ saveas_style_save_as, junk = platform.encode_for_filesystem(saveas_style_save_as)
++ try:
++ df = self.multitorrent.create_torrent(metainfo,
++ save_incomplete_as, save_as,
++ saveas_style_save_incomplete_as,
++ saveas_style_save_as)
++ yield df
++ df.getResult()
++ except (TorrentAlreadyRunning, TorrentAlreadyInQueue):
++ pass
++ except:
+ raise
+
+- def determine_filename(self, infohash):
++ infohash = metainfo.infohash
+
-+ if not self.multitorrent.torrent_known(infohash):
-+ try:
-+ (save_as, save_incomplete_as) = self.determine_filename(infohash)
-+ df = self.multitorrent.create_torrent(metainfo, save_incomplete_as, save_as)
-+ except (TorrentAlreadyRunning, TorrentAlreadyInQueue):
-+ pass
-+ except:
-+ raise
-+
++ # find out if torrent has been recorded
+ try:
-+ if not self.multitorrent.torrent_running(infohash):
-+ df = self.multitorrent.start_torrent(infohash)
-+ except TorrentAlreadyRunning:
-+ pass
-+ except TorrentNotInitialized:
-+ # requeue
-+ self.remove(infohash)
++ torrent = self.multitorrent.get_torrent(infohash)
++ if not torrent or torrent is None:
++ raise UnknownInfohash(infohash.encode("hex"))
++ except:
++ raise
++
++ # function to requeue torrent if has not been initialized just yet
++ def hashcheck_requeue(infohash):
++ df = self.remove(infohash)
+ data = self.torrent_cache[infohash]
+ if self.config['launch_delay'] > 0:
+ self.rawserver.add_task(self.config['launch_delay'], self.add, infohash, data)
+ else:
+ # wait at least 1
+ self.rawserver.add_task(1, self.add, infohash, data)
- return
-- self.hashcheck_current = self.hashcheck_queue.pop(0)
-- metainfo = self.hashcheck_store[self.hashcheck_current]
-- del self.hashcheck_store[self.hashcheck_current]
-- filename = self.determine_filename(self.hashcheck_current)
-- self.downloads[self.hashcheck_current] = self.multitorrent. \
-- start_torrent(ConvertedMetainfo(metainfo),
-- self.config, self, filename)
-+ except:
-+ raise
+
-+ # record if everything has gone right
-+ self.downloads[infohash] = \
-+ self.multitorrent.get_torrent(infohash)
-
- def determine_filename(self, infohash):
++ # Is it running?
++ running = self.multitorrent.torrent_running(infohash)
++ if not running:
++ try:
++ if torrent.is_initialized():
++ df = self.multitorrent.start_torrent(infohash)
++ yield df
++ df.getResult()
++ else:
++ raise TorrentNotInitialized
++ except TorrentAlreadyRunning:
++ pass
++ except TorrentNotInitialized:
++ hashcheck_requeue(infohash)
++ except:
++ raise
++
++ self.check_hashcheck_queue()
++
++ def determine_saveas_style(self, infohash):
x = self.torrent_cache[infohash]
name = x['name']
- savein = self.config['save_in']
-+ saveincompletein = self.config['save_incomplete_in']
- isdir = not x['metainfo']['info'].has_key('length')
+- savein = self.config['save_in']
+- isdir = not x['metainfo']['info'].has_key('length')
style = self.config['saveas_style']
-+
if style == 4:
torrentname = os.path.split(x['path'][:-8])[1]
- suggestedname = name
-@@ -202,17 +269,27 @@
+@@ -295,20 +358,54 @@
+ style = 1
+ else:
+ style = 3
++ return style
++
++ # Specially handle the style 3 case.
++ # Style 3 breaks Torrent.move so we have an intermediate
++ # _determine_filename for Torrent.move benefit
++ # but determine_filename for general use
++ def determine_filename(self, infohash):
++ x = self.torrent_cache[infohash]
++ name = x['name']
++ isdir = not x['metainfo']['info'].has_key('length')
++ style = self.determine_saveas_style(infohash)
++ saveincompleteas, saveas = self._determine_filename(infohash)
++
++ # add filename
++ if style == 3 and not isdir:
++ saveas = os.path.join(saveas, name)
++ saveincompleteas = os.path.join(saveincompleteas, name)
++
++ return saveincompleteas, saveas
++
++ # generate paths appropriate for Torrent.move method
++ def _determine_filename(self, infohash):
++ x = self.torrent_cache[infohash]
++ name = x['name']
++ savein = self.config['save_in']
++ saveincompletein = self.config['save_incomplete_in']
++ style = self.determine_saveas_style(infohash)
if style == 1 or style == 3:
if savein:
-- saveas = os.path.join(savein,x['file'][:-8]) # strip '.torrent'
-+ saveas = os.path.join(savein, x['file'][:-8]) # strip '.torrent'
+ saveas = os.path.join(savein,x['file'][:-8]) # strip '.torrent'
else:
saveas = x['path'][:-8] # strip '.torrent'
+- if style == 3 and not isdir:
+- saveas = os.path.join(saveas, name)
+ if saveincompletein:
+ saveincompleteas = os.path.join(saveincompletein, x['file'][:-8]) # strip '.torrent'
+ else:
+ saveincompleteas = x['path'][:-8] # strip '.torrent'
- if style == 3 and not isdir:
- saveas = os.path.join(saveas, name)
-+ saveincompleteas = os.path.join(saveincompleteas, name)
else:
if savein:
saveas = os.path.join(savein, name)
@@ -253,11 +451,11 @@
+ else:
+ saveincompleteas = os.path.join(os.path.split(x['path'])[0], name)
+
-+ return saveas, saveincompleteas
++ return saveincompleteas, saveas
def was_stopped(self, infohash):
try:
-@@ -221,8 +298,6 @@
+@@ -317,8 +414,6 @@
pass
else:
del self.hashcheck_store[infohash]
@@ -265,12 +463,13 @@
- self.hashcheck_current = None
self.check_hashcheck_queue()
- def global_error(self, level, text):
-@@ -253,7 +328,6 @@
- # rest are callbacks from torrent instances
-
- def started(self, torrent):
-- self.hashcheck_current = None
- self.check_hashcheck_queue()
-
- def failed(self, torrent):
+ # Exceptions are now reported via loggers.<
+@@ -343,7 +438,7 @@
+ # the self.failed() callback can run during this loop.
+ for option, value in newvalues.iteritems():
+ self.multitorrent.set_option(option, value)
+- for torrent in self.downloads.values():
++ for torrent in self.multitorrent.get_torrents():
+ if torrent is not None:
+ for option, value in newvalues.iteritems():
+ torrent.set_option(option, value)
diff --git a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py
index 34e4cfc305dc..a18c4d640cc9 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-BitTorrent__platform.py
@@ -1,11 +1,11 @@
---- ./BitTorrent/platform.py.orig Mon Jun 12 22:46:01 2006
-+++ ./BitTorrent/platform.py Wed Jun 21 23:57:08 2006
-@@ -131,7 +131,7 @@
+--- ./BitTorrent/platform.py.orig Wed Jul 12 02:18:37 2006
++++ ./BitTorrent/platform.py Sat Jul 22 17:42:24 2006
+@@ -334,7 +334,7 @@
def calc_unix_dirs():
- appdir = '%s-%s'%(app_name, version)
+ appdir = '%s'%(app_name)
- ip = os.path.join('share', 'pixmaps', appdir)
- dp = os.path.join('share', 'doc' , appdir)
- lp = os.path.join('share', 'locale')
+ ip = os.path.join(efs(u'share')[0], efs(u'pixmaps')[0], appdir)
+ dp = os.path.join(efs(u'share')[0], efs(u'doc')[0], appdir)
+ lp = os.path.join(efs(u'share')[0], efs(u'locale')[0])
diff --git a/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py b/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py
index ce739ea0e41b..f2c8b8ff2f73 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-launchmany-console.py
@@ -1,16 +1,32 @@
---- ./launchmany-console.py.orig Mon Jun 12 22:46:19 2006
-+++ ./launchmany-console.py Wed Jun 21 23:57:08 2006
-@@ -34,10 +34,10 @@
- self.message(_("no torrents"))
- for x in data:
- ( name, status, progress, peers, seeds, seedsmsg, dist,
-- uprate, dnrate, upamt, dnamt, size, t, msg ) = x
-- print '"%s": "%s" (%s) - %sP%s%s%.3fD u%0.1fK/s-d%0.1fK/s u%dK-d%dK "%s"' % (
-+ uprate, dnrate, upamt, dnamt, size, t ) = x
-+ print '"%s": "%s" (%s) - %sP%s%s%.3fD u%0.1fK/s-d%0.1fK/s u%dK-d%dK' % (
- name, status, progress, peers, seeds, seedsmsg, dist,
-- uprate/1000, dnrate/1000, upamt/1024, dnamt/1024, msg)
-+ uprate/1000, dnrate/1000, upamt/1024, dnamt/1024)
+--- ./launchmany-console.py.orig Wed Jul 12 02:18:54 2006
++++ ./launchmany-console.py Fri Jul 28 23:56:07 2006
+@@ -49,6 +49,10 @@
+ uprate/1000, dnrate/1000, upamt/1024, dnamt/1024, msg))
return False
- def message(self, s):
++ def exception(self, s):
++ exceptions.append(s)
++ #logging.getLogger('').info(_("SYSTEM ERROR - EXCEPTION GENERATED"))
++
+
+ if __name__ == '__main__':
+ uiname = 'launchmany-console'
+@@ -76,7 +80,7 @@
+ platform.decode_from_filesystem(torrent_dir)
+ else:
+ torrent_dir = config['torrent_dir']
+- torrent_dir,bad = platform.encode_from_filesystem(torrent_dir)
++ torrent_dir,bad = platform.encode_for_filesystem(torrent_dir)
+ if bad:
+ raise BTFailure(_("Warning: ")+config['torrent_dir']+
+ _(" is not a directory"))
+@@ -139,4 +143,8 @@
+ #logging.getLogger().setLevel(INFO)
+ logging.getLogger('').setLevel(0)
+
+- LaunchMany(config, d.display, 'launchmany-console')
++ LaunchMany(config, d, 'launchmany-console')
++
++ if exceptions:
++ print _("\nEXCEPTION:")
++ print exceptions[0]
diff --git a/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py b/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py
index 01d53f74b6e1..1a0c612c0e96 100644
--- a/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py
+++ b/net-p2p/py-bittorrent-devel/files/patch-launchmany-curses.py
@@ -1,5 +1,5 @@
---- ./launchmany-curses.py.orig Mon Jun 12 22:46:19 2006
-+++ ./launchmany-curses.py Wed Jun 21 23:57:08 2006
+--- ./launchmany-curses.py.orig Wed Jul 12 02:18:54 2006
++++ ./launchmany-curses.py Fri Jul 28 23:42:45 2006
@@ -18,6 +18,7 @@
DOWNLOAD_SCROLL_RATE = 1
@@ -8,7 +8,7 @@
import sys, os
from threading import Event
from time import time, localtime, strftime
-@@ -99,7 +100,7 @@
+@@ -101,7 +102,7 @@
def winch_handler(self, signum, stackframe):
self.changeflag.set()
curses.endwin()
@@ -17,7 +17,7 @@
self.scrwin = curses.newwin(0, 0, 0, 0)
self._remake_window()
self._display_messages()
-@@ -118,22 +119,26 @@
+@@ -120,22 +121,26 @@
self.mainpan = curses.panel.new_panel(self.mainwin)
self.mainwin.scrollok(0)
self.mainwin.nodelay(1)
@@ -44,30 +44,22 @@
try:
self.scrwin.border(ord('|'),ord('|'),ord('-'),ord('-'),ord(' '),ord(' '),ord(' '),ord(' '))
-@@ -199,7 +204,7 @@
- if self._display_line(''):
- break
- ( name, status, progress, peers, seeds, seedsmsg, dist,
-- uprate, dnrate, upamt, dnamt, size, t, msg ) = data[ii]
-+ uprate, dnrate, upamt, dnamt, size, t ) = data[ii]
- t = fmttime(t)
- if t:
- status = t
-@@ -216,7 +221,7 @@
- else:
- datastr = ' '+status+' ('+progress+')'
- self._display_line(datastr)
-- self._display_line(' '+ljust(msg,self.mainwinw-4))
-+# self._display_line(' '+ljust(msg,self.mainwinw-4))
- i += 1
+@@ -277,7 +282,8 @@
- def display(self, data):
-@@ -236,7 +241,7 @@
- totalup = 0
- totaldn = 0
- for ( name, status, progress, peers, seeds, seedsmsg, dist,
-- uprate, dnrate, upamt, dnamt, size, t, msg ) in data:
-+ uprate, dnrate, upamt, dnamt, size, t ) in data:
- totalup += uprate
- totaldn += dnrate
+ def LaunchManyWrapper(scrwin, config):
+- LaunchMany(config, CursesDisplayer(scrwin), 'launchmany-curses')
++ d = CursesDisplayer(scrwin)
++ LaunchMany(config, d, 'launchmany-curses')
+
+
+ if __name__ == '__main__':
+@@ -306,7 +312,7 @@
+ platform.decode_from_filesystem(torrent_dir)
+ else:
+ torrent_dir = config['torrent_dir']
+- torrent_dir,bad = platform.encode_from_filesystem(torrent_dir)
++ torrent_dir,bad = platform.encode_for_filesystem(torrent_dir)
+ if bad:
+ raise BTFailure(_("Warning: ")+config['torrent_dir']+
+ _(" is not a directory"))
diff --git a/net-p2p/py-bittorrent-devel/pkg-plist b/net-p2p/py-bittorrent-devel/pkg-plist
index 572137a43521..ab3518163cc9 100644
--- a/net-p2p/py-bittorrent-devel/pkg-plist
+++ b/net-p2p/py-bittorrent-devel/pkg-plist
@@ -90,6 +90,9 @@ bin/torrentinfo-console
%%PYTHON_SITELIBDIR%%/BitTorrent/IPC.py
%%PYTHON_SITELIBDIR%%/BitTorrent/IPC.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/IPC.pyo
+%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.py
+%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.pyc
+%%PYTHON_SITELIBDIR%%/BitTorrent/InternetWatcher.pyo
%%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.py
%%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/LaunchPath.pyo
@@ -105,6 +108,9 @@ bin/torrentinfo-console
%%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.py
%%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/MultiTorrent.pyo
+%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.py
+%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.pyc
+%%PYTHON_SITELIBDIR%%/BitTorrent/NamedMutex.pyo
%%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.py
%%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/NatCheck.pyo
@@ -216,9 +222,6 @@ bin/torrentinfo-console
%%PYTHON_SITELIBDIR%%/BitTorrent/defer.py
%%PYTHON_SITELIBDIR%%/BitTorrent/defer.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/defer.pyo
-%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.py
-%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.pyc
-%%PYTHON_SITELIBDIR%%/BitTorrent/flock_mutex.pyo
%%PYTHON_SITELIBDIR%%/BitTorrent/hash.py
%%PYTHON_SITELIBDIR%%/BitTorrent/hash.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/hash.pyo
@@ -252,6 +255,9 @@ bin/torrentinfo-console
%%PYTHON_SITELIBDIR%%/BitTorrent/pykill.py
%%PYTHON_SITELIBDIR%%/BitTorrent/pykill.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/pykill.pyo
+%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.py
+%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.pyc
+%%PYTHON_SITELIBDIR%%/BitTorrent/shortargs.pyo
%%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.py
%%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.pyc
%%PYTHON_SITELIBDIR%%/BitTorrent/sparse_set.pyo
@@ -342,34 +348,16 @@ bin/torrentinfo-console
%%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.py
%%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.pyc
%%PYTHON_SITELIBDIR%%/khashmir/utkhashmir.pyo
-share/locale/af/LC_MESSAGES/bittorrent.mo
-share/locale/bg/LC_MESSAGES/bittorrent.mo
-share/locale/ca/LC_MESSAGES/bittorrent.mo
-share/locale/cs/LC_MESSAGES/bittorrent.mo
-share/locale/da/LC_MESSAGES/bittorrent.mo
share/locale/de/LC_MESSAGES/bittorrent.mo
-share/locale/el/LC_MESSAGES/bittorrent.mo
+share/locale/en/LC_MESSAGES/bittorrent.mo
share/locale/es/LC_MESSAGES/bittorrent.mo
share/locale/es_MX/LC_MESSAGES/bittorrent.mo
share/locale/fr/LC_MESSAGES/bittorrent.mo
-share/locale/he/LC_MESSAGES/bittorrent.mo
-share/locale/hu/LC_MESSAGES/bittorrent.mo
-share/locale/is/LC_MESSAGES/bittorrent.mo
share/locale/it/LC_MESSAGES/bittorrent.mo
share/locale/ja/LC_MESSAGES/bittorrent.mo
share/locale/ko/LC_MESSAGES/bittorrent.mo
-share/locale/nb_NO/LC_MESSAGES/bittorrent.mo
-share/locale/nl/LC_MESSAGES/bittorrent.mo
-share/locale/pl/LC_MESSAGES/bittorrent.mo
share/locale/pt/LC_MESSAGES/bittorrent.mo
share/locale/pt_BR/LC_MESSAGES/bittorrent.mo
-share/locale/ro/LC_MESSAGES/bittorrent.mo
-share/locale/ru/LC_MESSAGES/bittorrent.mo
-share/locale/sk/LC_MESSAGES/bittorrent.mo
-share/locale/sl/LC_MESSAGES/bittorrent.mo
-share/locale/sv/LC_MESSAGES/bittorrent.mo
-share/locale/tr/LC_MESSAGES/bittorrent.mo
-share/locale/vi/LC_MESSAGES/bittorrent.mo
share/locale/zh_CN/LC_MESSAGES/bittorrent.mo
share/locale/zh_TW/LC_MESSAGES/bittorrent.mo
%%GUI%%@dirrm share/pixmaps/BitTorrent/themes/default/torrentstate
@@ -386,26 +374,10 @@ share/locale/zh_TW/LC_MESSAGES/bittorrent.mo
@dirrmtry share/locale/zh_TW
@dirrmtry share/locale/zh_CN/LC_MESSAGES
@dirrmtry share/locale/zh_CN
-@dirrmtry share/locale/sl/LC_MESSAGES
-@dirrmtry share/locale/sl
-@dirrmtry share/locale/sk/LC_MESSAGES
-@dirrmtry share/locale/sk
-@dirrmtry share/locale/ro/LC_MESSAGES
-@dirrmtry share/locale/ro
@dirrmtry share/locale/pt/LC_MESSAGES
@dirrmtry share/locale/pt
-@dirrmtry share/locale/pl/LC_MESSAGES
-@dirrmtry share/locale/pl
-@dirrmtry share/locale/nb_NO/LC_MESSAGES
-@dirrmtry share/locale/nb_NO
@dirrmtry share/locale/ko/LC_MESSAGES
@dirrmtry share/locale/ko
-@dirrmtry share/locale/el/LC_MESSAGES
-@dirrmtry share/locale/el
-@dirrmtry share/locale/cs/LC_MESSAGES
-@dirrmtry share/locale/cs
-@dirrmtry share/locale/ca/LC_MESSAGES
-@dirrmtry share/locale/ca
@dirrm %%PYTHON_SITELIBDIR%%/khashmir
@dirrm %%PYTHON_SITELIBDIR%%/BitTorrent/GUI_wx
@dirrm %%PYTHON_SITELIBDIR%%/BitTorrent