aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/install.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/install.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/install.cpp')
-rw-r--r--Src/Winamp/install.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/Src/Winamp/install.cpp b/Src/Winamp/install.cpp
new file mode 100644
index 00000000..90b3a215
--- /dev/null
+++ b/Src/Winamp/install.cpp
@@ -0,0 +1,184 @@
+/** (c) Nullsoft, Inc. C O N F I D E N T I A L
+ ** Filename:
+ ** Project:
+ ** Description:
+ ** Author:
+ ** Created:
+ **/
+
+#include "main.h"
+#include "api.h"
+#include "../nu/AutoChar.h"
+
+#include "./setup/svc_setup.h"
+#include <api/service/waservicefactorybase.h>
+#include "./setup/postsetup.h"
+#define APSTUDIO_READONLY_SYMBOLS
+#include "./setup/setup_resource.h"
+#include "./setup/setupfactory.h"
+
+void DoInstall(int is_install)
+{
+ //2=audiotype
+ //4=videotype
+ //8=cd
+ //16=set needreg=1
+ //32=dircontextmenus
+ //64=playlisttype
+ //128=run setup wizard
+
+ if (is_install&128)
+ {
+ HRESULT hr(S_FALSE);
+ HWND hwndStatus(NULL), hwndWA(NULL);
+
+ waServiceFactory *psf = WASABI_API_SVC->service_getServiceByGuid(UID_SVC_SETUP);
+ if (psf)
+ {
+ svc_setup *pSvc = (svc_setup*)psf->getInterface();
+ if (pSvc)
+ {
+ Setup_RegisterDefault();
+ Setup_RegisterPlugins();
+
+ hr = pSvc->Start(hMainWindow);
+
+ if (S_OK == hr)
+ {
+ pSvc->CreateStatusWnd(&hwndStatus);
+ if (hwndStatus)
+ {
+ ShowWindow(hwndStatus, SW_SHOWNORMAL);
+ UpdateWindow(hwndStatus);
+ }
+ pSvc->Save(hwndStatus);
+ pSvc->ExecJobs(hwndStatus);
+ }
+ pSvc->Release();
+ }
+ WASABI_API_SVC->service_deregister(psf);
+ }
+
+ if (S_OK == hr && hwndStatus)
+ {
+ SetDlgItemTextW(hwndStatus, IDC_LBL_STATUS, getStringW(IDS_STATUS_RUNWA, NULL, 0));
+ }
+
+ out_deinit();
+ in_deinit();
+ w5s_deinit();
+
+ if (S_OK == hr)
+ {
+ DWORD attr = GetFileAttributesW(INI_FILE);
+ if(attr & FILE_ATTRIBUTE_READONLY)
+ {
+ SetFileAttributesW(INI_FILE,(attr - FILE_ATTRIBUTE_READONLY));
+ }
+
+ char szWAParam[MAX_PATH] = {0};
+ WritePrivateProfileStringW(L"WinampReg", L"NeedReg", L"0", INI_FILE);
+ GetPrivateProfileStringA("SETUP", "WAParam", "", szWAParam, sizeof(szWAParam)/sizeof(char), INI_FILEA);
+ WritePrivateProfileStringW(L"SETUP", NULL, NULL, INI_FILE);
+ PathQuoteSpacesA(szWAParam);
+ StartWinamp((NULL != hwndStatus), &hwndWA, szWAParam);
+ }
+
+ Wasabi_Unload();
+
+ if (hwndStatus) DestroyWindow(hwndStatus);
+ if (hwndWA && IsWindow(hwndWA)) SetForegroundWindow(hwndWA);
+ RemoveRegistrar();
+ ExitProcess(0);
+ return;
+ }
+
+ config_setup_filetypes(0);
+ config_registermediaplayer(1);
+
+ if (is_install&32) config_adddircontext(0);
+ else config_removedircontext(0);
+
+ if (is_install&16) WritePrivateProfileStringW(L"WinampReg", L"NeedReg", L"1", INI_FILE);
+
+ if (is_install&8)
+ {
+ if (!config_iscdplayer()) config_regcdplayer(1, 0);
+ }
+ else
+ {
+ if (config_iscdplayer()) config_regcdplayer(0, 0);
+ }
+
+ if (is_install&(4 | 2 | 64)) // audio or video or both
+ {
+ extern void _w_sW(const char *name, const wchar_t *data);
+ wchar_t ext_list[16384] = {0};
+
+ if (is_install&(4 | 2))
+ {
+ wchar_t *ext = in_getextlistW();
+ wchar_t *a = ext;
+
+ if (ext)
+ {
+ while (a && *a)
+ {
+ wchar_t buf[1024] = {0}, buf2[64] = {0};
+ StringCchPrintfW(buf, 1024, L"test.%s", a);
+
+ buf2[0] = 0;
+ in_get_extended_fileinfoW(buf, L"type", buf2, 32);
+ int type = _wtoi(buf2);
+
+ if (lstrlenW(ext_list) + lstrlenW(buf) > 16128) break;
+ {
+ int doreg = (!type && (is_install & 2)) || (type && (is_install & 4));
+
+ if (doreg) config_register(a, doreg);
+ if (doreg)
+ {
+ if (*ext_list) StringCchCatW(ext_list, 16384, L":");
+ StringCchCatW(ext_list, 16384, a);
+ }
+ }
+
+ a += lstrlenW(a) + 1;
+ }
+ GlobalFree((HGLOBAL)ext);
+ SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT, NULL, NULL);
+ }
+ }
+
+ if (is_install&64)
+ {
+ const wchar_t *p;
+ size_t i=0;
+ while (NULL != (p = playlistManager->EnumExtension(i++)))
+ {
+ int doreg = !!(is_install & 64);
+ if (doreg)
+ {
+ config_register((wchar_t*)p, doreg);
+ if (*ext_list) StringCchCatW(ext_list, 16384, L":");
+ StringCchCatW(ext_list, 8192, p);
+ }
+ p += lstrlenW(p) + 1;
+ }
+ }
+ _w_sW("config_extlist", ext_list);
+ }
+
+ //CreateEQPresets();
+
+ config_register(L"wsz", 1);
+ config_register(L"wal", 1);
+ config_register(L"wlz", 1);
+ config_write(0);
+ out_deinit();
+ in_deinit();
+ w5s_deinit();
+ Wasabi_Unload();
+ RemoveRegistrar();
+ ExitProcess(0);
+} \ No newline at end of file