コード例 #1
0
 def __init__(self, ctx):
     super(ClanSearchWindow, self).__init__()
     self.__clanFinder = ClanFinder(self.clansCtrl, None, _SEARCH_LIMIT)
     self.__clanFinder.init()
     self._cooldown = CooldownHelper(self.__coolDownRequests,
                                     self._onCooldownHandle,
                                     CoolDownEvent.CLAN)
     self.__isFirstPageRequested = False
     self.__invitesLimitReached = False
     return
コード例 #2
0
 def __init__(self, ctx):
     super(ClanSearchWindow, self).__init__()
     self.__clanFinder = ClanFinder(g_clanCtrl, None, _SEARCH_LIMIT)
     self.__clanFinder.init()
     self._cooldown = CooldownHelper(self.__coolDownRequests, self._onCooldownHandle, CoolDownEvent.CLAN)
     self.__isFirstPageRequested = False
     return
コード例 #3
0
class ClanSearchWindow(ClanSearchWindowMeta, ClanListener):
    __coolDownRequests = [
        CLAN_REQUESTED_DATA_TYPE.CLAN_RATINGS,
        CLAN_REQUESTED_DATA_TYPE.SEARCH_CLANS,
        CLAN_REQUESTED_DATA_TYPE.GET_RECOMMENDED_CLANS
    ]
    MIN_CHARS_FOR_SEARCH = 2

    def __init__(self, ctx):
        super(ClanSearchWindow, self).__init__()
        self.__clanFinder = ClanFinder(self.clansCtrl, None, _SEARCH_LIMIT)
        self.__clanFinder.init()
        self._cooldown = CooldownHelper(self.__coolDownRequests,
                                        self._onCooldownHandle,
                                        CoolDownEvent.CLAN)
        self.__isFirstPageRequested = False
        self.__invitesLimitReached = False
        return

    def onWindowClose(self):
        self.destroy()

    def onClanStateChanged(self, oldStateID, newStateID):
        if not self.clansCtrl.isEnabled():
            self.onWindowClose()
        if not self.clansCtrl.isAvailable():
            pass

    def search(self, text):
        symbolsCount = len(text.decode('utf8'))
        if symbolsCount < self.MIN_CHARS_FOR_SEARCH:
            self._showDummy(True)
            self._setDummyData(
                CLANS.SEARCH_REQUESTTOOSHORT_HEADER,
                CLANS.SEARCH_REQUESTTOOSHORT_BODY, None,
                self.__clanFinder.hasSuccessRequest(),
                _ms(CLANS.SEARCH_REQUESTTOOSHORT_BUTTON),
                CLANS.SEARCH_REQUESTTOOSHORT_BUTTON_TOOLTIP_HEADER)
        else:
            self.__clanFinder.setRecommended(False)
            self.__doSearch(text)
        return

    def previousPage(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self.__clanFinder.left()

    def nextPage(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self.__clanFinder.right()

    def isInvitesLimitReached(self):
        return self.__invitesLimitReached

    def setInvitesLimitReached(self):
        return self.__invitesLimitReached

    def _populate(self):
        super(ClanSearchWindow, self)._populate()
        self._searchDP = _ClanSearchDataProvider()
        self._searchDP.setFlashObject(self.as_getDPS())
        self.startClanListening()
        self.__clanFinder.onListUpdated += self._onClansListUpdated
        self.__initControls()
        self._updateControlsState()
        self._cooldown.start()
        if not self.clansCtrl.getAccountProfile().isSynced():
            self.clansCtrl.getAccountProfile().resync()
        self.__clanFinder.setRecommended(True)
        self.__doSearch('')

    def _dispose(self):
        self._cooldown.stop()
        self._cooldown = None
        self.stopClanListening()
        self.__clanFinder.onListUpdated -= self._onClansListUpdated
        self.clansCtrl.clearClanCommonDataCache()
        self._searchDP.fini()
        self._searchDP = None
        super(ClanSearchWindow, self)._dispose()
        return

    def getClanInfo(self, clanID):
        return self.__clanFinder.getItemByID(clanID)

    def _onRegisterFlashComponent(self, viewPy, alias):
        super(ClanSearchWindow, self)._onRegisterFlashComponent(viewPy, alias)
        if alias == CLANS_ALIASES.CLAN_SEARCH_INFO_PY:
            viewPy.bindDataProvider(self)

    def dummyButtonPress(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self._searchDP.rebuildList(None)
        self.__clanFinder.requestLastSuccess()
        return

    def _onCooldownHandle(self, isInCooldown):
        self._updateControlsState()

    def _onClansListUpdated(self, selectedID, isFullUpdate, isReqInCoolDown,
                            result):
        status, data = result
        self._processSearchResponse(status, data, self.__isFirstPageRequested)
        self.__isFirstPageRequested = False
        self.as_hideWaitingS()

    def _processSearchResponse(self, status, data, isInitial=False):
        if status:
            if len(data) > 0:
                self.__applyFoundData(data)
            elif isInitial:
                self._searchDP.rebuildList(None)
                self._showDummy(True)
                self._setDummyData(CLANS.SEARCH_EMPTYRESULT_HEADER,
                                   CLANS.SEARCH_EMPTYRESULT_BODY, None,
                                   self.__clanFinder.hasSuccessRequest(),
                                   _ms(CLANS.SEARCH_EMPTYRESULT_BUTTON),
                                   CLANS.SEARCH_EMPTYRESULT_BUTTON_TOOLTIP)
        else:
            self._showErrorDummy()
        self._updateControlsState()
        return

    def _updateControlsState(self):
        isNotInCooldown = not self._cooldown.isInCooldown()
        foundClans = clans_fmts.formatDataToString(
            self.__clanFinder.getTotalCount())
        self.as_setStateDataS({
            'foundClans':
            text_styles.highTitle(
                _ms(CLANS.SEARCH_CLANSLIST
                    if self.__clanFinder.isRecommended() else
                    CLANS.SEARCH_FOUNDCLANS,
                    value=foundClans)),
            'nextBtnEnabled':
            self.__clanFinder.canMoveRight() and isNotInCooldown,
            'previousBtnEnabled':
            self.__clanFinder.canMoveLeft() and isNotInCooldown,
            'searchBtnEnabled':
            isNotInCooldown,
            'searchInputEnabled':
            isNotInCooldown
        })

    def _showErrorDummy(self):
        self._searchDP.rebuildList(None)
        self._showDummy(True)
        self._setDummyData(CLANS.SEARCH_SERVERUNAVAILABLE_HEADER,
                           CLANS.SEARCH_SERVERUNAVAILABLE_BODY,
                           RES_ICONS.MAPS_ICONS_LIBRARY_ALERTBIGICON)
        return

    def _showDummy(self, isVisible):
        self.as_setDummyVisibleS(isVisible)

    def _setDummyData(self,
                      header,
                      body,
                      icon=None,
                      btnVisible=False,
                      btnLabel='',
                      btnTooltip=''):
        self.as_setDummyS({
            'iconSource':
            icon,
            'htmlText':
            str().join(
                (text_styles.middleTitle(header),
                 clans_fmts.getHtmlLineDivider(3), text_styles.main(body))),
            'alignCenter':
            False,
            'btnVisible':
            btnVisible,
            'btnLabel':
            btnLabel,
            'btnTooltip':
            btnTooltip
        })

    def __initControls(self):
        headers = [
            _packHeaderColumnData('clan',
                                  CLANS.SEARCH_TABLE_CLAN,
                                  244,
                                  CLANS.SEARCH_TABLE_CLAN_TOOLTIP,
                                  textAlign='left'),
            _packHeaderColumnData('players', CLANS.SEARCH_TABLE_PLAYERS, 107,
                                  CLANS.SEARCH_TABLE_PLAYERS_TOOLTIP),
            _packHeaderColumnData('creationDate',
                                  CLANS.SEARCH_TABLE_CREATIONDATE, 125,
                                  CLANS.SEARCH_TABLE_CREATIONDATE_TOOLTIP),
            _packHeaderColumnData('rating', CLANS.SEARCH_TABLE_RATING, 90,
                                  CLANS.SEARCH_TABLE_RATING_TOOLTIP, False,
                                  'right')
        ]
        self.as_setInitDataS({
            'windowTitle':
            CLANS.SEARCH_WINDOWTITLE,
            'title':
            text_styles.promoTitle(_ms(CLANS.SEARCH_TITLE)),
            'titleDescription':
            text_styles.main(_ms(CLANS.SEARCH_TITLEDESCRIPTION)),
            'searchBtnLabel':
            CLANS.SEARCH_SEARCHBTN,
            'searchBtnTooltip':
            CLANS.SEARCH_SEARCHBTN_TOOLTIP,
            'searchInputPrompt':
            CLANS.SEARCH_SEARCHINPUTPROMPT,
            'searchInputMaxChars':
            _SEARCH_MAX_CHARS,
            'nextBtnLabel':
            CLANS.SEARCH_NEXTBTN,
            'nextBtnTooltip':
            CLANS.SEARCH_NEXTBTN_TOOLTIP,
            'previousBtnLabel':
            CLANS.SEARCH_PREVIOUSBTN,
            'previousBtnTooltip':
            CLANS.SEARCH_PREVIOUSBTN_TOOLTIP,
            'tableHeaders':
            headers
        })
        self._showDummy(True)
        self._setDummyData(CLANS.SEARCH_PROMOTEXT_HEADER,
                           CLANS.SEARCH_PROMOTEXT_BODY, None)
        return

    def __applyFoundData(self, data):
        self._showDummy(False)
        self.clansCtrl.updateClanCommonDataCache(
            [ClanCommonData.fromClanSearchData(item) for item in data])
        self._searchDP.rebuildList(data)
        self.__lastSuccessfullyFoundClans = data

    def __doSearch(self, text):
        """
        :param text: - search criteria
        """
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self._searchDP.rebuildList(None)
        isValid, reason = self.clansCtrl.getLimits().canSearchClans(text)
        if self.__clanFinder.isRecommended() or isValid:
            self._showDummy(False)
            self.__isFirstPageRequested = True
            self.__clanFinder.setPattern(text)
            self.__clanFinder.reset()
        else:
            if reason == _CCR.SEARCH_PATTERN_INVALID:
                self._processSearchResponse(True, list(), True)
            else:
                self._processSearchResponse(False, list(), True)
            self.as_hideWaitingS()
        return
コード例 #4
0
class ClanSearchWindow(ClanSearchWindowMeta, ClanListener):
    __coolDownRequests = [CLAN_REQUESTED_DATA_TYPE.CLAN_RATINGS, CLAN_REQUESTED_DATA_TYPE.SEARCH_CLANS, CLAN_REQUESTED_DATA_TYPE.GET_RECOMMENDED_CLANS]
    MIN_CHARS_FOR_SEARCH = 2

    def __init__(self, ctx):
        super(ClanSearchWindow, self).__init__()
        self.__clanFinder = ClanFinder(g_clanCtrl, None, _SEARCH_LIMIT)
        self.__clanFinder.init()
        self._cooldown = CooldownHelper(self.__coolDownRequests, self._onCooldownHandle, CoolDownEvent.CLAN)
        self.__isFirstPageRequested = False
        self.__invitesLimitReached = False
        return

    def onWindowClose(self):
        self.destroy()

    def onClanStateChanged(self, oldStateID, newStateID):
        if not self.clansCtrl.isEnabled():
            self.onWindowClose()
        if not self.clansCtrl.isAvailable():
            pass

    def search(self, text):
        if len(text) < self.MIN_CHARS_FOR_SEARCH:
            self._showDummy(True)
            self._setDummyData(CLANS.SEARCH_REQUESTTOOSHORT_HEADER, CLANS.SEARCH_REQUESTTOOSHORT_BODY, None, self.__clanFinder.hasSuccessRequest(), _ms(CLANS.SEARCH_REQUESTTOOSHORT_BUTTON), CLANS.SEARCH_REQUESTTOOSHORT_BUTTON_TOOLTIP_HEADER)
        else:
            self.__clanFinder.setRecommended(False)
            self.__doSearch(text)
        return

    def previousPage(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self.__clanFinder.left()

    def nextPage(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self.__clanFinder.right()

    def isInvitesLimitReached(self):
        return self.__invitesLimitReached

    def setInvitesLimitReached(self):
        return self.__invitesLimitReached

    def _populate(self):
        super(ClanSearchWindow, self)._populate()
        self._searchDP = _ClanSearchDataProvider()
        self._searchDP.setFlashObject(self.as_getDPS())
        self.startClanListening()
        self.__clanFinder.onListUpdated += self._onClansListUpdated
        self.__initControls()
        self._updateControlsState()
        self._cooldown.start()
        if not g_clanCtrl.getAccountProfile().isSynced():
            g_clanCtrl.getAccountProfile().resync()
        self.__clanFinder.setRecommended(True)
        self.__doSearch('')

    def _dispose(self):
        self._cooldown.stop()
        self._cooldown = None
        self.stopClanListening()
        self.__clanFinder.onListUpdated -= self._onClansListUpdated
        g_clanCtrl.clearClanCommonDataCache()
        self._searchDP.fini()
        self._searchDP = None
        super(ClanSearchWindow, self)._dispose()
        return

    def getClanInfo(self, clanID):
        return self.__clanFinder.getItemByID(clanID)

    def _onRegisterFlashComponent(self, viewPy, alias):
        super(ClanSearchWindow, self)._onRegisterFlashComponent(viewPy, alias)
        if alias == CLANS_ALIASES.CLAN_SEARCH_INFO_PY:
            viewPy.bindDataProvider(self)

    def dummyButtonPress(self):
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self._searchDP.rebuildList(None)
        self.__clanFinder.requestLastSuccess()
        return

    def _onCooldownHandle(self, isInCooldown):
        self._updateControlsState()

    def _onClansListUpdated(self, selectedID, isFullUpdate, isReqInCoolDown, result):
        status, data = result
        self._processSearchResponse(status, data, self.__isFirstPageRequested)
        self.__isFirstPageRequested = False
        self.as_hideWaitingS()

    def _processSearchResponse(self, status, data, isInitial = False):
        if status:
            if len(data) > 0:
                self.__applyFoundData(data)
            elif isInitial:
                self._searchDP.rebuildList(None)
                self._showDummy(True)
                self._setDummyData(CLANS.SEARCH_EMPTYRESULT_HEADER, CLANS.SEARCH_EMPTYRESULT_BODY, None, self.__clanFinder.hasSuccessRequest(), _ms(CLANS.SEARCH_EMPTYRESULT_BUTTON), CLANS.SEARCH_EMPTYRESULT_BUTTON_TOOLTIP)
        else:
            self._showErrorDummy()
        self._updateControlsState()
        return

    def _updateControlsState(self):
        isNotInCooldown = not self._cooldown.isInCooldown()
        foundClans = clans_fmts.formatDataToString(self.__clanFinder.getTotalCount())
        self.as_setStateDataS({'foundClans': text_styles.highTitle(_ms(CLANS.SEARCH_CLANSLIST if self.__clanFinder.isRecommended() else CLANS.SEARCH_FOUNDCLANS, value=foundClans)),
         'nextBtnEnabled': self.__clanFinder.canMoveRight() and isNotInCooldown,
         'previousBtnEnabled': self.__clanFinder.canMoveLeft() and isNotInCooldown,
         'searchBtnEnabled': isNotInCooldown,
         'searchInputEnabled': isNotInCooldown})

    def _showErrorDummy(self):
        self._searchDP.rebuildList(None)
        self._showDummy(True)
        self._setDummyData(CLANS.SEARCH_SERVERUNAVAILABLE_HEADER, CLANS.SEARCH_SERVERUNAVAILABLE_BODY, RES_ICONS.MAPS_ICONS_LIBRARY_ALERTBIGICON)
        return

    def _showDummy(self, isVisible):
        self.as_setDummyVisibleS(isVisible)

    def _setDummyData(self, header, body, icon = None, btnVisible = False, btnLabel = '', btnTooltip = ''):
        self.as_setDummyS({'iconSource': icon,
         'htmlText': str().join((text_styles.middleTitle(header), clans_fmts.getHtmlLineDivider(3), text_styles.main(body))),
         'alignCenter': False,
         'btnVisible': btnVisible,
         'btnLabel': btnLabel,
         'btnTooltip': btnTooltip})

    def __initControls(self):
        headers = [_packHeaderColumnData('clan', CLANS.SEARCH_TABLE_CLAN, 244, CLANS.SEARCH_TABLE_CLAN_TOOLTIP, textAlign='left'),
         _packHeaderColumnData('players', CLANS.SEARCH_TABLE_PLAYERS, 107, CLANS.SEARCH_TABLE_PLAYERS_TOOLTIP),
         _packHeaderColumnData('creationDate', CLANS.SEARCH_TABLE_CREATIONDATE, 125, CLANS.SEARCH_TABLE_CREATIONDATE_TOOLTIP),
         _packHeaderColumnData('rating', CLANS.SEARCH_TABLE_RATING, 90, CLANS.SEARCH_TABLE_RATING_TOOLTIP, False, 'right')]
        self.as_setInitDataS({'windowTitle': CLANS.SEARCH_WINDOWTITLE,
         'title': text_styles.promoTitle(_ms(CLANS.SEARCH_TITLE)),
         'titleDescription': text_styles.main(_ms(CLANS.SEARCH_TITLEDESCRIPTION)),
         'searchBtnLabel': CLANS.SEARCH_SEARCHBTN,
         'searchBtnTooltip': CLANS.SEARCH_SEARCHBTN_TOOLTIP,
         'searchInputPrompt': CLANS.SEARCH_SEARCHINPUTPROMPT,
         'searchInputMaxChars': _SEARCH_MAX_CHARS,
         'nextBtnLabel': CLANS.SEARCH_NEXTBTN,
         'nextBtnTooltip': CLANS.SEARCH_NEXTBTN_TOOLTIP,
         'previousBtnLabel': CLANS.SEARCH_PREVIOUSBTN,
         'previousBtnTooltip': CLANS.SEARCH_PREVIOUSBTN_TOOLTIP,
         'tableHeaders': headers})
        self._showDummy(True)
        self._setDummyData(CLANS.SEARCH_PROMOTEXT_HEADER, CLANS.SEARCH_PROMOTEXT_BODY, None)
        return

    def __applyFoundData(self, data):
        self._showDummy(False)
        g_clanCtrl.updateClanCommonDataCache([ ClanCommonData.fromClanSearchData(item) for item in data ])
        self._searchDP.rebuildList(data)
        self.__lastSuccessfullyFoundClans = data

    def __doSearch(self, text):
        """
        :param text: - search criteria
        :param getRecommended: - flag determines is need to get recommended clans
        :type text: str
        :type getRecommended: bool
        """
        self.as_showWaitingS(WAITING.PREBATTLE_AUTO_SEARCH, {})
        self._searchDP.rebuildList(None)
        isValid, reason = g_clanCtrl.getLimits().canSearchClans(text)
        if self.__clanFinder.isRecommended() or isValid:
            self._showDummy(False)
            self.__isFirstPageRequested = True
            self.__clanFinder.setPattern(text)
            self.__clanFinder.reset()
        else:
            if reason == _CCR.SEARCH_PATTERN_INVALID:
                self._processSearchResponse(True, list(), True)
            else:
                self._processSearchResponse(False, list(), True)
            self.as_hideWaitingS()
        return