• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

from Kamaelia.Util.PipelineComponent import pipeline
from Kamaelia.Util.Graphline import Graphline
from Kamaelia.Util.Console import ConsoleReader, ConsoleEchoer
 
import sys, time
sys.path.append("../../Util")
sys.path.append("../../HTTP")
sys.path.append("../../Torrent")
 
from IcecastClient import IcecastClient, IcecastDemux, IcecastStreamRemoveMetadata
from Chunkifier import Chunkifier
from ChunkDistributor import ChunkDistributor
from WholeFileWriter import WholeFileWriter
from TorrentMaker import TorrentMaker
from Kamaelia.Util.Fanout import fanout
from HTTPHelpers import HTTPMakePostRequest
from HTTPClient import SimpleHTTPClient
from TorrentPatron import TorrentPatron
 
from OnDemandIntrospector import OnDemandIntrospector
 
#UTIL
from DataSource import TriggeredSource
from LineSplit import LineSplit
from UnseenOnly import UnseenOnly
from TriggeredFileReader import TriggeredFileReader
from PureTransformer import PureTransformer
from TorrentIPC import *
from Axon.ThreadedComponent import threadedcomponent
from Axon.Component import component
 
class CheapAndCheerfulClock(threadedcomponent):
    def __init__(self, interval):
        super(CheapAndCheerfulClock, self).__init__()
        self.interval = interval
 
    def main(self):
        while 1:
            self.send(True, "outbox")
            time.sleep(self.interval)
 
 
class StreamReconstructor(component):
    def main(self):
        torrents = []
        while 1:
            yield 1
            while self.dataReady("inbox"):
                msg = self.recv("inbox")
                print msg
                if isinstance(msg, TIPCNewTorrentCreated):
                    torrents.append([msg.torrentid, msg.savefolder])
 
                elif isinstance(msg, TIPCTorrentStatusUpdate):
                    print msg.torrentid
                    if msg.torrentid == torrents[0][0]:
                        print msg.statsdictionary
                        if msg.statsdictionary.get("fractionDone",0) == 1:
                            self.send(torrents[0][1], "outbox")                        
                            torrents.pop(0)
            self.pause()
 
if __name__ == '__main__':
    partslist = "filelist.txt"
    resourcefetcher = TriggeredFileReader #SimpleHTTPClient
 
    pipeline(
        ConsoleReader(),
        OnDemandIntrospector(),
        ConsoleEchoer(),
    ).activate()
 
    pipeline(
        CheapAndCheerfulClock(30.0),
        TriggeredSource(partslist),
        resourcefetcher(),
        LineSplit(),
        UnseenOnly(),
        PureTransformer(lambda x: x or None), #eradicate blank lines
        resourcefetcher(),
        TorrentPatron(),
        StreamReconstructor(),
        ConsoleEchoer()
    ).run()