MCPcopy Index your code
hub / github.com/pyload/pyload / download

Method download

module/network/XDCCRequest.py:105–179  ·  view source on GitHub ↗
(self, ip, port, filename, status_notify=None, resume=None)

Source from the content-addressed store, hash-verified

103 pass
104
105 def download(self, ip, port, filename, status_notify=None, resume=None):
106 self.status_notify = status_notify if callable(status_notify) else None
107 self.send_64bits_ack = False if self.filesize < 1 << 32 else True
108
109 chunk_name = fs_encode(filename + ".chunk0")
110
111 if resume and os.path.exists(chunk_name):
112 self.fh = open(chunk_name, "ab")
113 resume_position = self.fh.tell()
114 if not resume_position:
115 resume_position = os.stat(chunk_name).st_size
116
117 resume_position = resume(resume_position)
118 self.fh.truncate(resume_position)
119 self.received = resume_position
120
121 else:
122 self.fh = open(chunk_name, "wb")
123
124 lastUpdate = time.time()
125 numRecvLen = 0
126
127 self.dccsock = self.createSocket()
128
129 recv_list = [self.dccsock]
130 self.dccsock.connect((ip, port))
131 self.dccsock.setblocking(0)
132
133 # recv loop for dcc socket
134 while True:
135 if self.abort:
136 self.dccsock.close()
137 self.fh.close()
138 raise Abort()
139
140 fdset = select.select(recv_list, [], [], 0.1)
141 if self.dccsock in fdset[0]:
142 try:
143 data = self.dccsock.recv(16384)
144
145 except socket.error, e:
146 if e.errno == errno.EAGAIN or e.errno == errno.EWOULDBLOCK:
147 continue
148
149 else:
150 raise
151
152 data_len = len(data)
153 if data_len == 0 or self.filesize and self.received + data_len > self.filesize:
154 break
155
156 numRecvLen += data_len
157
158 self._write_func(data)
159 self._send_ack()
160
161 now = time.time()
162 timespan = now - lastUpdate

Callers 1

httpDownloadMethod · 0.45

Calls 9

createSocketMethod · 0.95
_write_funcMethod · 0.95
_send_ackMethod · 0.95
updateProgressMethod · 0.95
fs_encodeFunction · 0.90
AbortClass · 0.90
closeMethod · 0.45
selectMethod · 0.45
recvMethod · 0.45

Tested by

no test coverage detected