source: lliurex-store/trunk/fuentes/lliurex-store-gui/usr/share/lliurex-store/lliurex-store-gui/Screenshot.py @ 8703

Last change on this file since 8703 was 5703, checked in by hectorgh, 4 years ago

cleaning code + fixing gettext when initializing lliurexstoremanager

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