source: lliurex-store/trunk/fuentes/lliurex-store-gui/usr/share/lliurex-store/lliurex-store-gui/MainMenu.py @ 4134

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

wip

File size: 8.2 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3
4from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
5
6import signal
7signal.signal(signal.SIGINT, signal.SIG_DFL)
8
9import urllib.request as urllib2
10import shutil
11import json
12import random
13
14import Core
15import Screenshot
16import ImageManager
17import Package
18import os
19
20import gettext
21gettext.textdomain('lliurex-store')
22_ = gettext.gettext
23
24
25
26HOME_CONTENT_URL="http://svn.lliurex.net/xenial/lliurex-store/trunk/fuentes/lliurex-store-gui/usr/share/lliurex-store/lliurex-store-gui/rsrc/home_content.json"
27#HOME_CONTENT_URL="file:///srv/svn/xenial/lliurex-store/trunk/fuentes/lliurex-store-gui/home_content.json"
28#TMP_STORE_DIR="/tmp/.lliurex-store/"
29TMP_STORE_DIR=os.path.expanduser("~/.cache/")
30
31class MainMenu(Gtk.VBox):
32       
33        def __init__(self):
34               
35                Gtk.VBox.__init__(self)
36               
37                self.paused=False
38                self.max_image_id=5
39               
40                self.banner_large_x=735
41                self.banner_large_y=180
42                self.banner_small=134
43               
44                self.core=Core.Core.get_core()
45               
46                ui_path=self.core.ui_path
47               
48                builder=Gtk.Builder()
49                builder.set_translation_domain('lliurex-store')
50                builder.add_from_file(ui_path)
51               
52               
53               
54                self.main_view_box=builder.get_object("main_view_box")
55                self.divider1=builder.get_object("mv_divider1")
56                self.divider2=builder.get_object("mv_divider2")
57                self.divider3=builder.get_object("mv_divider3")
58                self.featured_label=builder.get_object("featured_label")
59                self.categories_label=builder.get_object("categories_label")
60                self.featured_extra_box=builder.get_object("featured_extra_box")
61                self.rewind_button=builder.get_object("media_rewind_button")
62                self.play_button=builder.get_object("media_play_button")
63                self.forward_button=builder.get_object("media_forward_button")
64                self.media_play_image=builder.get_object("media_play_image")
65                self.categories_grid=builder.get_object("categories_grid")
66
67                self.image_stack=Gtk.Stack()
68                self.image_stack.set_transition_duration(800)
69                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
70                self.image_stack.set_margin_right(10)
71                self.image_stack.set_margin_left(10)
72                self.image_stack.set_size_request(self.banner_large_x,self.banner_large_y)
73                self.image_stack.set_halign(Gtk.Align.CENTER)
74               
75                self.main_view_box.pack_start(self.image_stack,False,False,10)
76                self.main_view_box.reorder_child(self.image_stack,2)
77               
78                '''
79               
80                # MIGHT OR MIGHT NOT DO THIS IN THE FUTURE
81               
82                self.categories_flowbox = Gtk.FlowBox()
83                self.categories_flowbox.set_max_children_per_line(30)
84                self.categories_flowbox.set_column_spacing(0)
85                self.categories_flowbox.set_row_spacing(0)
86                self.categories_flowbox.set_margin_left(10)
87                self.categories_flowbox.set_margin_right(10)
88                self.categories_flowbox.set_halign(Gtk.Align.FILL)
89               
90                self.main_view_box.pack_start(self.categories_flowbox,False,False,10)
91                '''
92               
93                self.pack_start(self.main_view_box,True,True,0)
94               
95                self.rewind_button.connect("clicked",self.rewind_clicked)
96                self.play_button.connect("clicked",self.play_clicked)
97                self.forward_button.connect("clicked",self.forward_clicked)
98               
99                self.build_categories()
100                self.set_css_names()
101               
102                GLib.timeout_add(3000,self.next_image)
103               
104        #def __init__
105       
106        def download_home_info(self):
107               
108                #HOME_CONTENT_URL
109               
110                header = {
111                                        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
112                                }
113                       
114                try:
115                       
116                        self.core.dprint("Downloading home_content.json...")
117                       
118                       
119                        req=urllib2.Request(HOME_CONTENT_URL,headers=header)
120                        res=urllib2.urlopen(req)
121                       
122                        f=open(TMP_STORE_DIR+"home_content.json","w")
123                        f.write(res.read().decode("utf-8"))
124                        f.close()
125                       
126                       
127                        f=open(TMP_STORE_DIR+"home_content.json")
128                        self.home_info=json.load(f)
129                       
130                        f.close()
131
132                except Exception as e:
133                       
134                        print(e)
135               
136               
137        #def download_home_info
138       
139        def build_banners(self):
140
141                # Main banners
142               
143                spacing=5
144                count=1
145               
146                for pkg in self.home_info["large"]:
147                        s=Screenshot.ScreenshotNeo()
148                        info={}
149                        info["image_url"]=pkg["banner_large"]
150                        info["image_id"]=pkg["package"]+"_banner_large"
151                        info["x"]=self.banner_large_x
152                        info["y"]=self.banner_large_y
153                        info["aspect_ratio"]=True
154                        info["name"]=pkg["name"]
155                        info["package"]=pkg["package"]
156                        s.download_image(info)
157                        s.set_size_request(self.banner_large_x,self.banner_large_y)
158                        b=Gtk.Button()
159                        b.set_name("RELATED_BUTTON")
160                        b.add(s)
161                        b.show_all()
162                        b.set_size_request(self.banner_large_x,self.banner_large_y)
163                        b.connect("clicked",self.banner_clicked,pkg)
164                        self.image_stack.add_titled(b,"image%s"%count,"Image %s"%count)
165                        count+=1
166
167               
168                # Smaller banners
169               
170               
171                banner_range=range(0,len(self.home_info["small"]))
172                sample=random.sample(banner_range,5)
173               
174                for b_id in banner_range:
175                       
176                        pkg=self.home_info["small"][b_id]
177                        s=Screenshot.ScreenshotNeo()
178                        info={}
179                        if pkg["banner_small"]!=None:
180                                info["image_url"]=pkg["banner_small"]
181                                info["aspect_ratio"]=False
182                        else:
183                                info["image_path"]=self.core.resources.get_icon(pkg)
184                                info["aspect_ratio"]=True
185                                info["custom_frame"]=True
186                               
187                        info["image_id"]=pkg["package"]+"_banner_small"
188                        info["x"]=self.banner_small
189                        info["y"]=self.banner_small
190                        info["name"]=pkg["name"]
191                        info["package"]=pkg["package"]
192                       
193                        if pkg["banner_small"]!=None:
194                                s.download_image(info)
195                        else:
196                                s.create_banner_from_file(info)
197                        b=Gtk.Button()
198                        b.set_name("RELATED_BUTTON")
199                        b.add(s)
200                        b.connect("clicked",self.banner_clicked,pkg)
201                        self.featured_extra_box.pack_start(b,True,False,spacing)
202                               
203               
204               
205                self.show_all()
206               
207               
208        #def build_related
209       
210        def build_categories(self):
211               
212                max_width=7
213                w_counter=0
214                h_counter=0
215                button_size=97
216               
217                               
218                for item in sorted(self.core.categories_manager.categories):
219                       
220                        icon_name=self.core.categories_manager.categories[item]["icon"]
221                        label=_(item)
222               
223                        b=Gtk.Button()
224                        b.set_name("RELATED_BUTTON")
225                        hbox=Gtk.HBox()
226                        hbox.set_halign(Gtk.Align.START)
227                                               
228                        s=Screenshot.ScreenshotNeo()
229                        i={}
230                        i["image_path"]=icon_name
231                        i["x"]=button_size
232                        i["y"]=button_size
233                        i["custom_frame"]=True
234                        i["name"]=label
235                        s.create_banner_from_file(i)
236                        b.add(s)
237                        b.connect("clicked",self.category_clicked,item)
238
239                        '''
240                        self.categories_flowbox.add(b)
241                        '''
242                        self.categories_grid.attach(b,w_counter,h_counter,1,1)
243                        w_counter+=1
244                        if w_counter ==max_width:
245                                w_counter=0
246                                h_counter+=1
247                       
248                self.categories_grid.show_all()
249               
250                '''
251                self.categories_flowbox.show_all()
252                '''
253               
254        #def build_categories
255       
256       
257        def set_css_names(self):
258               
259                self.main_view_box.set_name("DETAILS_BOX")
260                self.divider1.set_name("DIVIDER")
261                self.divider2.set_name("DIVIDER")
262                self.divider3.set_name("DIVIDER")
263                self.featured_label.set_name("RELATED_LABEL")
264                self.categories_label.set_name("RELATED_LABEL")
265                self.rewind_button.set_name("MEDIA_BUTTON")
266                self.play_button.set_name("MEDIA_BUTTON")
267                self.forward_button.set_name("MEDIA_BUTTON")
268               
269        #def set_css_info
270       
271       
272        def banner_clicked(self,widget,pkg):
273               
274                p=Package.Package(pkg)
275                self.core.main_window.load_pkg_data(p["package"])
276               
277        #def banner_clicked
278
279       
280        def category_clicked(self,widget,category_tag):
281               
282                self.core.search_box.current_category=_(category_tag)
283                self.core.main_window.search_category(category_tag)
284               
285        #def category_clicked
286       
287       
288        def next_image(self,force=False,add=True):
289               
290                tmp=self.image_stack.get_visible_child_name()
291                if tmp!=None:
292                        id=int(tmp.split("image")[1])
293                       
294                        if add:
295                       
296                                if id < self.max_image_id:
297                                        id+=1
298                                else:
299                                        id=1
300                        else:
301                               
302                                if id <= 1:
303                                        id=self.max_image_id
304                                else:
305                                        id-=1
306                       
307                        id="image%s"%id
308                       
309                        if not self.paused or force:
310                                if not self.image_stack.get_transition_running() or force:
311                                        self.image_stack.set_visible_child_name(id)
312                       
313                return True
314               
315        #def next_image
316
317       
318        def rewind_clicked(self,widget):
319               
320                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
321                self.next_image(True,False)
322                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
323               
324        #def rewind_clicked
325
326       
327        def play_clicked(self,widget):
328
329                if self.paused:
330                        self.media_play_image.set_from_file(self.core.rsrc_dir + "icons/media/media_pause.svg")
331                else:
332                        self.media_play_image.set_from_file(self.core.rsrc_dir+ "icons/media/media_play.svg")
333                       
334                self.paused=not self.paused
335               
336        #def rewind_clicked
337
338       
339        def forward_clicked(self,widget):
340               
341                self.next_image(True)
342               
343        #def rewind_clicked
344       
345#class MainMenu
Note: See TracBrowser for help on using the repository browser.