home_page.py (9165B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\ui\pages\home_page.py 2 import carbonui 3 import carbonui.text.styles 4 import eveicon 5 import eveui 6 import localization 7 import uthread2 8 from carbonui import Align 9 from eve.client.script.ui.shared.agencyNew.contentGroups import contentGroupConst 10 from eve.client.script.ui.shared.agencyNew.ui.agencyWnd import AgencyWndNew 11 from jobboard.client import get_job_board_service, job_board_signals 12 from jobboard.client.features.campaigns.home_page_section import CampaignsHomePageSection 13 from jobboard.client.features.daily_goals.home_page_section import DailyGoalsHomePageSection 14 from jobboard.client.features.freelance_projects.home_page_section import FreelanceProjectsHomePageSection 15 from jobboard.client.features.seasons.home_page_section import SeasonHomePageSection 16 from jobboard.client.provider_type import ProviderType 17 from jobboard.client.ui.adverts import FeatureAdvert, CorpProjectsAdvert, FactionalWarfareEnlistmentAdvert, MercenaryTacticalOperationsAdvert 18 from jobboard.client.ui.analytics import ANALYTICS_OPEN_AGENCY_HOMEFRONT, ANALYTICS_OPEN_AGENCY_MISSIONS 19 from jobboard.client.ui.card_section import FeatureCardSection 20 from jobboard.client.ui.career_path_section import CareerPathSection 21 from jobboard.client.ui.pages.base_page import BasePage 22 from metadata.common.content_tags import get_content_tags_as_objects 23 24 class HomePage(BasePage): 25 __notifyevents__ = ['OnSessionChanged'] 26 27 def __init__(self, window_controller, **kwargs): 28 self._window_controller = window_controller 29 super(HomePage, self).__init__(**kwargs) 30 self._update_search_section() 31 32 def _register(self): 33 sm.RegisterNotify(self) 34 super(HomePage, self)._register() 35 job_board_signals.on_content_tag_count_updated.connect(self._on_content_tag_count_updated) 36 job_board_signals.on_job_provider_state_changed.connect(self._on_job_provider_state_changed) 37 38 def _unregister(self): 39 sm.UnregisterNotify(self) 40 super(HomePage, self)._unregister() 41 job_board_signals.on_content_tag_count_updated.disconnect(self._on_content_tag_count_updated) 42 job_board_signals.on_job_provider_state_changed.disconnect(self._on_job_provider_state_changed) 43 44 def _on_job_provider_state_changed(self, provider): 45 if provider.PROVIDER_ID == ProviderType.DAILY_GOALS: 46 self._header_container.Flush() 47 self._construct_header() 48 49 @uthread2.debounce(0.2) 50 def _on_content_tag_count_updated(self): 51 self._update_search_section() 52 53 def _update_search_section(self): 54 jobs = self._service.get_available_jobs() 55 self._search_section.update(len(jobs), get_content_tags_as_objects(self._service.get_available_content_tags())) 56 57 def _construct_header(self): 58 provider = get_job_board_service().get_provider(ProviderType.DAILY_GOALS) 59 if not provider.is_hidden: 60 DailyGoalsHomePageSection(parent=self._header_container, align=Align.TOTOP, padBottom=16) 61 62 def _construct_filters(self): 63 self._search_section = TopSearchBar(parent=self._filters_container, controller=self._window_controller.page_controller, padBottom=16) 64 65 def _construct_content(self): 66 provider = get_job_board_service().get_provider(ProviderType.CAMPAIGNS) 67 if not provider.is_hidden: 68 CampaignsHomePageSection(parent=self._content_container, align=Align.TOTOP, padBottom=16) 69 uthread2.Yield() 70 SeasonHomePageSection(parent=self._content_container, padBottom=24) 71 uthread2.Yield() 72 self._construct_category(provider_id=ProviderType.STORYLINES) 73 self._construct_category(provider_id=ProviderType.ESCALATION_SITES) 74 self._construct_category(provider_id=ProviderType.CORPORATION_GOALS) 75 self._construct_category(provider_id=ProviderType.FREELANCE_PROJECTS, section_class=FreelanceProjectsHomePageSection) 76 self._construct_category(provider_id=ProviderType.EPIC_ARCS) 77 self._construct_category(provider_id=ProviderType.AGENT_MISSIONS) 78 CareerPathSection(parent=self._content_container, padBottom=24) 79 uthread2.Yield() 80 self._construct_category(provider_id=ProviderType.FACTIONAL_WARFARE) 81 self._construct_category(provider_id=ProviderType.PIRATE_INSURGENCIES) 82 self._construct_category(provider_id=ProviderType.HOMEFRONT_OPERATIONS) 83 self._construct_category(provider_id=ProviderType.COMBAT_ANOMALIES) 84 self._construct_category(provider_id=ProviderType.ORE_ANOMALIES) 85 self._construct_category(provider_id=ProviderType.ICE_BELTS) 86 self._construct_category(provider_id=ProviderType.MERCENARY_TACTICAL_OPS) 87 self._construct_advert(provider_id=ProviderType.CORPORATION_GOALS, section_class=CorpProjectsAdvert) 88 self._construct_advert(provider_id=ProviderType.AGENT_MISSIONS, info={'text': localization.GetByLabel('UI/Opportunities/AgentMissionsEmpty'), 89 'button_label': localization.GetByLabel('UI/Opportunities/OpenAgency'), 90 'button_action': lambda *args, **kwargs: self._open_agency(contentGroupConst.contentGroupMissions), 91 'button_analyticID': ANALYTICS_OPEN_AGENCY_MISSIONS}) 92 self._construct_advert(provider_id=ProviderType.FACTIONAL_WARFARE_ENLISTMENT, section_class=FactionalWarfareEnlistmentAdvert) 93 self._construct_advert(provider_id=ProviderType.HOMEFRONT_OPERATIONS, info={'text': localization.GetByLabel('UI/Opportunities/DungeonsEmpty'), 94 'button_label': localization.GetByLabel('UI/Opportunities/OpenAgency'), 95 'button_action': lambda *args, **kwargs: self._open_agency(contentGroupConst.contentGroupHomefrontSites), 96 'button_analyticID': ANALYTICS_OPEN_AGENCY_HOMEFRONT}) 97 self._construct_advert(ProviderType.MERCENARY_TACTICAL_OPS, section_class=MercenaryTacticalOperationsAdvert) 98 99 def _construct_category(self, provider_id, section_class = FeatureCardSection): 100 provider = get_job_board_service().get_provider(provider_id) 101 primary_content_tag = provider.feature_tag 102 primary_content_tag_id = primary_content_tag.id 103 section_class(parent=self._content_container, padBottom=24, title=primary_content_tag.title, icon=primary_content_tag.icon, view_all_callback=lambda : self._view_all_category(primary_content_tag_id), hide_empty=True, content_tag_id=primary_content_tag_id, provider=provider) 104 uthread2.Yield() 105 106 def _construct_advert(self, provider_id, info = None, section_class = None): 107 provider = get_job_board_service().get_provider(provider_id) 108 primary_content_tag = provider.feature_tag 109 primary_content_tag_id = primary_content_tag.id 110 section_class = section_class or FeatureAdvert 111 section_class(name=u'advert_{}'.format(section_class.__name__), parent=self._content_container, padBottom=24, title=primary_content_tag.title, icon=primary_content_tag.icon, view_all_callback=lambda : self._view_all_category(primary_content_tag_id), hide_empty=True, content_tag_id=primary_content_tag_id, provider=provider, info=info) 112 uthread2.Yield() 113 114 def _view_all_category(self, content_tag_id): 115 self._service.open_browse_page(content_tag_id=content_tag_id) 116 117 def _open_agency(self, content_group_id): 118 AgencyWndNew.OpenAndShowContentGroup(contentGroupID=content_group_id) 119 120 121 class TopSearchBar(eveui.Container): 122 default_align = Align.TOTOP 123 default_height = 24 124 125 def __init__(self, controller, *args, **kwargs): 126 super(TopSearchBar, self).__init__(*args, **kwargs) 127 self._controller = controller 128 self._available_content_tags = {} 129 self._layout() 130 131 def update(self, job_count, content_tags): 132 self._label.text = localization.GetByLabel('UI/Opportunities/OpportunitiesAmount', amount=job_count) 133 available_content_tags = {tag_id:tag for tag_id, tag in content_tags.iteritems()} 134 self._available_content_tags = available_content_tags 135 136 def _layout(self): 137 self._search_field = eveui.SingleLineEditText(parent=self, align=eveui.Align.to_right, width=150, hintText=localization.GetByLabel('UI/Common/Search'), OnReturn=self._search_submitted, texturePath=eveicon.search) 138 self._search_field.GetSuggestions = self._get_search_suggestions 139 self._search_field.OnHistoryClick = self._search_submitted 140 label_container = eveui.Container(parent=self, align=eveui.Align.to_all) 141 self._label = carbonui.text.styles.TextHeader(parent=label_container, align=eveui.Align.center_left, maxLines=1, autoFadeSides=16) 142 143 def _search_submitted(self, *args, **kwargs): 144 available_tags = {tag.title:tag.id for tag in self._available_content_tags.values()} 145 if self._search_field.text in available_tags: 146 self._controller.add_content_tag(available_tags[self._search_field.text]) 147 else: 148 self._controller.add_keyword(self._search_field.text) 149 self._search_field.Clear() 150 151 def _get_search_suggestions(self): 152 return [ tag.title for tag in self._available_content_tags.values() ]