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

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

wip

File size: 10.3 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk,GdkPixbuf,GLib,GObject
4import urllib2
5import threading
6import os
7import ImageManager
8import Core
9import string
10import random
11
12class ScreenshotNeo(Gtk.Stack):
13       
14        def __init__(self):
15               
16                Gtk.Stack.__init__(self)
17                self.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
18                self.set_transition_duration(250)
19               
20                self.image_dir="/tmp/.lliurex-store/"
21                if not os.path.exists(self.image_dir):
22                        os.makedirs(self.image_dir)
23               
24                self.spinner=Gtk.Spinner()
25                #self.spinner.set_size_request(x,y)
26                self.spinner.start()
27               
28                hbox=Gtk.HBox()
29                hbox.pack_start(self.spinner,True,True,0)
30               
31                self.image=Gtk.Image()
32                self.add_titled(hbox,"spinner","Spinner")
33                self.add_titled(self.image,"image","Image")
34               
35                self.image_info={}
36                self.image_info["image_url"]=None
37                self.image_info["video_url"]=None
38                self.image_info["image_id"]=None
39                self.image_info["pkg_name"]=None
40                self.image_info["image_path"]=None
41                self.image_info["x"]=-1
42                self.image_info["y"]=-1
43                self.image_info["aspect_ratio"]=True
44                self.image_info["custom_frame"]=False
45                self.image_info["force_label"]=False
46                self.image_info["pixbuf"]=None
47               
48                self.show_all()
49               
50        #def init
51       
52        def set_image_info(self,image_info):
53               
54                self.image_info["pkg_name"]=image_info.setdefault("pkg_name","")
55                self.image_info["image_path"]=image_info.setdefault("image_path","")
56                self.image_info["x"]=image_info.setdefault("x",-1)
57                self.image_info["y"]=image_info.setdefault("y",-1)
58                self.image_info["aspect_ratio"]=image_info.setdefault("aspect_ratio",True)
59                self.image_info["pixbuf"]=image_info.setdefault("pixbuf",None)
60                self.image_info["image_url"]=image_info.setdefault("image_url","")
61                self.image_info["image_id"]=image_info.setdefault("image_id",self.get_random_id())
62                self.image_info["custom_frame"]=image_info.setdefault("custom_frame",False)
63                self.image_info["force_label"]=image_info.setdefault("force_label",False)
64               
65        #def set_image_info
66       
67        def get_random_id(self):
68               
69                chars=string.ascii_lowercase
70                size=10
71               
72                return ''.join(random.choice(chars) for _ in range(size))
73               
74        #def get_random_id
75       
76        def set_from_file(self,image_info):
77               
78               
79                self.set_image_info(image_info)
80               
81                x=self.image_info["x"]
82                y=self.image_info["y"]
83                aspect_ratio=self.image_info["aspect_ratio"]
84                file_path=self.image_info["image_path"]
85               
86                if os.path.exists(file_path):
87                       
88                        if x==-1 and y==-1:
89                       
90                                self.image.set_from_file(file_path)
91                                pixbuf=self.image.get_pixbuf()
92                                self.image_info["x"]=pixbuf.get_width()
93                                self.image_info["y"]=pixbuf.get_height()
94                                self.set_visible_child_name("image")
95                                return True
96                               
97                        else:
98                               
99                                tmp=ImageManager.scale_image(file_path,x,y,aspect_ratio)
100                                pixbuf=tmp.get_pixbuf()
101                                self.image_info["x"]=pixbuf.get_width()
102                                self.image_info["y"]=pixbuf.get_height()
103                                self.image.set_from_pixbuf(tmp.get_pixbuf())
104                                self.set_visible_child_name("image")
105                                return True
106                       
107                return False
108               
109        #def set_from_file
110       
111        def get_size(self):
112               
113                print self.image_info["x"]
114                print self.image_info["y"]
115               
116        #def get_size
117       
118        def set_from_pixbuf(self,image_info):
119               
120                self.set_image_info(image_info)         
121               
122                x=self.image_info["x"]
123                y=self.image_info["x"]
124                pixbuf=self.image_info["pixbuf"]
125                aspect_ratio=self.image_info["aspect_ratio"]
126               
127                if pixbuf!=None:
128                       
129                        if x==-1 and y==-1:
130                               
131                                self.image.set_from_pixbuf(pixbuf)
132                                self.image_info["x"]=pixbuf.get_width()
133                                self.image_info["y"]=pixbuf.get_height()
134                                self.set_visible_child_name("image")
135                               
136                        else:
137                               
138                                pixbuf=ImageManager.scale_pixbuf(pixbuf,x,y,aspect_ratio)
139                                self.image.set_from_pixbuf(pixbuf)
140                                self.image_info["x"]=pixbuf.get_width()
141                                self.image_info["y"]=pixbuf.get_height()
142                                self.set_visible_child_name("image")
143                       
144               
145                        return True
146
147                return False           
148               
149        #set_from_pixbuf
150       
151        def wait_for_image(self):
152       
153                while self.thread.is_alive():
154                        return True
155               
156               
157                if os.path.exists(self.image_dir+self.image_info["image_id"]):
158                        self.set_from_file(self.image_info)
159               
160                return False
161       
162        #def _download
163       
164        def download_image(self,image_info):
165               
166                self.set_image_info(image_info) 
167               
168                x=self.image_info["x"]
169                y=self.image_info["y"]
170               
171                self.set_visible_child_name("spinner")
172               
173                self.spinner.set_size_request(x,y)
174                GLib.timeout_add(500,self.wait_for_image)
175               
176                self.thread=threading.Thread(target=self.download_image_thread)
177                self.thread.daemon=True
178                self.thread.start()
179               
180        #def download_image
181       
182        def download_image_thread(self):
183               
184                if not os.path.exists(self.image_dir+self.image_info["image_id"]):
185                       
186                        header = {
187                                        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
188                                }
189                       
190                        try:
191                       
192                                req=urllib2.Request(self.image_info["image_url"],headers=header)
193                                res=urllib2.urlopen(req)
194                                f=open(self.image_dir+self.image_info["image_id"],"w")
195                                f.write(res.read())
196                                f.close()
197                                self.image_info["image_path"]=self.image_dir+self.image_info["image_id"]
198                               
199                                if self.image_info["custom_frame"] or self.image_info["force_label"]:
200                                        ImageManager.create_banner(self.image_dir+self.image_info["image_id"],self.image_info["x"],self.image_info["y"],self.image_info["pkg_name"],self.image_info["custom_frame"],self.image_info["image_path"])
201                                       
202                        except Exception as e:
203                                self.image_info["image_path"]="/usr/share/icons/Vibrancy-Colors/mimetypes/256/package.svg"
204                                self.image_info["custom_frame"]=True
205                                self.create_banner_from_file(self.image_info)
206               
207                else:
208                        self.image_info["image_path"]=self.image_dir+self.image_info["image_id"]
209
210                return True
211               
212        #def download-image-thread
213       
214        def create_banner_from_file(self,image_info,output_file=None):
215               
216                file_name=image_info.setdefault("image_path")
217                x=image_info.setdefault("x")
218                y=image_info.setdefault("y")
219                custom_frame=image_info.setdefault("custom_frame",False)
220                txt=image_info.setdefault("pkg_name","")
221                               
222                ret=ImageManager.create_banner(file_name,x,y,txt,custom_frame,output_file)
223               
224                if output_file ==None:
225                        image_info["pixbuf"]=ret[1].get_pixbuf()
226                        self.set_from_pixbuf(image_info)
227                else:
228                        image_info["image_path"]=output_file
229                        self.set_from_file(image_info)
230               
231               
232        #def create_banner_from_file
233       
234        def create_banner_from_url(self,image_info):
235               
236                self.set_image_info(self.image_info)
237                self.download_image(image_info)
238               
239        #def create_banner_from_url
240       
241        def set_video_info(self,video_info):
242               
243                video_info.setdefault("video_url","")
244                video_info.setdefault("image_url","")
245                video_info.setdefault("image_id","")
246                video_info.setdefault("x",-1)
247                video_info.setdefault("y",-1)
248               
249               
250                self.set_image_info(video_info)
251               
252                self.image_info["video_url"]=video_info.setdefault("video_url")
253                self.image_info["image_url"]=video_info.setdefault("image_url")
254                self.image_info["image_id"]=video_info.setdefault("image_id")
255                self.image_info["x"]=video_info.setdefault("x")
256                self.image_info["y"]=video_info.setdefault("y")
257                self.image_info["pkg_name"]=video_info.setdefault("pkg_name","")
258                               
259                self.download_image(video_info)
260               
261        #def set_video_info
262       
263       
264#class ScreenshotNeo
265
266
267if __name__=="__main__":
268       
269        w=Gtk.Window()
270        w.connect("destroy",Gtk.main_quit)
271       
272        hbox=Gtk.HBox()
273        vbox=Gtk.VBox()
274        hbox.pack_start(vbox,False,False,0)
275        w.add(hbox)
276       
277        s=ScreenshotNeo()
278        info={}
279        info["image_path"]="gearth2.png"
280        info["x"]=300
281        info["y"]=300
282        info["aspect_ratio"]=True
283        info["pkg_name"]="a"
284        s.set_from_file(info)
285        vbox.pack_start(Gtk.Label("load from file aspect_ratio=True"),False,False,0)
286        vbox.pack_start(s,False,False,0)
287       
288        s=ScreenshotNeo()
289        info={}
290        info["image_path"]="gearth2.png"
291        info["x"]=100
292        info["y"]=100
293        info["aspect_ratio"]=False
294        info["pkg_name"]="a"
295        s.set_from_file(info)
296        vbox.pack_start(Gtk.Label("load from file aspect_ratio=False"),False,False,0)
297        vbox.pack_start(s,False,False,0)
298       
299        s=ScreenshotNeo()
300        info={}
301        info["pixbuf"]=Gtk.Image.new_from_file("gearth3.png").get_pixbuf()
302        info["aspect_ratio"]=True
303        info["pkg_name"]="a"
304        s.set_from_pixbuf(info)
305        vbox.pack_start(Gtk.Label("load from pixbuf aspect_ratio=True"),False,False,0)
306        vbox.pack_start(s,False,False,0)
307       
308        s=ScreenshotNeo()
309        info={}
310        info["pixbuf"]=Gtk.Image.new_from_file("gearth3.png").get_pixbuf()
311        info["aspect_ratio"]=False
312        info["pkg_name"]="a"
313        info["x"]=100
314        info["y"]=100
315        s.set_from_pixbuf(info)
316        vbox.pack_start(Gtk.Label("load from pixbuf aspect_ratio=False"),False,False,0)
317        vbox.pack_start(s,False,False,0)
318       
319        s=ScreenshotNeo()
320        info={}
321        info["image_url"]="http://www.hdbloggers.net/wp-content/uploads/2016/10/Wallpaper-4K.jpg"
322        info["image_id"]="wallpaper"
323        info["aspect_ratio"]=True
324        info["pkg_name"]="a"
325        info["x"]=300
326        info["y"]=300
327        s.download_image(info)
328        vbox.pack_start(Gtk.Label("url aspect_ratio=True"),False,False,0)
329        vbox.pack_start(s,False,False,0)
330
331        s=ScreenshotNeo()
332        info={}
333        info["image_url"]="http://no.existo.com/asd.jpg"
334        info["image_id"]="wallpaper2"
335        info["aspect_ratio"]=True
336        info["pkg_name"]="Package name"
337        info["x"]=128
338        info["y"]=128
339        s.download_image(info)
340        vbox.pack_start(Gtk.Label("url 404 aspect_ratio=True"),False,False,0)
341        vbox.pack_start(s,False,False,0)
342
343        vbox1=Gtk.VBox()
344        hbox.pack_start(vbox1,False,False,0)
345
346        s=ScreenshotNeo()
347        info={}
348        info["image_path"]="/usr/share/pixmaps/firefox.png"
349        info["image_id"]="firefox"
350        info["aspect_ratio"]=True
351        info["pkg_name"]="Firefox"
352        info["custom_frame"]=True
353        info["x"]=300
354        info["y"]=300
355        s.create_banner_from_file(info)
356        vbox1.pack_start(Gtk.Label("create banner from file. resize_image=True"),False,False,0)
357        vbox1.pack_start(s,False,False,0)
358
359        s=ScreenshotNeo()
360        info={}
361        info["image_path"]="/home/cless/svn/xenial/lliurex-artwork-icons/trunk/fuentes/future-green/apps/scite.svg"
362        info["image_id"]="scite"
363        info["aspect_ratio"]=True
364        info["pkg_name"]="SciTe"
365        info["custom_frame"]=False
366        info["x"]=200
367        info["y"]=200
368        s.create_banner_from_file(info)
369        vbox1.pack_start(Gtk.Label("create banner from file. resize_image=False"),False,False,0)
370        vbox1.pack_start(s,False,False,0)
371
372       
373        s=ScreenshotNeo()
374        info={}
375        info["image_url"]="http://androidportal.zoznam.sk/wp-content/uploads/2013/01/2013-purple-640x569.png"
376        info["image_id"]="testing"
377        info["aspect_ratio"]=True
378        info["pkg_name"]="Custom banner"
379        info["custom_frame"]=False
380        info["force_label"]=True
381        info["x"]=400
382        info["y"]=400
383       
384        s.create_banner_from_url(info)
385        vbox1.pack_start(Gtk.Label("create banner from URL. resize_image=False"),False,False,0)
386        vbox1.pack_start(s,False,False,0)
387       
388
389       
390        w.show_all()
391       
392        GObject.threads_init()
393        Gtk.main()
394       
Note: See TracBrowser for help on using the repository browser.