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

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

wuo

File size: 10.3 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["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"],"wb")
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                                print(e)
204                                self.image_info["image_path"]="/usr/share/icons/Vibrancy-Colors/mimetypes/256/package.svg"
205                                self.image_info["custom_frame"]=True
206                                self.create_banner_from_file(self.image_info)
207               
208                else:
209                        self.image_info["image_path"]=self.image_dir+self.image_info["image_id"]
210
211                return True
212               
213        #def download-image-thread
214       
215        def create_banner_from_file(self,image_info,output_file=None):
216               
217                file_name=image_info.setdefault("image_path")
218                x=image_info.setdefault("x")
219                y=image_info.setdefault("y")
220                custom_frame=image_info.setdefault("custom_frame",False)
221                txt=image_info.setdefault("name","")
222                               
223                ret=ImageManager.create_banner(file_name,x,y,txt,custom_frame,output_file)
224               
225                if output_file ==None:
226                        image_info["pixbuf"]=ret[1].get_pixbuf()
227                        self.set_from_pixbuf(image_info)
228                else:
229                        image_info["image_path"]=output_file
230                        self.set_from_file(image_info)
231               
232               
233        #def create_banner_from_file
234       
235        def create_banner_from_url(self,image_info):
236               
237                self.set_image_info(self.image_info)
238                self.download_image(image_info)
239               
240        #def create_banner_from_url
241       
242        def set_video_info(self,video_info):
243               
244                video_info.setdefault("video_url","")
245                video_info.setdefault("image_url","")
246                video_info.setdefault("image_id","")
247                video_info.setdefault("x",-1)
248                video_info.setdefault("y",-1)
249               
250               
251                self.set_image_info(video_info)
252               
253                self.image_info["video_url"]=video_info.setdefault("video_url")
254                self.image_info["image_url"]=video_info.setdefault("image_url")
255                self.image_info["image_id"]=video_info.setdefault("image_id")
256                self.image_info["x"]=video_info.setdefault("x")
257                self.image_info["y"]=video_info.setdefault("y")
258                self.image_info["pkg_name"]=video_info.setdefault("pkg_name","")
259                               
260                self.download_image(video_info)
261               
262        #def set_video_info
263       
264       
265#class ScreenshotNeo
266
267
268if __name__=="__main__":
269       
270        w=Gtk.Window()
271        w.connect("destroy",Gtk.main_quit)
272       
273        hbox=Gtk.HBox()
274        vbox=Gtk.VBox()
275        hbox.pack_start(vbox,False,False,0)
276        w.add(hbox)
277       
278        s=ScreenshotNeo()
279        info={}
280        info["image_path"]="gearth2.png"
281        info["x"]=300
282        info["y"]=300
283        info["aspect_ratio"]=True
284        info["pkg_name"]="a"
285        s.set_from_file(info)
286        vbox.pack_start(Gtk.Label("load from file aspect_ratio=True"),False,False,0)
287        vbox.pack_start(s,False,False,0)
288       
289        s=ScreenshotNeo()
290        info={}
291        info["image_path"]="gearth2.png"
292        info["x"]=100
293        info["y"]=100
294        info["aspect_ratio"]=False
295        info["pkg_name"]="a"
296        s.set_from_file(info)
297        vbox.pack_start(Gtk.Label("load from file aspect_ratio=False"),False,False,0)
298        vbox.pack_start(s,False,False,0)
299       
300        s=ScreenshotNeo()
301        info={}
302        info["pixbuf"]=Gtk.Image.new_from_file("gearth3.png").get_pixbuf()
303        info["aspect_ratio"]=True
304        info["pkg_name"]="a"
305        s.set_from_pixbuf(info)
306        vbox.pack_start(Gtk.Label("load from pixbuf aspect_ratio=True"),False,False,0)
307        vbox.pack_start(s,False,False,0)
308       
309        s=ScreenshotNeo()
310        info={}
311        info["pixbuf"]=Gtk.Image.new_from_file("gearth3.png").get_pixbuf()
312        info["aspect_ratio"]=False
313        info["pkg_name"]="a"
314        info["x"]=100
315        info["y"]=100
316        s.set_from_pixbuf(info)
317        vbox.pack_start(Gtk.Label("load from pixbuf aspect_ratio=False"),False,False,0)
318        vbox.pack_start(s,False,False,0)
319       
320        s=ScreenshotNeo()
321        info={}
322        info["image_url"]="http://www.hdbloggers.net/wp-content/uploads/2016/10/Wallpaper-4K.jpg"
323        info["image_id"]="wallpaper"
324        info["aspect_ratio"]=True
325        info["pkg_name"]="a"
326        info["x"]=300
327        info["y"]=300
328        s.download_image(info)
329        vbox.pack_start(Gtk.Label("url aspect_ratio=True"),False,False,0)
330        vbox.pack_start(s,False,False,0)
331
332        s=ScreenshotNeo()
333        info={}
334        info["image_url"]="http://no.existo.com/asd.jpg"
335        info["image_id"]="wallpaper2"
336        info["aspect_ratio"]=True
337        info["pkg_name"]="Package name"
338        info["x"]=128
339        info["y"]=128
340        s.download_image(info)
341        vbox.pack_start(Gtk.Label("url 404 aspect_ratio=True"),False,False,0)
342        vbox.pack_start(s,False,False,0)
343
344        vbox1=Gtk.VBox()
345        hbox.pack_start(vbox1,False,False,0)
346
347        s=ScreenshotNeo()
348        info={}
349        info["image_path"]="/usr/share/pixmaps/firefox.png"
350        info["image_id"]="firefox"
351        info["aspect_ratio"]=True
352        info["pkg_name"]="Firefox"
353        info["custom_frame"]=True
354        info["x"]=300
355        info["y"]=300
356        s.create_banner_from_file(info)
357        vbox1.pack_start(Gtk.Label("create banner from file. resize_image=True"),False,False,0)
358        vbox1.pack_start(s,False,False,0)
359
360        s=ScreenshotNeo()
361        info={}
362        info["image_path"]="/home/cless/svn/xenial/lliurex-artwork-icons/trunk/fuentes/future-green/apps/scite.svg"
363        info["image_id"]="scite"
364        info["aspect_ratio"]=True
365        info["pkg_name"]="SciTe"
366        info["custom_frame"]=False
367        info["x"]=200
368        info["y"]=200
369        s.create_banner_from_file(info)
370        vbox1.pack_start(Gtk.Label("create banner from file. resize_image=False"),False,False,0)
371        vbox1.pack_start(s,False,False,0)
372
373       
374        s=ScreenshotNeo()
375        info={}
376        info["image_url"]="http://androidportal.zoznam.sk/wp-content/uploads/2013/01/2013-purple-640x569.png"
377        info["image_id"]="testing"
378        info["aspect_ratio"]=True
379        info["pkg_name"]="Custom banner"
380        info["custom_frame"]=False
381        info["force_label"]=True
382        info["x"]=400
383        info["y"]=400
384       
385        s.create_banner_from_url(info)
386        vbox1.pack_start(Gtk.Label("create banner from URL. resize_image=False"),False,False,0)
387        vbox1.pack_start(s,False,False,0)
388       
389
390       
391        w.show_all()
392       
393        GObject.threads_init()
394        Gtk.main()
395       
Note: See TracBrowser for help on using the repository browser.