def process(self): args = self.getUrlArgs('/transferreturncomplete/') mid = args.getInt(0) num = args.getInt(1) or 0 model_mgr = self.getModelMgr() cardmaster = None if mid: cardmaster = BackendApi.get_cardmasters( [mid], arg_model_mgr=model_mgr, using=settings.DB_READONLY).get(mid) if cardmaster is None or not CardUtil.checkStockableMaster( cardmaster, raise_on_error=False): raise CabaretError(u'不正な遷移です.', CabaretError.Code.ILLEGAL_ARGS) # アルバムへのリンク. self.html_param['url_albumdetail'] = self.makeAppLinkUrl( UrlMaker.albumdetail(cardmaster.album)) # カード情報. self.html_param['cardmaster'] = Objects.cardmaster(self, cardmaster) # 呼び戻した数. self.html_param['cardnum'] = num self.writeAppHtml('card/transferreturncomplete')
def __proc_nominatecast(self, eventmaster, is_opened): """特効キャスト一覧. """ model_mgr = self.getModelMgr() # 特効カードのマスター. specialcard = dict(eventmaster.specialcard) midlist = specialcard.keys() cardmasters = BackendApi.get_cardmasters(midlist, model_mgr, using=settings.DB_READONLY) # 埋め込み用パラメータ作成. obj_cardlist = [] for mid, cardmaster in cardmasters.items(): rate = specialcard[mid] obj = Objects.cardmaster(self, cardmaster) obj['specialpowup'] = rate obj_cardlist.append(obj) obj_cardlist.sort(key=lambda x: (x['rare'] << 32) + (Defines.HKLEVEL_MAX - x['hklevel']), reverse=True) self.html_param['specialcardlist'] = obj_cardlist self.writeHtml(eventmaster, 'nominatecast')
def procSelect(self): """タイプ選択画面. """ v_player = self.__getViewerPlayer() if v_player is None: return model_mgr = self.getModelMgr() leaders = BackendApi.get_defaultleaders( model_mgr, Defines.CharacterType.NAMES.keys(), using=settings.DB_READONLY) obj_leaders = {} urls = {} for k in Defines.CharacterType.NAMES.keys(): if leaders.has_key(k): obj_leaders[k] = Objects.cardmaster(self, leaders[k]) urls[k] = self.makeAppLinkUrl(UrlMaker.regist_yesno(k, first=False)) self.html_param['url_enters'] = urls self.html_param['leaders'] = obj_leaders self.setTutorialHead(Defines.TutorialStatus.REGIST_SELECT) self.writeAppHtml('regist/select')
def __proc_nomination(self, eventmaster, is_opened): """ご指名キャスト一覧. """ model_mgr = self.getModelMgr() # 特効キャスト. specialcard_dict = dict(eventmaster.specialcard) battleticket_rate = dict(eventmaster.battleticket_rate) midlist = specialcard_dict.keys() cardmasters = BackendApi.get_cardmasters(midlist, model_mgr, using=settings.DB_READONLY) obj_cardlist = [] for mid, rate in eventmaster.specialcard: cardmaster = cardmasters.get(mid) if not cardmaster: continue obj = Objects.cardmaster(self, cardmaster) obj['specialpowup'] = rate ticket_rate = battleticket_rate.get(mid) if ticket_rate: obj['battleticket_rateup'] = ticket_rate obj_cardlist.append(obj) self.html_param['specialcardlist'] = obj_cardlist # 属性ボーナス. specialtype_dict = dict(eventmaster.specialtable) for rare in specialtype_dict.keys(): arr = specialtype_dict[rare] + [100] * Defines.HKLEVEL_MAX specialtype_dict[rare] = arr[:Defines.HKLEVEL_MAX] self.html_param['specialtypedict'] = specialtype_dict self.writeHtml(eventmaster, 'nominatecast')
def proc_EVOL00_ALBUM(self, basecard, materialcard): """思い出アルバム. """ model_mgr = self.getModelMgr() basecard_post, _ = BackendApi.tutorial_evolution( model_mgr, basecard, materialcard, using=settings.DB_READONLY) v_player = self.getViewerPlayer(True) mid = basecard_post.master.id memoriesmaster = None if self.is_pc: memoriesmaster = BackendApi.get_tutorial_pcmemories( model_mgr, v_player.ptype, using=settings.DB_READONLY) else: memoriesmaster = BackendApi.get_tutorial_memories( model_mgr, v_player.ptype, using=settings.DB_READONLY) card_acquisition = CardAcquisition.makeInstance( CardAcquisition.makeID(basecard_post.card.uid, mid)) self.html_param['cardmaster'] = Objects.cardmaster( self, basecard_post.master) self.html_param['album'] = Objects.memoriesmaster( self, memoriesmaster, card_acquisition) memories_list = [] movie_list = [] pcmovie_list = [] for obj_memories in BackendApi.get_album_memories_list( self, basecard_post.card.uid, basecard_post.master.album, using=settings.DB_READONLY): if obj_memories['contenttype'] == Defines.MemoryContentType.MOVIE: movie_list.append(obj_memories) elif obj_memories[ 'contenttype'] == Defines.MemoryContentType.MOVIE_PC: pcmovie_list.append(obj_memories) else: memories_list.append(obj_memories) self.html_param['memories_list'] = memories_list self.html_param['movie_list'] = movie_list self.html_param['pcmovie_list'] = pcmovie_list self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext()) # 動画閲覧用のキーを保存. remote_addr = self.request.remote_addr if remote_addr: key = '%s##%s' % (remote_addr, self.osa_util.useragent.browser) MemoriesSession.create(v_player.id, memoriesmaster.id, key).save() self.writeAppHtml('album/memories')
def process(self): self.__flag_execute = self.request.get('_execute') == '1' self.__vid = self.request.get('_vid') self.__oid = self.request.get('_oid') self.__v_deck = None self.__o_deck = None self.__continuity = self.request.get('_continuity') self.__dummy_cardid = 0 model_mgr = self.getModelMgr() # カード一覧. cardmidlist = [ cardmaster.id for cardmaster in model_mgr.get_mastermodel_all( CardMaster, 'id', using=settings.DB_READONLY) ] cardmaster_all = BackendApi.get_cardmasters(cardmidlist, model_mgr, using=settings.DB_READONLY) obj_cardlist = [ Objects.cardmaster(self, cardmaster_all[mid]) for mid in cardmidlist ] self.html_param['cardlist'] = obj_cardlist # 個別設定されたデッキ. self.loadPostDeck() # ユーザIDからロード. self.loadUserDeck() # 対戦する. if self.__flag_execute: self.battle() self.putDeck() self.html_param['vid'] = self.__vid self.html_param['oid'] = self.__oid self.html_param['continuity'] = self.__continuity or 10 self.writeAppHtml('battle_simulator')
def __proc_nomination(self, eventmaster, is_opened): """ご指名キャスト一覧. """ model_mgr = self.getModelMgr() # 特効キャスト. specialcard_dict = dict(eventmaster.specialcard) midlist = specialcard_dict.keys() cardmasters = BackendApi.get_cardmasters(midlist, model_mgr, using=settings.DB_READONLY) obj_cardlist = [] for mid, rate in eventmaster.specialcard: cardmaster = cardmasters.get(mid) if not cardmaster: continue obj = Objects.cardmaster(self, cardmaster) obj['specialpowup'] = rate obj_cardlist.append(obj) self.html_param['specialcardlist'] = obj_cardlist self.writeHtml(eventmaster, 'nominatecast')
def __proc_nomination(self, eventmaster, is_opened): """ご指名キャスト一覧. """ model_mgr = self.getModelMgr() # イベントレイド. raidlist = BackendApi.get_raidevent_raidmaster_by_eventid( model_mgr, eventmaster.id, using=settings.DB_READONLY) # 特効カード. specialcard = {} for raid in raidlist: for mid, rate in raid.specialcard: specialcard[mid] = max(specialcard.get(mid, 0), rate) # 特効カードのマスター. midlist = specialcard.keys() cardmasters = BackendApi.get_cardmasters(midlist, model_mgr, using=settings.DB_READONLY) # 埋め込み用パラメータ作成. obj_cardlist = [] for mid, cardmaster in cardmasters.items(): rate = specialcard[mid] obj = Objects.cardmaster(self, cardmaster) obj['specialpowup'] = rate obj['specialtreasure'] = raidlist[0].specialcard_treasure[ obj["rare_str"]][obj["hklevel"] - 1] obj_cardlist.append(obj) obj_cardlist.sort(key=lambda x: (x['rare'] << 32) + (Defines.HKLEVEL_MAX - x['hklevel']), reverse=True) self.html_param['specialcardlist'] = obj_cardlist self.writeHtml(eventmaster, 'nominatecast')
def process(self): model_mgr = self.getModelMgr() args = self.getUrlArgs('/battleeventbattleresult/') eventid = args.getInt(0) eventmaster = None if eventid: eventmaster = BackendApi.get_battleevent_master( model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: if settings_sub.IS_LOCAL: raise CabaretError(u'引数がおかしい') self.redirectToTop() return v_player = self.getViewerPlayer() uid = v_player.id # 結果データ. battleresult = BackendApi.get_battleevent_battleresult( model_mgr, eventid, uid, using=settings.DB_READONLY) if battleresult is None: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return self.setFromPage(Defines.FromPages.BATTLEEVENTPRE) data = battleresult.data # 対戦相手. oid = battleresult.oid arr = BackendApi.get_players(self, [oid], [PlayerExp], using=settings.DB_READONLY) o_player = arr[0] if arr else None if o_player is None: # 相手が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'相手が存在しない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_v_player, obj_o_player = self.getObjPlayerList( [v_player, o_player]) rival_key = BackendApi.get_rival_key(oid, eventid, args) self.html_param['resultdata'] = data obj_v_player['power_total'] = data['v_power'] obj_o_player['power_total'] = data['o_power'] obj_v_player['sp_powup'] = (data.get('v_sp_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['sp_powup'] = data.get('o_sp_powup') or 0 obj_v_player['spt_powup'] = (data.get('v_spt_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['spt_powup'] = data.get('o_spt_powup') or 0 obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True) obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist( False) self.html_param['player'] = obj_v_player self.html_param['o_player'] = obj_o_player if BackendApi.check_friend(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_receive( uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_send(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass else: self.html_param['is_friendrequest_ok'] = True # 獲得したアイテム. prizes = data.get('prizes') if prizes: prizelist = BackendApi.get_prizelist(model_mgr, prizes, using=settings.DB_READONLY) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) battle_ticket_num = self.get_base_battle_ticket_num(data) self.html_param['battle_ticket_num'] = battle_ticket_num self.html_param[ 'battle_ticket_bonus'] = self.get_player_battle_ticket_bonus( model_mgr, uid, battle_ticket_num, eventmaster) # レベルアップしたカード. obj_lebelupcardlist = [] levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(), model_mgr, using=settings.DB_READONLY) for levelupcard in levelupcardlist: obj_card = Objects.card(self, levelupcard) obj_card['level_add'] = battleresult.levelupcard.get( levelupcard.id, 0) obj_lebelupcardlist.append(obj_card) self.html_param['levelupcardlist'] = obj_lebelupcardlist # 回復アイテム. BackendApi.put_bprecover_uselead_info(self) # 獲得したポイント. scorerecord = BackendApi.get_battleevent_scorerecord( model_mgr, eventid, uid, using=settings.DB_READONLY) self.html_param['battleevent_score'] = self.makeScoreRecordObj( scorerecord, battleresult) # 特効キャスト分のポイント. effect_percent = data.get('effp', 0) if 0 < effect_percent: point_add = data['eventpoint'] point_base = int(point_add * 100 / (effect_percent + 100)) self.html_param['effect_point'] = point_add - point_base # 現在の贈り物情報を確認. presentdata = BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, eventid, using=settings.DB_READONLY) if presentdata: cur_data = presentdata.getData() presentmaster = BackendApi.get_battleeventpresent_master( model_mgr, eventid, cur_data['number'], using=settings.DB_READONLY) self.html_param[ 'is_present_open'] = presentmaster.point <= presentdata.point else: self.html_param['is_present_open'] = False # トピック. self.putEventTopic(eventid) # 続けて競う. target = 'revenge' if data.get('revenge') else 'lv' self.html_param['url_battlecontinue'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist(target, do_update=True)) # グループ詳細. self.html_param['url_battleevent_group'] = self.makeAppLinkUrl( UrlMaker.battleevent_group()) self.html_param["battleevent"] = Objects.battleevent( self, eventmaster) if data['is_win']: piecedata = battleresult.data.get('piecedata') if piecedata: if piecedata.get('is_item'): # キャスト名. _, cardmaster = self.get_dirname_and_castname( eventid, piecedata['rarity']) # アイテム獲得. prizelist = BackendApi.get_prizelist( model_mgr, piecedata.get('item_prizeids') or [], using=settings.DB_READONLY) self.html_param['piece_dropiteminfo'] = dict( cardmaster=Objects.cardmaster(self, cardmaster), prize=BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY)) else: self.put_drop_castname(model_mgr, eventid, piecedata['rarity'], piecedata['piece']) self.writeAppHtml( '%s/battlewin' % ('gcevent' if eventmaster.is_goukon else 'btevent')) else: self.writeAppHtml( '%s/battlelose' % ('gcevent' if eventmaster.is_goukon else 'btevent'))
def process(self): model_mgr = self.getModelMgr() # プレイヤー情報. v_player = self.getViewerPlayer() obj_player = Objects.player(self, v_player) # 初期タブ指定 is_battle_ticket_page = int(self.request.get( Defines.URLQUERY_CTYPE, 0)) == Defines.GachaConsumeType.GachaTopTopic.TICKET # 秘宝交換レートリスト取得 tradelist = BackendApi.get_trademaster_all(model_mgr, using=settings.DB_READONLY) tradelist.sort(key=lambda x: (x.schedule << 32) + x.rate_cabaretking, reverse=True) # カード所持数. cardnum = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY) cardrest = v_player.cardlimit - cardnum is_cardnum_max = cardrest < 1 platinum_piece_num = BackendApi.get_platinum_piece( model_mgr, v_player.id) crystal_piece_num = BackendApi.get_crystal_piece( model_mgr, v_player.id) now = OSAUtil.get_now() current_battleevent = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) if current_battleevent.starttime < now < current_battleevent.epilogue_endtime and is_battle_ticket_page: # retrieve the trade items that CAN be traded with a battle ticket tradelist = [ trade_item for trade_item in tradelist if trade_item.is_used_battle_ticket ] self.html_param['is_battle_ticket_page'] = True url = OSAUtil.addQuery( UrlMaker.trade(), Defines.URLQUERY_CTYPE, Defines.GachaConsumeType.GachaTopTopic.TICKET) self.html_param['url_battle_ticket'] = self.makeAppLinkUrl(url) else: # retrieve the trade items that CANNOT be traded with a battle ticket tradelist = [ trade_item for trade_item in tradelist if not trade_item.is_used_battle_ticket ] self.html_param['is_battle_ticket_page'] = False battleticket = BackendApi.get_additional_gachaticket_nums( model_mgr, v_player.id, [Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET], using=settings.DB_READONLY) if battleticket: battle_ticket_num = battleticket[ Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET].num else: battle_ticket_num = 0 self.html_param['platinum_piece_num'] = platinum_piece_num self.html_param['platinum_piece_name'] = Defines.ItemType.NAMES[ Defines.ItemType.PLATINUM_PIECE] self.html_param['battle_ticket_num'] = battle_ticket_num self.html_param['battle_ticket_name'] = Defines.GachaConsumeType.NAMES[ Defines.GachaConsumeType.BATTLE_TICKET] self.html_param['crystal_piece_num'] = crystal_piece_num self.html_param['crystal_piece_name'] = Defines.ItemType.NAMES[ Defines.ItemType.CRYSTAL_PIECE] cabaretking = v_player.get_cabaretking_num() obj_tradelist = [] obj_tradelist_use_platinum_piece = [] obj_tradelist_use_battle_ticket = [] obj_tradelist_use_crystal_piece = [] limited_masters = {} # ストック制限が有るマスター. slide_cards = {} # スライド表示するカード. header_img_list = [] # ヘッダ画像. for trademaster in tradelist: if not BackendApi.check_schedule(model_mgr, trademaster.schedule, using=settings.DB_READONLY): continue if trademaster.stock: limited_masters[trademaster.id] = trademaster data = self.makeobj(trademaster) data['url_tradeyesno'] = self.makeAppLinkUrl( UrlMaker.tradeyesno(trademaster.id)) err_mess = None # 最大交換可能数. if trademaster.is_used_platinum_piece: trade_max = int(platinum_piece_num / trademaster.rate_cabaretking) elif trademaster.is_used_battle_ticket: trade_max = int(battle_ticket_num / trademaster.rate_cabaretking) elif trademaster.is_used_crystal_piece: trade_max = int(crystal_piece_num / trademaster.rate_cabaretking) else: trade_max = int(cabaretking / trademaster.rate_cabaretking) data['ori_trade_max'] = trade_max if trademaster.itype == Defines.ItemType.CARD and is_cardnum_max: err_mess = u'所属キャストが上限に達しています' elif trade_max == 0: if trademaster.is_used_platinum_piece: err_mess = u'%sが不足しています' % Defines.ItemType.NAMES[ Defines.ItemType.PLATINUM_PIECE] elif trademaster.is_used_battle_ticket: err_mess = u'%sが不足しています' % Defines.GachaConsumeType.NAMES[ Defines.GachaConsumeType.BATTLE_TICKET] elif trademaster.is_used_crystal_piece: err_mess = u'%sが不足しています' % Defines.ItemType.NAMES[ Defines.ItemType.CRYSTAL_PIECE] else: err_mess = u'%sが不足しています' % Defines.ItemType.NAMES[ Defines.ItemType.CABARETKING_TREASURE] data['err_mess'] = err_mess if trademaster.itype == Defines.ItemType.CARD: trade_max = min(trade_max, cardrest) if Defines.ItemType.TRADE_NUM_MAX.has_key(trademaster.itype): trade_max = min( Defines.ItemType.TRADE_NUM_MAX[trademaster.itype], trade_max) data['trade_max'] = trade_max data['is_used_platinum_piece'] = trademaster.is_used_platinum_piece data['is_used_battle_ticket'] = trademaster.is_used_battle_ticket data['is_used_crystal_piece'] = trademaster.is_used_crystal_piece if trademaster.is_used_platinum_piece: obj_tradelist_use_platinum_piece.append(data) elif trademaster.is_used_battle_ticket: obj_tradelist_use_battle_ticket.append(data) elif trademaster.is_used_crystal_piece: obj_tradelist_use_crystal_piece.append(data) else: obj_tradelist.append(data) # スライド. if trademaster.slidecapture and trademaster.itype == Defines.ItemType.CARD: slide_cards[trademaster.itemid] = self.makeAppLinkUrlImg( trademaster.slidecapture) if trademaster.header: header_img_list.append( self.makeAppLinkUrlImg(trademaster.header)) playdata_dict = BackendApi.get_tradeplayerdata_dict( model_mgr, v_player.id, limited_masters.keys(), using=settings.DB_READONLY) self.reflect_use_status(model_mgr, obj_tradelist, limited_masters, playdata_dict) self.reflect_use_status(model_mgr, obj_tradelist_use_platinum_piece, limited_masters, playdata_dict) self.reflect_use_status(model_mgr, obj_tradelist_use_battle_ticket, limited_masters, playdata_dict) self.reflect_use_status(model_mgr, obj_tradelist_use_crystal_piece, limited_masters, playdata_dict) # スライド. obj_slidelist = [] if slide_cards: cardmasters = BackendApi.get_cardmasters( slide_cards.keys(), model_mgr, using=settings.DB_READONLY) for cardid, img in slide_cards.items(): cardmaster = cardmasters.get(cardid) if not cardmaster: continue obj_slidelist.append(( Objects.cardmaster(self, cardmaster), img, )) self.putFromBackPageLinkUrl() self.html_param['player'] = obj_player self.html_param['tradelists'] = [ obj_tradelist_use_crystal_piece, obj_tradelist_use_platinum_piece, obj_tradelist_use_battle_ticket, obj_tradelist, ] self.html_param['headerlist'] = header_img_list self.html_param['slidelist'] = obj_slidelist self.putRaidEventParams() self.writeAppHtml('trade/trade')
def process(self): args = self.getUrlArgs('/albumdetail/') try: albumid = int(args.get(0, None)) hklevel = int(self.request.get(Defines.URLQUERY_HKEVEL) or 1) except: raise CabaretError(u'リクエストが正しくありません', CabaretError.Code.ILLEGAL_ARGS) model_mgr = self.getModelMgr() # プレイヤー情報. v_player = self.getViewerPlayer() if not BackendApi.check_album_viewable( model_mgr, v_player.id, albumid, using=settings.DB_READONLY): if settings_sub.IS_LOCAL: raise CabaretError(u'閲覧できません') self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.album())) return # カード詳細情報取得. cardmasteridlist = BackendApi.get_albumcardmasteridlist( model_mgr, albumid, using=settings.DB_READONLY) if not cardmasteridlist: if settings_sub.IS_LOCAL: raise CabaretError(u'閲覧できません') self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.album())) return cardmaster_dict = BackendApi.get_cardmasters( cardmasteridlist, model_mgr, using=settings.DB_READONLY) cardmasteridlist.sort() obj_card_list = [] obj_card = None cur_cardmaster = None if 1 < len(cardmasteridlist): urlbase = UrlMaker.albumdetail(albumid) cardacquisitions = BackendApi.get_cardacquisitions( model_mgr, v_player.id, cardmasteridlist, using=settings.DB_READONLY) for cardmasterid in cardmasteridlist: if not cardacquisitions.get(cardmasterid): continue cardmaster = cardmaster_dict[cardmasterid] obj = Objects.cardmaster(self, cardmaster) obj['url'] = self.makeAppLinkUrl( OSAUtil.addQuery(urlbase, Defines.URLQUERY_HKEVEL, cardmaster.hklevel)) if obj_card is None or cardmaster.hklevel == hklevel: obj_card = obj cur_cardmaster = cardmaster obj_card_list.append(obj) self.html_param['cardmasterlist'] = obj_card_list self.html_param['cardmaster'] = obj_card first_cardmaster = cardmaster_dict[cardmasteridlist[0]] if cur_cardmaster is None: cardmasterid = first_cardmaster.id cur_cardmaster = first_cardmaster self.html_param['card'] = BackendApi.make_album_detail( self, v_player.id, cur_cardmaster, using=settings.DB_READONLY) # 思い出アルバムリストを取得. memories_list = [] movie_list = [] pcmovie_list = [] voice_list = [] for obj_memories in BackendApi.get_album_memories_list( self, v_player.id, albumid, using=settings.DB_READONLY): if obj_memories['contenttype'] == Defines.MemoryContentType.MOVIE: movie_list.append(obj_memories) elif obj_memories[ 'contenttype'] == Defines.MemoryContentType.MOVIE_PC: pcmovie_list.append(obj_memories) elif obj_memories[ 'contenttype'] == Defines.MemoryContentType.VOICE: voice_list.append(obj_memories) else: memories_list.append(obj_memories) # 異動数. if first_cardmaster and CardUtil.checkStockableMaster( first_cardmaster, raise_on_error=False): stocknum_model = BackendApi.get_cardstock( model_mgr, v_player.id, first_cardmaster.album, using=settings.DB_READONLY) stocknum = stocknum_model.num if stocknum_model else 0 self.html_param['stocknum'] = stocknum url = UrlMaker.transferreturn(first_cardmaster.id, v_player.req_confirmkey) self.html_param['url_transferreturn'] = self.makeAppLinkUrl(url) cardnum = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY) self.html_param['cardnum'] = cardnum self.html_param['cardlimit'] = v_player.cardlimit self.html_param['memories_list'] = memories_list self.html_param['movie_list'] = movie_list self.html_param['pcmovie_list'] = pcmovie_list self.html_param['voice_list'] = voice_list # カード詳細情報. self.writeAppHtml('album/detail')