source: lliurex-store/trunk/fuentes/lliurex-store-gui/MainMenu.py @ 3814

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

wip

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