source: lliurex-store/trunk/fuentes/lliurex-store-gui/usr/share/lliurex-store/lliurex-store-gui/LliurexStoreManager.py @ 8187

Last change on this file since 8187 was 8187, checked in by hectorgh, 15 months ago

search related by threads

File size: 4.9 KB
Line 
1import lliurexstore.storeManager
2import time
3import Package
4import Core
5import random
6import copy
7import gettext
8
9class LliurexStoreManager:
10
11        def __init__(self):
12               
13                self.store=lliurexstore.storeManager.StoreManager(snap=True,appimage=True)
14                # library has its own textdomain and I am forced to change it back to lliurex-store
15                gettext.textdomain('lliurex-store')             
16                self.core=Core.Core.get_core()
17       
18        #def init
19       
20        def list_sections(self):
21                action="list_sections"
22                self.store.execute_action(action,True)
23               
24                while self.store.is_action_running(action):
25                        time.sleep(0.2)
26               
27                print(self.store.get_status(action))
28                print(self.store.get_result(action))
29                print("DONE")
30               
31        #def search
32       
33       
34        def search_package(self,search_text):
35               
36                action="search"
37                self.store.execute_action(action,search_text)
38               
39                packages=[]
40               
41                while self.store.is_action_running("search"):
42                        time.sleep(0.2)
43                       
44                ret=self.store.get_status(action)
45               
46                if ret["status"]==0:
47                        data=self.store.get_result(action)
48                        for item in data["search"]:
49                               
50                                p=Package.Package(item)
51                                packages.append(p)
52               
53                return packages
54               
55        #def search_package
56       
57       
58        def get_info(self,pkg_id):
59               
60                action="info"
61               
62                self.store.execute_action(action,pkg_id)
63                while self.store.is_action_running(action):
64                        time.sleep(0.2)
65                ret=self.store.get_status(action)
66               
67                if ret["status"]==0:
68                       
69                        data=self.store.get_result(action)
70                        try:
71                                p=Package.Package(data["info"][0])
72                        except:
73                                return(Package.Package())
74                       
75                        categories=copy.deepcopy(p["categories"])
76                        banned=set()
77                       
78                        for item in self.core.categories_manager.categories:
79                                if item in categories and len(categories) > 1:
80                                        categories.remove(item)
81               
82                        for item in self.core.categories_manager.banned_categories:
83                                if item in categories and len(categories) > 1:
84                                        categories.remove(item)                 
85               
86                        '''
87                        if len(categories)>0:
88
89                                random_id=int(random.random()*len(categories))
90                               
91                                random_category=categories[random_id]
92                                pkgs,categories=self.get_package_list_from_category(random_category,10)
93                               
94                                if len(pkgs) >=10:
95                                        samples=10
96                                else:
97                                        samples=len(pkgs)
98                               
99                                for item in random.sample(pkgs,samples):
100                                        if item["package"]!=pkg_id:
101                                                p["related_packages"].append(item)
102                                       
103                                p.fix_info()
104                       
105                        '''
106                       
107                        return p
108               
109        #def get_info
110       
111       
112        def get_random_packages_from_categories(self,pkg_id,categories):
113               
114                for item in self.core.categories_manager.categories:
115                        if item in categories and len(categories) > 1:
116                                categories.remove(item)
117               
118                for item in self.core.categories_manager.banned_categories:
119                        if item in categories and len(categories) > 1:
120                                categories.remove(item) 
121               
122                random_id=int(random.random()*len(categories))
123                               
124                random_category=categories[random_id]
125                pkgs,categories=self.get_package_list_from_category(random_category)
126               
127                p=Package.Package({})
128                p.fix_info()
129                               
130                if len(pkgs) >=10:
131                        samples=10
132                else:
133                        samples=len(pkgs)
134                               
135                for item in random.sample(pkgs,samples):
136                        if item["package"]!=pkg_id:
137                                p["related_packages"].append(item)
138                                       
139                p.fix_info()
140               
141                return p
142               
143        #def get_random_packages_from_categories
144       
145       
146        def get_package_list_from_category(self,category_tag=None,results=0):
147               
148                action="list"
149                self.store.execute_action(action,[category_tag],max_results=results)
150               
151                while self.store.is_action_running(action):
152                        time.sleep(0.2)
153               
154                packages=[]
155                categories=set()
156                banned=set()
157               
158                if category_tag in self.core.categories_manager.categories:
159                        for item in self.core.categories_manager.categories[category_tag]["sections"]:
160                                categories.add(item)
161               
162                for item in self.core.categories_manager.banned_categories:
163                        banned.add(item)
164                       
165               
166                ret=self.store.get_status(action)
167                if ret["status"]==0:
168                        for item in self.store.get_result(action)["list"]:
169                                p=Package.Package(item)
170                               
171                                for category in p["categories"]:
172                                        if type(category)!=str:
173                                                continue
174                                        if category not in banned and not category.startswith("X-") and category in categories:
175                                                categories.add(category)
176                               
177                                packages.append(p)
178               
179                return(packages,categories)
180               
181        #def get_package_list
182       
183
184        def get_installed_list(self):
185               
186                pkgs,categories=self.get_package_list_from_category()
187                ret=[]
188               
189                for pkg in pkgs:
190                       
191                        if pkg["state"]=="installed":
192                                p=Package.Package(pkg)
193                                ret.append(p)
194                               
195                return ret
196                               
197        #def get_installed_list
198
199       
200        def install_package(self,pkg_id):
201               
202                action="install"
203                self.store.execute_action(action,pkg_id)
204               
205                while self.store.is_action_running(action):
206                        time.sleep(0.2)
207                       
208                ret=self.store.get_status(action)       
209                if ret["status"]==0:
210                        return True
211                       
212                return False
213               
214        #def install_package
215       
216       
217        def uninstall_package(self,pkg_id):
218               
219                action="remove"
220                self.store.execute_action(action,pkg_id)
221               
222                while self.store.is_action_running(action):
223                        time.sleep(0.2)
224                       
225                ret=self.store.get_status(action)       
226                if ret["status"]==0:
227                        return True
228                       
229                return False
230               
231        #def install_package
232
233
234#class StoreManager
Note: See TracBrowser for help on using the repository browser.