#include "stdafx.h" #include "Xfire_icon_mng.h" //liefert den handle eines icons zurück HANDLE Xfire_icon_mng::getGameIconHandle(unsigned int gameid) { Xfire_icon_cache entry={0}; //icon im cache dann zurückliefern if(getIconfromCache(gameid,&entry)) return entry.handle; //ansonsten gameicon laden return this->LoadGameIcon(gameid).handle; } //liefert den index des icons zurück unsigned int Xfire_icon_mng::getGameIconId(unsigned int gameid) { for(unsigned int i=0;iiconcache.size()-1) return NULL; return iconcache.at(id).hicon; } //liefert das hicon zurück HICON Xfire_icon_mng::getGameIcon(unsigned int gameid) { Xfire_icon_cache entry={0}; //icon im cache dann zurückliefern if(getIconfromCache(gameid,&entry)) return entry.hicon; return this->LoadGameIcon(gameid).hicon; } //liefert den icon eintrag zurück Xfire_icon_cache Xfire_icon_mng::getGameIconEntry(unsigned int gameid) { Xfire_icon_cache entry={0}; //icon im cache dann zurückliefern if(getIconfromCache(gameid,&entry)) return entry; return this->LoadGameIcon(gameid); } //sucht nach dem spielicon im cache BOOL Xfire_icon_mng::getIconfromCache(unsigned int gameid,Xfire_icon_cache* out) { //kein ziel, keine prüfung if(out==NULL) return FALSE; for(unsigned int i=0;icreateHICONfromdata(data,size); UnlockResource(hglobal); } FreeResource(hglobal); } } } //kein icon in der dll, dann aus dem internet laden if(!entry.hicon) entry.hicon=downloadIcon(shortname); //wenn ein hicon erzeugt wurde, dann handle erstellen und in den cache laden if(entry.hicon) entry.handle=this->createIconHandle(entry.hicon); //eintrag in den cache, selbst wenn kein icon geladen werden konnte this->iconcache.push_back(entry); return entry; } //icon vom xfire server laden HICON Xfire_icon_mng::downloadIcon(char* shortname) { //nur vom internetladen, wenn die option aktiv ist if(!DBGetContactSettingByte(NULL,protocolname,"xfiresitegameico",0)) return NULL; //keinen namen angegeben? if(!shortname) return NULL; //buffer char*buf=NULL; unsigned int size=0; char url[255]="http://media.xfire.com/xfire/xf/images/icons/"; strcat_s(url,255,shortname); strcat_s(url,255,".gif"); //verscuhe das icon aus dem inet zulasen if(GetWWWContent2(url,NULL,FALSE,&buf,&size)) { //aus dem buffer ein hicon erzeugen HICON hicon=this->createHICONfromdata(buf,size); //speicher freigeben delete[] buf; return hicon; } return NULL; } //setzt alle handles der icons neu int Xfire_icon_mng::resetIconHandles() { for(unsigned int i=0;icreateIconHandle(iconcache.at(i).hicon); } return 0; }