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

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

wip

File size: 2.5 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,url=None,id=None):
47               
48                if url!=None:
49                        self.image_url=url
50               
51                if id!=None:
52                        self.id=id
53               
54                if self.get_visible_child_name()=="image":
55                        self.set_visible_child_name("spinner")
56                       
57                GLib.timeout_add(1,self.wait_for_image)
58                self.thread=threading.Thread(target=self.download_image_thread)
59                self.thread.daemon=True
60                self.thread.start()
61               
62        #def download_image
63
64       
65        def download_image_thread(self):
66               
67                if not os.path.exists(self.image_dir+self.id):
68                        req=urllib2.Request(self.image_url)
69                        res=urllib2.urlopen(req)
70                        f=open(self.image_dir+self.id,"w")
71                        f.write(res.read())
72                        f.close()
73                        #urllib.urlretrieve(self.image_url,self.image_dir+self.id)
74                       
75                return True
76               
77
78               
79        #def download-image-thread
80       
81       
82        def wait_for_image(self):
83       
84                while self.thread.is_alive():
85                       
86                        return True
87               
88                if os.path.exists(self.image_dir+self.id):
89                        image=Gtk.Image.new_from_file(self.image_dir+self.id)
90                        pixbuf=image.get_pixbuf()
91                        if pixbuf !=None:
92                                x=pixbuf.get_width()
93                                y=pixbuf.get_height()
94                               
95                                x=1
96                                y=1
97                               
98                                ratio=min(self.x*1.0/x,self.y*1.0/y)
99                                pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
100                               
101                                self.image.set_from_pixbuf(pixbuf)
102                                self.set_visible_child_name("image")
103                                self.spinner.stop()
104                        else:
105                                print "woopsie",self.image_dir+self.id
106               
107                return False
108       
109        #def _download
110       
111        def set_new_from_pixbuf(self,x,y,pixbuf):
112               
113                self.spinner.hide()
114                self.set_visible_child_name("spinner")
115                self.x=x
116                self.y=y
117               
118                self.image.set_from_pixbuf(pixbuf)
119                self.set_visible_child_name("image")
120               
121               
122
123#class Screenshot
Note: See TracBrowser for help on using the repository browser.