~nataliabidart/software-center/lost-in-translation

« back to all changes in this revision

Viewing changes to softwarecenter/ui/gtk3/widgets/recommendations.py

  • Committer: Kiwinote
  • Date: 2012-03-15 22:36:31 UTC
  • mfrom: (2867 trunk)
  • mto: This revision was merged to the branch mainline in revision 2881.
  • Revision ID: kiwinote@gmail.com-20120315223631-lvea6t5sydpkkqni
merge from trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
                                          AppRecommendationsCategory)
30
30
from softwarecenter.backend.recagent import RecommenderAgent
31
31
 
32
 
 
33
32
LOG = logging.getLogger(__name__)
34
33
 
35
34
 
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()
57
56
 
58
57
    def _on_application_activated(self, catview, app):
59
58
        self.emit("application-activated", app)
60
59
 
61
 
 
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()
 
64
 
 
65
    def _hide_recommended_for_you_panel(self):
 
66
        # and hide the pane
 
67
        self.hide()
 
68
 
 
69
 
 
70
class RecommendationsPanelCategory(RecommendationsPanel):
 
71
    """
 
72
    Panel for use in the category view that displays recommended apps for
 
73
    the given category
 
74
    """
 
75
    def __init__(self, catview, subcategory):
 
76
        RecommendationsPanel.__init__(self, catview)
 
77
        self.subcategory = subcategory
 
78
        if self.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()
 
84
        else:
 
85
            self._hide_recommended_for_you_panel()
 
86
 
 
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()
 
91
        # add the new stuff
 
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(
 
99
                                    'needs-refresh',
 
100
                                    self._on_recommended_for_you_agent_refresh)
 
101
        self.recommended_for_you_cat.connect('recommender-agent-error',
 
102
                                             self._on_recommender_agent_error)
 
103
 
 
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
 
108
        if len(docs) > 0:
 
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,
 
115
                              cat)
 
116
            self.show_all()
 
117
        else:
 
118
            # hide the panel if we have no recommendations to show
 
119
            self._hide_recommended_for_you_panel()
 
120
 
 
121
 
 
122
class RecommendationsPanelLobby(RecommendationsPanelCategory):
63
123
    """
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
78
138
 
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"))
82
 
 
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()
88
146
        else:
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()
150
208
 
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()
156
 
        # add the new stuff
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(
164
 
                                    'needs-refresh',
165
 
                                    self._on_recommended_for_you_agent_refresh)
166
 
        self.recommended_for_you_cat.connect('recommender-agent-error',
167
 
                                             self._on_recommender_agent_error)
168
 
 
169
 
    def _on_recommended_for_you_agent_refresh(self, cat):
170
 
        docs = cat.get_documents(self.catview.db)
171
 
        # display the recommendedations
172
 
        if len(docs) > 0:
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,
179
 
                              cat)
180
 
        else:
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()
184
 
 
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()
190
 
 
191
 
    def _hide_recommended_for_you_panel(self):
192
 
        # and hide the pane
193
 
        self.hide()
194
 
 
195
209
 
196
210
class RecommendationsPanelDetails(RecommendationsPanel):
197
211
    """
209
223
        self._update_app_recommendations_content()
210
224
 
211
225
    def _update_app_recommendations_content(self):
212
 
        self.app_recommendations_content.remove_all()
 
226
        if self.app_recommendations_content:
 
227
            self.app_recommendations_content.remove_all()
213
228
        self.spinner_notebook.show_spinner(_(u"Receiving recommendations…"))
214
229
        # get the recommendations from the recommender agent
215
230
        self.app_recommendations_cat = AppRecommendationsCategory(self.pkgname)