kivyblocks/kivyblocks/hostimage.py

37 lines
989 B
Python
Raw Normal View History

2020-04-26 15:16:31 +08:00
import tempfile
from kivyblocks.baseWidget import HTTPDataHandler
2020-04-26 15:29:37 +08:00
from kivyblocks.utils import blockImage, absurl
2020-04-26 15:16:31 +08:00
from kivy.uix.image import Image
class HostImage(Image):
def __init__(self, target,**kwargs):
self.options = kwargs
self.target = target
2020-04-26 15:29:37 +08:00
kwargs['source'] = blockImage('running.gif')
2020-04-26 15:16:31 +08:00
url = kwargs.get('url')
del kwargs['url']
super().__init__(**kwargs)
self.downloadImage(url)
2020-04-27 16:48:55 +08:00
def downloadImage(self,url):
2020-04-26 15:16:31 +08:00
realurl = absurl(url,self.target.parenturl)
loader = HTTPDataHandler(url,stream=True)
loader.bind(on_success=self.createTmpfile)
loader.bind(on_failed=self.showBadImage)
loader.handle()
def showBadImage(self,o,e):
2020-04-26 15:29:37 +08:00
self.source = blockImage('broken.png')
2020-04-26 15:16:31 +08:00
def createTmpfile(self,o,resp):
2020-04-27 16:48:55 +08:00
fn = tempfile.mkstemp()[1]
print('************fn=%s',fn)
2020-04-26 15:16:31 +08:00
with open(fn, 'wb') as f:
2020-04-27 16:48:55 +08:00
for chunk in resp.iter_content(chunk_size=8192):
2020-04-26 15:29:37 +08:00
if chunk: # filter out keep-alive new chunks
f.write(chunk)
# f.flush()
2020-04-26 15:16:31 +08:00
self.source = fn