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

notification_state.py (3152B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\store\client\targetaudience\notification_state.py
      2 from __future__ import absolute_import, division, print_function
      3 import flatbuffers
      4 from store.client.targetaudience.compat import to_text
      5 from store.client.model.flatbuffer.offer_notification_state_generated import Dismissed, DismissedAddIsDismissed, DismissedEnd, DismissedStart, OfferAddNotificationState, OfferAddNotificationStateType, OfferAddOfferId, OfferEnd, OfferNotificationState, Offers, OffersAddOffers, OffersEnd, OffersStart, OffersStartOffersVector, OfferStart, Seen, SeenAddIsSeen, SeenEnd, SeenStart
      6 STATE_UNSEEN = u'unseen'
      7 STATE_SEEN = u'seen'
      8 STATE_DISMISSED = u'dismissed'
      9 _UNION_TYPE_BY_STATE = {STATE_SEEN: OfferNotificationState.Seen,
     10  STATE_DISMISSED: OfferNotificationState.Dismissed}
     11 
     12 def states_from_bytes(payload_bytes):
     13     if not payload_bytes:
     14         return {}
     15     root = Offers.GetRootAs(payload_bytes, 0)
     16     states = {}
     17     for i in range(root.OffersLength()):
     18         fb_offer = root.Offers(i)
     19         offer_key = to_text(fb_offer.OfferId())
     20         state = _state_from_flatbuffer(fb_offer)
     21         if offer_key and state != STATE_UNSEEN:
     22             states[offer_key] = state
     23 
     24     return states
     25 
     26 
     27 def states_to_bytes(states):
     28     builder = flatbuffers.Builder(0)
     29     offer_offsets = [ _offer_to_flatbuffer(builder, offer_key, states[offer_key]) for offer_key in sorted(states) if states[offer_key] != STATE_UNSEEN ]
     30     OffersStartOffersVector(builder, len(offer_offsets))
     31     for offset in reversed(offer_offsets):
     32         builder.PrependUOffsetTRelative(offset)
     33 
     34     offers_vector = builder.EndVector()
     35     OffersStart(builder)
     36     OffersAddOffers(builder, offers_vector)
     37     builder.Finish(OffersEnd(builder))
     38     return builder.Output()
     39 
     40 
     41 def _state_from_flatbuffer(fb_offer):
     42     state_table = fb_offer.NotificationState()
     43     if state_table is None:
     44         return STATE_UNSEEN
     45     state_type = fb_offer.NotificationStateType()
     46     if state_type == OfferNotificationState.Seen:
     47         seen = Seen()
     48         seen.Init(state_table.Bytes, state_table.Pos)
     49         if seen.IsSeen():
     50             return STATE_SEEN
     51         return STATE_UNSEEN
     52     if state_type == OfferNotificationState.Dismissed:
     53         dismissed = Dismissed()
     54         dismissed.Init(state_table.Bytes, state_table.Pos)
     55         if dismissed.IsDismissed():
     56             return STATE_DISMISSED
     57         return STATE_UNSEEN
     58     return STATE_UNSEEN
     59 
     60 
     61 def _offer_to_flatbuffer(builder, offer_key, state):
     62     offer_id_offset = builder.CreateString(offer_key)
     63     state_offset = _state_to_flatbuffer(builder, state)
     64     OfferStart(builder)
     65     OfferAddOfferId(builder, offer_id_offset)
     66     OfferAddNotificationStateType(builder, _UNION_TYPE_BY_STATE[state])
     67     OfferAddNotificationState(builder, state_offset)
     68     return OfferEnd(builder)
     69 
     70 
     71 def _state_to_flatbuffer(builder, state):
     72     if state == STATE_DISMISSED:
     73         DismissedStart(builder)
     74         DismissedAddIsDismissed(builder, True)
     75         return DismissedEnd(builder)
     76     SeenStart(builder)
     77     SeenAddIsSeen(builder, True)
     78     return SeenEnd(builder)