52
51
# extract this to a "leaner" widget
53
52
self.catview = catview
54
53
self.catview.connect(
55
"application-activated", self._on_application_activated)
54
"application-activated", self._on_application_activated)
56
55
self.recommender_agent = RecommenderAgent()
58
57
def _on_application_activated(self, catview, app):
59
58
self.emit("application-activated", app)
62
class RecommendationsPanelLobby(RecommendationsPanel):
60
def _on_recommender_agent_error(self, agent, msg):
61
LOG.warn("Error while accessing the recommender agent: %s" % msg)
62
# TODO: temporary, instead we will display cached recommendations here
63
self._hide_recommended_for_you_panel()
65
def _hide_recommended_for_you_panel(self):
70
class RecommendationsPanelCategory(RecommendationsPanel):
72
Panel for use in the category view that displays recommended apps for
75
def __init__(self, catview, subcategory):
76
RecommendationsPanel.__init__(self, catview)
77
self.subcategory = subcategory
79
self.set_header_label(
80
_(u"Recommended For You in %s") % self.subcategory.name)
81
self.recommended_for_you_content = None
82
if self.recommender_agent.is_opted_in():
83
self._update_recommended_for_you_content()
85
self._hide_recommended_for_you_panel()
87
def _update_recommended_for_you_content(self):
88
# destroy the old content to ensure we don't see it twice
89
if self.recommended_for_you_content:
90
self.recommended_for_you_content.destroy()
92
self.recommended_for_you_content = FlowableGrid()
93
self.add(self.recommended_for_you_content)
94
self.spinner_notebook.show_spinner(_("Receiving recommendations…"))
95
# get the recommendations from the recommender agent
96
self.recommended_for_you_cat = RecommendedForYouCategory(
97
subcategory=self.subcategory)
98
self.recommended_for_you_cat.connect(
100
self._on_recommended_for_you_agent_refresh)
101
self.recommended_for_you_cat.connect('recommender-agent-error',
102
self._on_recommender_agent_error)
104
def _on_recommended_for_you_agent_refresh(self, cat):
105
self.header_implements_more_button()
106
docs = cat.get_documents(self.catview.db)
107
# display the recommendedations
109
self.catview._add_tiles_to_flowgrid(docs,
110
self.recommended_for_you_content, 8)
111
self.recommended_for_you_content.show_all()
112
self.spinner_notebook.hide_spinner()
113
self.more.connect('clicked',
114
self.catview.on_category_clicked,
118
# hide the panel if we have no recommendations to show
119
self._hide_recommended_for_you_panel()
122
class RecommendationsPanelLobby(RecommendationsPanelCategory):
64
124
Panel for use in the lobby view that manages the recommendations
65
125
experience, includes the initial opt-in screen and display of
79
139
def __init__(self, catview):
80
140
RecommendationsPanel.__init__(self, catview)
141
self.subcategory = None
81
142
self.set_header_label(_(u"Recommended For You"))
83
# if we already have a recommender UUID, then the user is already
84
# opted-in to the recommender service
85
143
self.recommended_for_you_content = None
86
if self.recommender_agent.recommender_uuid:
144
if self.recommender_agent.is_opted_in():
87
145
self._update_recommended_for_you_content()
89
147
self._show_opt_in_view()
148
206
# TODO: handle this! display an error message in the panel
149
207
self._hide_recommended_for_you_panel()
151
def _update_recommended_for_you_content(self):
152
# destroy the old content to ensure we don't see it twice
153
# (also removes the opt-in panel if it was there)
154
if self.recommended_for_you_content:
155
self.recommended_for_you_content.destroy()
157
self.header_implements_more_button()
158
self.recommended_for_you_content = FlowableGrid()
159
self.add(self.recommended_for_you_content)
160
self.spinner_notebook.show_spinner(_(u"Receiving recommendations…"))
161
# get the recommendations from the recommender agent
162
self.recommended_for_you_cat = RecommendedForYouCategory()
163
self.recommended_for_you_cat.connect(
165
self._on_recommended_for_you_agent_refresh)
166
self.recommended_for_you_cat.connect('recommender-agent-error',
167
self._on_recommender_agent_error)
169
def _on_recommended_for_you_agent_refresh(self, cat):
170
docs = cat.get_documents(self.catview.db)
171
# display the recommendedations
173
self.catview._add_tiles_to_flowgrid(docs,
174
self.recommended_for_you_content, 8)
175
self.recommended_for_you_content.show_all()
176
self.spinner_notebook.hide_spinner()
177
self.more.connect('clicked',
178
self.catview.on_category_clicked,
181
# TODO: this test for zero docs is temporary and will not be
182
# needed once the recommendation agent is up and running
183
self._hide_recommended_for_you_panel()
185
def _on_recommender_agent_error(self, agent, msg):
186
LOG.warn("Error while accessing the recommender agent for the "
187
"lobby recommendations: %s" % msg)
188
# TODO: temporary, instead we will display cached recommendations here
189
self._hide_recommended_for_you_panel()
191
def _hide_recommended_for_you_panel(self):
196
210
class RecommendationsPanelDetails(RecommendationsPanel):