summaryrefslogblamecommitdiffstats
path: root/Src/playlist/util.cpp
blob: debd3be08ee1ba128e44d02de9778e5d09013105 (plain) (tree)












































































                                                                                                                                         
#include <shlobj.h>
#include <strsafe.h>

#include "main.h"
#include "api__playlist.h"
#include "../nu/ns_wc.h"

HRESULT ResolveShortCut(HWND hwnd, LPCWSTR pszShortcutFile, LPWSTR pszPath)
{
	IShellLinkW      *psl = 0;
	WIN32_FIND_DATAW  wfd = {0};

	*pszPath = 0;   // assume failure

	HRESULT hres = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void **)&psl );
	if ( SUCCEEDED( hres ) )
	{
		IPersistFile *ppf = 0;
		hres = psl->QueryInterface( &ppf ); // OLE 2!  Yay! --YO
		if ( SUCCEEDED( hres ) )
		{
			hres = ppf->Load( pszShortcutFile, STGM_READ );
			if ( SUCCEEDED( hres ) )
			{
				hres = psl->Resolve( hwnd, SLR_ANY_MATCH );
				if ( SUCCEEDED( hres ) )
				{
					wchar_t szGotPath[ MAX_PATH ] = { 0 };
					StringCchCopyW( szGotPath, MAX_PATH, pszShortcutFile );
					hres = psl->GetPath( szGotPath, MAX_PATH, &wfd, SLGP_SHORTPATH );
					StringCchCopyW( pszPath, MAX_PATH, szGotPath );
				}
			}

			ppf->Release();
		}

		psl->Release();
	}

	return SUCCEEDED(hres);
}

bool IsUrl(const wchar_t *url)
{
	return !!wcsstr(url, L"://");
}

void SetUserAgent(api_httpreceiver *http)
{
	char agent[256] = {0};
	StringCchPrintfA(agent, 256, "User-Agent: %S/%S", WASABI_API_APP->main_getAppName(), WASABI_API_APP->main_getVersionNumString());
	http->addheader(agent);
}

const char *GetProxy()
{
	static char proxy[ 256 ] = "";
	// {C0A565DC-0CFE-405a-A27C-468B0C8A3A5C}
	const GUID internetConfigGroupGUID =
	{ 0xc0a565dc, 0xcfe, 0x405a, { 0xa2, 0x7c, 0x46, 0x8b, 0xc, 0x8a, 0x3a, 0x5c } };
	ifc_configgroup *group = AGAVE_API_CONFIG->GetGroup( internetConfigGroupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( L"Proxy" );
		if ( item )
		{
			const wchar_t *wideProxy = item->GetString();
			if ( wideProxy )
			{
				WideCharToMultiByteSZ( CP_ACP, 0, wideProxy, -1, proxy, 256, 0, 0 );
			}
		}
	}

	return proxy;
}