NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

recommended_card_section.py (3609B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\recommended_card_section.py
      2 import eveui
      3 import uthread2
      4 from campaigns.client.v1.signals import on_job_provider_finished_refreshing_campaign
      5 from campaigns.client.validation import can_commit
      6 from carbonui import Align
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      9 from carbonui.text.styles import TextHeader
     10 from eveexceptions import ExceptionEater
     11 from jobboard.client import job_board_signals, ProviderType, get_provider
     12 from jobboard.client.features.campaigns.card import BaseCampaignJobCard
     13 from jobboard.client.features.campaigns.provider_section import CampaignJobProviderSection
     14 
     15 class RecommendedCont(ContainerAutoSize):
     16     default_align = Align.TOTOP
     17 
     18     def ApplyAttributes(self, attributes):
     19         self._jobs_section = None
     20         self._campaign_id = attributes.campaign_id
     21         self._title = attributes.title
     22         super(RecommendedCont, self).ApplyAttributes(attributes)
     23         self._construct_ui()
     24         self._refresh()
     25         self._register()
     26 
     27     def _construct_ui(self):
     28         top_container = eveui.Container(parent=self, align=Align.TOTOP, height=28, padBottom=8)
     29         self._title_label = TextHeader(parent=top_container, align=Align.CENTERLEFT, maxLines=1, text=self._title)
     30         section_parent = Container(name='section_parent', parent=self, align=Align.TOTOP, height=BaseCampaignJobCard.default_height)
     31         self._jobs_section = CampaignJobProviderSection(parent=section_parent, job_provider=get_provider(ProviderType.CAMPAIGNS), is_relevant=self._is_relevant, sort_jobs=self._sort_jobs, campaign_id=self._campaign_id)
     32         self._jobs_section.scroll.DisableScrollbars()
     33         height = BaseCampaignJobCard.default_height + self._jobs_section.scroll.padTop + self._jobs_section.scroll.padBottom
     34         section_parent.height = height
     35 
     36     @uthread2.debounce(0.1)
     37     def _refresh(self):
     38         if self.destroyed:
     39             return
     40         if self._jobs_section:
     41             self._jobs_section.load()
     42 
     43     def _register(self):
     44         job_board_signals.on_data_primed.connect(self._on_data_primed)
     45         on_job_provider_finished_refreshing_campaign.connect(self._on_jobs_refreshed)
     46 
     47     def _unregister(self):
     48         job_board_signals.on_data_primed.disconnect(self._on_data_primed)
     49         on_job_provider_finished_refreshing_campaign.disconnect(self._on_jobs_refreshed)
     50 
     51     def _is_relevant(self, job):
     52         if job.is_future_objective:
     53             return False
     54         if job.campaign_id != self._campaign_id:
     55             return False
     56         if not job.is_available_in_browse:
     57             return False
     58         if not (job.is_committed or can_commit(job)):
     59             return False
     60         return True
     61 
     62     def _sort_jobs(self, jobs, *args, **kwargs):
     63         non_restricted_jobs = []
     64         for job in jobs:
     65             if not self._is_relevant(job):
     66                 continue
     67             non_restricted_jobs.append(job)
     68             if len(non_restricted_jobs) > 2:
     69                 return non_restricted_jobs
     70 
     71         return non_restricted_jobs
     72 
     73     def _on_data_primed(self, provider_id):
     74         if provider_id == ProviderType.CAMPAIGNS:
     75             self._jobs_section.load()
     76 
     77     def _on_jobs_refreshed(self, campaign_id):
     78         if campaign_id == self._campaign_id:
     79             self._refresh()
     80 
     81     def Close(self):
     82         super(RecommendedCont, self).Close()
     83         with ExceptionEater('Closing RecommendedCont'):
     84             self._unregister()