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()