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

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

wip

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