private bool FetchRichPresenceResource(Variant presenceValue) { if (presenceValue == null) { return(false); } RichPresence richPresence = RichPresence.ParseFrom(presenceValue.MessageValue); if (richPresence == null || !richPresence.IsInitialized) { base.ApiLog.LogError("Rich presence field from battle.net does not contain valid RichPresence message"); return(false); } if (this.m_richPresenceStringTables.ContainsKey(richPresence)) { return(false); } FourCC programId = new FourCC(richPresence.ProgramId); FourCC streamId = new FourCC(richPresence.StreamId); FourCC locale = new FourCC(BattleNet.Client().GetLocaleName()); this.IncrementOutstandingRichPresenceStringFetches(); ResourcesAPI resources = this.m_battleNet.Resources; resources.LookupResource(programId, streamId, locale, new ResourcesAPI.ResourceLookupCallback(this.ResouceLookupCallback), richPresence); return(true); }
private bool ResolveRichPresenceStrings(out string richPresenceString, bgs.types.EntityId entityId, ulong index, int recurseDepth) { richPresenceString = string.Empty; FieldKey fieldKey = new FieldKey(); fieldKey.SetProgram(BnetProgramId.BNET.GetValue()); fieldKey.SetGroup(2u); fieldKey.SetField(8u); fieldKey.SetIndex(index); Variant cache = this.m_presenceCache.GetCache(entityId, fieldKey); if (cache == null) { base.ApiLog.LogError("Expected field missing from presence cache when resolving rich presence string"); return(false); } RichPresence richPresence = RichPresence.ParseFrom(cache.MessageValue); if (richPresence == null || !richPresence.IsInitialized) { base.ApiLog.LogError("Rich presence field did not contain valid RichPresence message when resolving"); return(false); } if (!this.m_richPresenceStringTables.ContainsKey(richPresence)) { return(false); } PresenceAPI.IndexToStringMap indexToStringMap = this.m_richPresenceStringTables[richPresence]; if (!indexToStringMap.ContainsKey((ulong)richPresence.Index)) { base.ApiLog.LogWarning("Rich presence string table data is missing"); return(false); } richPresenceString = indexToStringMap[(ulong)richPresence.Index]; if (recurseDepth < 1 && !this.SubstituteVariables(out richPresenceString, richPresenceString, entityId, recurseDepth + 1)) { base.ApiLog.LogWarning("Failed to substitute rich presence variables in: {0}", new object[] { richPresenceString }); return(false); } return(true); }