Exemplo n.º 1
0
/* Do something with the url. Launch it, prolly. */
static void
handle_url(char *url, char *type)
{
   char               *sys = NULL;
   int                 len = 0;

   if (!url)
      return;

   D(("In handle_url: url -->%s<--\n", url));

   if (!strcmp(type, "www"))
     {
	/* This should be close enough :) */
	len = strlen(opt.www_command) + strlen(url) + 2;
	sys = malloc(len);
	Esnprintf(sys, len, opt.www_command, url);
     }
   else if (!strcmp(type, "ftp"))
     {
	/* This should be close enough :) */
	len = strlen(opt.ftp_command) + strlen(url) + 2;
	sys = malloc(len);
	Esnprintf(sys, len, opt.ftp_command, url);
     }
   else if (!strcmp(type, "get"))
     {
	/* This should be close enough :) */
	len = strlen(opt.get_command) + strlen(url) + 2;
	sys = malloc(len);
	Esnprintf(sys, len, opt.get_command, url);
     }
   else
     {
	/* This should be close enough :) */
	len = strlen(opt.www_command) + strlen(url) + 2;
	sys = malloc(len);
	Esnprintf(sys, len, opt.www_command, url);
     }

   D(("In handle_url: About to system() -->%s<--\n", sys));

   system(sys);

   if (!url_in_popup(url))
      add_url_to_popup(url);

   free(sys);

   if (opt.save_urls)
      save_url(url);
}
Exemplo n.º 2
0
/* void *p should always be a struct of type update_avatar */
void TwitterProto::UpdateAvatarWorker(void *p)
{
	if(p == 0)
		return;
	std::auto_ptr<update_avatar> data( static_cast<update_avatar*>(p));
	DBVARIANT dbv = {0};

	// db_get_s returns 0 when it suceeds, so if this suceeds it will return 0, or false.
	// therefore if it returns 1, or true, we want to return as there is no such user.
	// as a side effect, dbv now has the username in it i think
	if(db_get_ts(data->hContact,m_szModuleName,TWITTER_KEY_UN,&dbv))
		return;

	std::string ext = data->url.substr(data->url.rfind('.')); // finds the filetype of the avatar
	std::tstring filename = GetAvatarFolder() + _T('\\') + dbv.ptszVal + (TCHAR*)_A2T(ext.c_str()); // local filename and path
	db_free(&dbv);

	PROTO_AVATAR_INFORMATIONT ai = {sizeof(ai)};
	ai.hContact = data->hContact;
	ai.format = ProtoGetAvatarFormat(filename.c_str());

	if (ai.format == PA_FORMAT_UNKNOWN) {
		debugLogA( _T("***** Update avatar: Terminated for this contact, extension format unknown for %s"), data->url.c_str());
		return; // lets just ignore unknown formats... if not it crashes miranda. should probably speak to borkra about this.
	}
	
	_tcsncpy(ai.filename,filename.c_str(),MAX_PATH); // puts the local file name in the avatar struct, to a max of 260 chars (as of now)

	debugLogA( _T("***** Updating avatar: %s"), data->url.c_str());
	WaitForSingleObjectEx(avatar_lock_,INFINITE,true);
	if(CallService(MS_SYSTEM_TERMINATED,0,0)) // if miranda is shutting down...
	{
		debugLogA( _T("***** Terminating avatar update early: %s"),data->url.c_str());
		return;
	}

	if(save_url(hAvatarNetlib_,data->url,filename))
	{
		db_set_s(data->hContact,m_szModuleName,TWITTER_KEY_AV_URL,data->url.c_str());
		ProtoBroadcastAck(data->hContact,ACKTYPE_AVATAR,ACKRESULT_SUCCESS,&ai,0);
	}
	else
		ProtoBroadcastAck(data->hContact,ACKTYPE_AVATAR,ACKRESULT_FAILED, &ai,0);
	ReleaseMutex(avatar_lock_);
	debugLogA( _T("***** Done avatar: %s"),data->url.c_str());
}
Exemplo n.º 3
0
void TwitterProto::UpdateAvatarWorker(void *p)
{
	if(p == 0)
		return;
	std::auto_ptr<update_avatar> data( static_cast<update_avatar*>(p) );
	DBVARIANT dbv;

	if(DBGetContactSettingString(data->hContact,m_szModuleName,TWITTER_KEY_UN,&dbv))
		return;

	std::string ext = data->url.substr(data->url.rfind('.'));
	std::string filename = GetAvatarFolder() + '\\' + dbv.pszVal + ext;
	DBFreeVariant(&dbv);

	PROTO_AVATAR_INFORMATION ai = {sizeof(ai)};
	ai.hContact = data->hContact;
	ai.format = ext_to_format(ext);
	strncpy(ai.filename,filename.c_str(),MAX_PATH);

	LOG("***** Updating avatar: %s",data->url.c_str());
	WaitForSingleObjectEx(avatar_lock_,INFINITE,true);
	if(CallService(MS_SYSTEM_TERMINATED,0,0))
	{
		LOG("***** Terminating avatar update early: %s",data->url.c_str());
		return;
	}

	if(save_url(hAvatarNetlib_,data->url,filename))
	{
		DBWriteContactSettingString(data->hContact,m_szModuleName,TWITTER_KEY_AV_URL,
			data->url.c_str());
		ProtoBroadcastAck(m_szModuleName,data->hContact,ACKTYPE_AVATAR,
			ACKRESULT_SUCCESS,&ai,0);
	}
	else
		ProtoBroadcastAck(m_szModuleName,data->hContact,ACKTYPE_AVATAR,
			ACKRESULT_FAILED, &ai,0);
	ReleaseMutex(avatar_lock_);
	LOG("***** Done avatar: %s",data->url.c_str());
}