diff options
Diffstat (limited to 'protocols/Xfire/src/all_statusmsg.cpp')
-rw-r--r-- | protocols/Xfire/src/all_statusmsg.cpp | 398 |
1 files changed, 398 insertions, 0 deletions
diff --git a/protocols/Xfire/src/all_statusmsg.cpp b/protocols/Xfire/src/all_statusmsg.cpp new file mode 100644 index 0000000000..52e06e79ba --- /dev/null +++ b/protocols/Xfire/src/all_statusmsg.cpp @@ -0,0 +1,398 @@ +//beinhaltet funktionen zum setzen des status wenn man ingame ist
+
+#include "stdafx.h"
+#include "baseProtocol.h"
+#include "m_variables.h"
+#include "Xfire_gamelist.h"
+
+extern Xfire_gamelist xgamelist;
+
+
+#include <vector>
+
+using namespace std;
+
+#include "xdebug.h"
+
+//vector beinhaltet statusmessages
+vector<string> *olstatusmsg=NULL;
+vector<string> *protoname=NULL;
+vector<unsigned int> *olstatus=NULL;
+vector<unsigned int> *oltostatus=NULL;
+PROTOCOLDESCRIPTOR **temp;
+int anz,statusid;
+int statustype;
+
+BOOL BackupStatusMsg() {
+ DBVARIANT dbv;
+
+ statustype=DBGetContactSettingByte(NULL,protocolname,"statuschgtype",0);
+
+ XFireLog("Backup Status Message ...");
+
+ //alten vector löschen
+ if(olstatusmsg!=NULL)
+ {
+ delete olstatusmsg;
+ olstatusmsg=NULL;
+ }
+ if(protoname!=NULL)
+ {
+ delete protoname;
+ protoname=NULL;
+ }
+ if(olstatus!=NULL)
+ {
+ delete olstatus;
+ olstatus=NULL;
+ }
+ if(oltostatus!=NULL)
+ {
+ delete oltostatus;
+ oltostatus=NULL;
+ }
+ olstatusmsg=new vector<string>;
+ protoname=new vector<string>;
+ olstatus=new vector<unsigned int>;
+ oltostatus=new vector<unsigned int>;
+
+ //alle protokolle durchgehen und den status in den vector sichern
+ // TODO: was enumprotocols, is enumprotos okay?
+ CallService(MS_PROTO_ENUMPROTOS,(WPARAM)&anz,(LPARAM)&temp);
+ for(int i=0;i<anz;i++)
+ {
+ statusid=CallProtoService(temp[i]->szName,PS_GETSTATUS,0,0);
+ XFireLog("Get Status of %s ...",temp[i]->szName);
+
+ char ttemp[128]="";
+ sprintf_s(ttemp,128,"%s%s",temp[i]->szName,PS_SETAWAYMSG);
+
+ //xfire wird geskipped, offline prots und invs prots auch, und locked status prots auch
+ if(statusid==ID_STATUS_INVISIBLE||statusid==ID_STATUS_OFFLINE||!lstrcmpiA( temp[i]->szName, protocolname )||!ServiceExists(ttemp)||DBGetContactSettingByte(NULL,temp[i]->szName,"LockMainStatus",0)==1)
+ {
+ XFireLog("-> Skip %s.",temp[i]->szName);
+
+ olstatus->push_back(-1);
+ olstatusmsg->push_back("");
+ if(statustype) oltostatus->push_back(-1);
+ protoname->push_back("");
+ continue;
+ }
+
+ int dummystatusid=statusid;
+
+ if(statustype)
+ {
+ if(statusid!=0)
+ {
+ int caps=CallProtoService(temp[i]->szName,PS_GETCAPS,PFLAGNUM_2,0);
+
+ //normale statusreihenfolge
+ if(DBGetContactSettingByte(NULL,protocolname,"dndfirst",0)==0)
+ {
+ if(caps&PF2_LIGHTDND)
+ {
+ oltostatus->push_back(ID_STATUS_OCCUPIED);
+ dummystatusid=ID_STATUS_OCCUPIED;
+ XFireLog("%s supports OCCUPIED.",temp[i]->szName);
+ }
+ else if(caps&PF2_HEAVYDND)
+ {
+ oltostatus->push_back(ID_STATUS_DND);
+ dummystatusid=ID_STATUS_DND;
+ XFireLog("%s supports DND.",temp[i]->szName);
+ }
+ else if(caps&PF2_SHORTAWAY)
+ {
+ oltostatus->push_back(ID_STATUS_AWAY);
+ dummystatusid=ID_STATUS_AWAY;
+ XFireLog("%s supports AWAY.",temp[i]->szName);
+ }
+ else
+ {
+ XFireLog("%s no Away???.",temp[i]->szName);
+ oltostatus->push_back(statusid);
+ dummystatusid=statusid;
+ }
+ }
+ else //dnd bevorzugt
+ {
+ if(caps&PF2_HEAVYDND)
+ {
+ oltostatus->push_back(ID_STATUS_DND);
+ dummystatusid=ID_STATUS_DND;
+ XFireLog("%s supports DND.",temp[i]->szName);
+ }
+ else if(caps&PF2_LIGHTDND)
+ {
+ oltostatus->push_back(ID_STATUS_OCCUPIED);
+ dummystatusid=ID_STATUS_OCCUPIED;
+ XFireLog("%s supports OCCUPIED.",temp[i]->szName);
+ }
+ else if(caps&PF2_SHORTAWAY)
+ {
+ oltostatus->push_back(ID_STATUS_AWAY);
+ dummystatusid=ID_STATUS_AWAY;
+ XFireLog("%s supports AWAY.",temp[i]->szName);
+ }
+ else
+ {
+ XFireLog("%s no Away???.",temp[i]->szName);
+ oltostatus->push_back(statusid);
+ dummystatusid=statusid;
+ }
+ }
+ }
+ else
+ oltostatus->push_back(-1);
+ }
+
+ switch(statusid)
+ {
+ case ID_STATUS_ONLINE:
+ if(DBGetContactSetting(NULL,"SRAway","OnMsg",&dbv))
+ olstatusmsg->push_back(Translate("Yep, I'm here."));
+ break;
+ case ID_STATUS_AWAY:
+ if(DBGetContactSetting(NULL,"SRAway","AwayMsg",&dbv))
+ olstatusmsg->push_back(Translate("I've been away since %time%."));
+ break;
+ case ID_STATUS_NA:
+ if(DBGetContactSetting(NULL,"SRAway","NaMsg",&dbv))
+ olstatusmsg->push_back(Translate("Give it up, I'm not in!"));
+ break;
+ case ID_STATUS_OCCUPIED:
+ if(DBGetContactSetting(NULL,"SRAway","OccupiedMsg",&dbv))
+ olstatusmsg->push_back(Translate("Not right now."));
+ break;
+ case ID_STATUS_DND:
+ if(DBGetContactSetting(NULL,"SRAway","DndMsg",&dbv))
+ olstatusmsg->push_back(Translate("Give a guy some peace, would ya?"));
+ break;
+ case ID_STATUS_FREECHAT:
+ if(DBGetContactSetting(NULL,"SRAway","FreeChatMsg",&dbv))
+ olstatusmsg->push_back(Translate("Well, I would talk to you if Miranda ICQ supported chat"));
+ break;
+ case ID_STATUS_ONTHEPHONE:
+ if(DBGetContactSetting(NULL,"SRAway","OtpMsg",&dbv))
+ olstatusmsg->push_back(Translate("That'll be the phone."));
+ break;
+ case ID_STATUS_OUTTOLUNCH:
+ if(DBGetContactSetting(NULL,"SRAway","OtlMsg",&dbv))
+ olstatusmsg->push_back(Translate("Mmm...food."));
+ break;
+ default:
+ //nix zumachn, kenn den status nicht
+ olstatus->push_back(-1);
+ olstatusmsg->push_back("");
+ protoname->push_back("");
+ continue;
+ }
+
+ //ab in den vector
+ olstatus->push_back(statusid);
+ if(olstatus->size()>olstatusmsg->size())
+ {
+ olstatusmsg->push_back(string(dbv.pszVal));
+ protoname->push_back(temp[i]->szName);
+ //freigeben
+ DBFreeVariant(&dbv);
+ }
+ else
+ protoname->push_back(temp[i]->szName);
+ }
+
+ return TRUE;
+}
+
+BOOL SetGameStatusMsg()
+{
+ char* statusmsg=NULL;
+
+ //prüfe ob vector leer
+ if(olstatusmsg==NULL)
+ return FALSE;
+
+ //zusetzende statusmsg erstellen
+ if (ServiceExists(MS_VARS_FORMATSTRING))
+ {
+ DBVARIANT dbv;
+ if(!DBGetContactSetting(NULL,protocolname,"setstatusmsg",&dbv)) {
+ //direkte funktionen verwenden
+ statusmsg = variables_parse(dbv.pszVal,NULL,0);
+ if (statusmsg == NULL)
+ {
+ DBFreeVariant(&dbv);
+ return FALSE;
+ }
+
+ DBFreeVariant(&dbv);
+ }
+ }
+ else
+ {
+ //alternativ zweig ohne variables
+ DBVARIANT dbv;
+ if(!DBGetContactSetting(NULL,protocolname,"setstatusmsg",&dbv)) {
+
+ DBVARIANT dbv3;
+
+ //statusmsg rein
+ xgamelist.setString(dbv.pszVal,&statusmsg);
+
+ //mit den vars ersetzen beginnen
+
+ //derzeitiges spiel
+ if(!DBGetContactSetting(NULL,protocolname, "currentgamename",&dbv3))
+ {
+ xgamelist.strreplace("%myxfiregame%",dbv3.pszVal,&statusmsg);
+ DBFreeVariant(&dbv3);
+ }
+ else
+ xgamelist.strreplace("%myxfiregame%","",&statusmsg);
+
+ //derzeitiges voiceprogram
+ if(!DBGetContactSetting(NULL,protocolname, "currentvoicename",&dbv3))
+ {
+ xgamelist.strreplace("%myxfirevoice%",dbv3.pszVal,&statusmsg);
+ DBFreeVariant(&dbv3);
+ }
+ else
+ xgamelist.strreplace("%myxfirevoice%","",&statusmsg);
+
+ //derzeitige voiceip
+ if(!DBGetContactSetting(NULL,protocolname, "VServerIP",&dbv3))
+ {
+ xgamelist.strreplace("%myxfirevoiceip%",dbv3.pszVal,&statusmsg);
+ DBFreeVariant(&dbv3);
+ }
+ else
+ xgamelist.strreplace("%myxfirevoiceip%","",&statusmsg);
+
+ //derzeitige gameip
+ if(!DBGetContactSetting(NULL,protocolname, "ServerIP",&dbv3))
+ {
+ xgamelist.strreplace("%myxfireserverip%",dbv3.pszVal,&statusmsg);
+ DBFreeVariant(&dbv3);
+ }
+ else
+ xgamelist.strreplace("%myxfireserverip%","",&statusmsg);
+
+ }
+ }
+
+ // TODO: MS_PROTO_ENUMPROTOCOLS was original... is enumprotos okay?
+ CallService(MS_PROTO_ENUMPROTOS,(WPARAM)&anz,(LPARAM)&temp);
+ for(int i=0;i<anz;i++)
+ {
+ if(olstatus->at(i)!=-1)
+ {
+ if(statustype)
+ {
+ //newawaysys
+ if(ServiceExists("NewAwaySystem/SetStateA"))
+ {
+ XFireLog("-> SetStatusMsg of %s with NewAwaySystem/SetStateA.",protoname->at(i).c_str());
+
+ NAS_PROTOINFO npi = {0};
+ npi.cbSize=sizeof(NAS_PROTOINFO);
+ npi.szProto=(char*)protoname->at(i).c_str();
+ npi.status=oltostatus->at(i);
+ npi.szMsg=mir_strdup(statusmsg);
+ CallService("NewAwaySystem/SetStateA", (WPARAM)&npi, (LPARAM)1);
+ }
+ else if(ServiceExists("NewAwaySystem/SetStateW")) {
+ XFireLog("-> SetStatusMsg of %s with NewAwaySystem/SetStateW.",protoname->at(i).c_str());
+
+ NAS_PROTOINFO npi = {0};
+ npi.cbSize=sizeof(NAS_PROTOINFO);
+ npi.szProto=(char*)protoname->at(i).c_str();
+ npi.status=oltostatus->at(i);
+ npi.szMsg=mir_strdup(statusmsg);
+ CallService("NewAwaySystem/SetStateW", (WPARAM)&npi, (LPARAM)1);
+ }
+ else
+ {
+ XFireLog("-> SetStatusMsg of %s with Miranda with occupied status.",protoname->at(i).c_str());
+
+ //statusmsg für beschäftigt setzen
+ CallProtoService(temp[i]->szName,PS_SETAWAYMSG,oltostatus->at(i),(LPARAM)statusmsg);
+ //status auf beschäftigt wechseln
+ CallProtoService(temp[i]->szName,PS_SETSTATUS,oltostatus->at(i),0);
+ //statusmsg für beschäftigt setzen
+ if(CallProtoService(temp[i]->szName,PS_GETSTATUS,0,0)!=oltostatus->at(i))
+ {
+ XFireLog("Set StatusMsg again, Status was not succesfully set.");
+ CallProtoService(temp[i]->szName,PS_SETAWAYMSG,oltostatus->at(i),(LPARAM)statusmsg);
+ }
+ }
+ }
+ else
+ {
+ XFireLog("-> SetStatusMsg of %s.",protoname->at(i).c_str());
+
+ CallProtoService(temp[i]->szName,PS_SETAWAYMSG,olstatus->at(i),(LPARAM)statusmsg);
+ }
+ }
+ }
+
+ if (ServiceExists(MS_VARS_FORMATSTRING))
+ CallService(MS_VARS_FREEMEMORY, (WPARAM)statusmsg, 0);
+ else
+ if(statusmsg) delete[] statusmsg;
+
+ return TRUE;
+}
+
+BOOL SetOldStatusMsg()
+{
+ //prüfe ob vector leer
+ if(olstatusmsg==NULL)
+ return FALSE;
+
+ // TODO: was enumprotocols, is enumprotos okay?
+ CallService(MS_PROTO_ENUMPROTOS,(WPARAM)&anz,(LPARAM)&temp);
+ for(int i=0;i<anz;i++)
+ {
+ if(olstatus->at(i)!=-1)
+ {
+ if(statustype)
+ {
+ //alten status setzen
+ CallProtoService(temp[i]->szName,PS_SETSTATUS,olstatus->at(i),0);
+ //status wurde nicht gewechselt, dann statusmsg nachträglich setzen
+ if(CallProtoService(temp[i]->szName,PS_GETSTATUS,0,0)!=olstatus->at(i))
+ CallProtoService(temp[i]->szName,PS_SETAWAYMSG,olstatus->at(i),(LPARAM)olstatusmsg->at(i).c_str());
+ }
+ else
+ {
+ CallProtoService(temp[i]->szName,PS_SETSTATUS,olstatus->at(i),0);
+ CallProtoService(temp[i]->szName,PS_SETAWAYMSG,olstatus->at(i),(LPARAM)olstatusmsg->at(i).c_str());
+ }
+ }
+ }
+
+ //alten vector löschen
+ if(protoname!=NULL)
+ {
+ delete protoname;
+ protoname=NULL;
+ }
+ if(olstatusmsg!=NULL)
+ {
+ delete olstatusmsg;
+ olstatusmsg=NULL;
+ }
+ if(olstatus!=NULL)
+ {
+ delete olstatus;
+ olstatus=NULL;
+ }
+ if(oltostatus!=NULL)
+ {
+ delete olstatus;
+ olstatus=NULL;
+ }
+
+ return TRUE;
+}
\ No newline at end of file |