winamp/Src/Plugins/Input/in_wmvdrm/main.cpp
2024-09-24 14:54:57 +02:00

136 lines
3.3 KiB
C++

#include "Main.h"
#include "api.h"
#include "loadini.h"
#include "FileTypes.h"
#include <commctrl.h>
#include "../nu/Config.h"
#include "../nu/CCVersion.h"
#include "resource.h"
wchar_t INI_FILE[MAX_PATH] = L"";
IDispatch *winampExternal = 0;
Nullsoft::Utility::Config wmConfig;
WMDRM mod;
HINSTANCE WASABI_API_LNG_HINST_WAV = 0;
HINSTANCE WASABI_API_LNG_HINST_DS = 0;
int Init()
{
if (!IsWindow(plugin.hMainWindow))
return IN_INIT_FAILURE;
if (!LoadWasabi())
return IN_INIT_FAILURE;
plugin.UsesOutputPlug |= 8;
// need to have this initialised before we try to do anything with localisation features
WASABI_API_START_LANG(plugin.hDllInstance,InWmLangGUID);
static wchar_t szDescription[256];
swprintf(szDescription,256,WASABI_API_LNGSTRINGW(IDS_NULLSOFT_WINDOWS_MEDIA_DECODER),WMDRM_VERSION);
plugin.description = (char*)szDescription;
IniFile(plugin.hMainWindow);
wmConfig.SetFile(INI_FILE, L"in_wm");
ReadConfig();
fileTypes.ReadConfig();
if (NULL == winampExternal)
{
winampExternal = (IDispatch *)SendMessage(plugin.hMainWindow, WM_WA_IPC, 0, IPC_GET_DISPATCH_OBJECT); // ask for winamp's
if (winampExternal == (IDispatch *)1)
winampExternal = 0;
}
mod.Init();
return IN_INIT_SUCCESS;
}
void Quit()
{
mod.Quit();
UnloadWasabi();
fileTypes.types.clear();
if (NULL != winampExternal)
{
winampExternal->Release();
winampExternal = NULL;
}
}
void Config(HWND parent)
{
mod.Config(parent);
fileTypes.SaveConfig();
WriteConfig();
}
void About(HWND parent)
{
wchar_t message[1024] = {0}, text[1024] = {0};
WASABI_API_LNGSTRINGW_BUF(IDS_NULLSOFT_WINDOWS_MEDIA_DECODER_OLD,text,1024);
wsprintfW(message, WASABI_API_LNGSTRINGW(IDS_ABOUT_TEXT),
plugin.description, TEXT(__DATE__));
DoAboutMessageBox(parent,text,message);
}
void GetFileInfo(const in_char *file, wchar_t *title, int *length_in_ms) { mod.GetFileInfo(file, title, length_in_ms); }
int InfoDialog(const in_char *file, HWND parent) { return mod.InfoBox(file, parent); }
int IsOurFile(const in_char *fn) { return mod.IsOurFile(fn); }
int Play(const in_char *fn) {return mod.Play(fn); }
void Pause() { mod.Pause(); }
void Resume() { mod.UnPause(); }
int IsPaused() { return mod.IsPaused(); }
void Stop() { mod.Stop(); }
int GetLength() { return mod.GetLength(); }
int GetOutputTime() { return mod.GetOutputTime(); }
void SetOutputTime(int time_in_ms) { return mod.SetOutputTime(time_in_ms); }
void SetVolume(int volume) { mod.SetVolume(volume); }
void SetPan(int pan) { mod.SetPan(pan); }
void EQSet(int on, char data[10], int preamp) { mod.EQSet(on, data, preamp); }
In_Module plugin =
{
IN_VER_RET, // defined in IN2.H
"nullsoft(in_wm.dll)",
0, // hMainWindow (filled in by winamp)
0, // hDllInstance (filled in by winamp)
0, // this is a double-null limited list. "EXT\0Description\0EXT\0Description\0" etc.
0, // is_seekable
1, // uses output plug-in system
Config,
About,
Init,
Quit,
GetFileInfo,
InfoDialog,
IsOurFile,
Play,
Pause,
Resume,
IsPaused,
Stop,
GetLength,
GetOutputTime,
SetOutputTime,
SetVolume,
SetPan,
0,0,0,0,0,0,0,0,0, // visualization calls filled in by winamp
0,0, // dsp calls filled in by winamp
EQSet,
NULL, // setinfo call filled in by winamp
0, // out_mod filled in by winamp
};
extern "C" __declspec( dllexport ) In_Module * winampGetInModule2()
{
return &plugin;
}