source: lliurex-store/trunk/fuentes/lliurex-store-gui/Screenshot.py @ 3213

Last change on this file since 3213 was 3213, checked in by hectorgh, 3 years ago

using urllib2 requests to bypass proxy

File size: 2.2 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk,GdkPixbuf,GLib
4import urllib2
5import threading
6import os
7
8class Screenshot(Gtk.Stack):
9
10        def __init__(self,x,y,url,id,download=True,video_url=None):
11               
12                Gtk.Stack.__init__(self)
13                self.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
14                self.set_transition_duration(250)
15                hbox=Gtk.HBox()
16                self.spinner=Gtk.Spinner()
17                self.spinner.set_size_request(x,y)
18                self.spinner.start()
19               
20                hbox.pack_start(self.spinner,True,True,0)
21               
22                self.image=Gtk.Image()
23                self.add_titled(hbox,"spinner","Spinner")
24                self.add_titled(self.image,"image","Image")
25               
26                self.image_url=url
27                self.x=x
28                self.y=y
29                self.id=id
30                self.image_dir="/tmp/.lliurex-store/"
31               
32                self.thread=threading.Thread()
33               
34                if not os.path.exists(self.image_dir):
35                       
36                        os.makedirs(self.image_dir)
37               
38                if download:
39                        self.download_image()
40               
41                self.video_url=video_url
42               
43               
44        #def init
45       
46        def download_image(self):
47               
48                if self.get_visible_child_name()=="image":
49                        self.set_visible_child_name("spinner")
50                       
51                GLib.timeout_add(1,self.wait_for_image)
52                self.thread=threading.Thread(target=self.download_image_thread)
53                self.thread.daemon=True
54                self.thread.start()
55               
56        #def download_image
57
58       
59        def download_image_thread(self):
60               
61                if not os.path.exists(self.image_dir+self.id):
62                        req=urllib2.Request(self.image_url)
63                        res=urllib2.urlopen(req)
64                        f=open(self.image_dir+self.id,"w")
65                        f.write(res.read())
66                        f.close()
67                        #urllib.urlretrieve(self.image_url,self.image_dir+self.id)
68               
69
70               
71        #def download-image-thread
72       
73       
74        def wait_for_image(self):
75       
76                while self.thread.is_alive():
77                       
78                        return True
79       
80                image=Gtk.Image.new_from_file(self.image_dir+self.id)
81                pixbuf=image.get_pixbuf()
82                x=pixbuf.get_width()
83                y=pixbuf.get_height()
84               
85                x=1
86                y=1
87               
88                ratio=min(self.x*1.0/x,self.y*1.0/y)
89                pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
90               
91                self.image.set_from_pixbuf(pixbuf)
92                self.set_visible_child_name("image")
93                self.spinner.stop()
94               
95                return False
96       
97        #def _download
98       
99        def set_new_from_pixbuf(self,x,y,pixbuf):
100               
101                self.spinner.hide()
102                self.set_visible_child_name("spinner")
103                self.x=x
104                self.y=y
105               
106                self.image.set_from_pixbuf(pixbuf)
107                self.set_visible_child_name("image")
108               
109               
110
111#class Screenshot
Note: See TracBrowser for help on using the repository browser.