aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_disc/main.h
blob: 285b8de6bc5e66ec9bbfe15bf57bfa9fcaf6502c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#ifndef NULLSOFT_MAINH
#define NULLSOFT_MAINH

#include "..\..\General\gen_ml/ml.h"
#include "..\..\General\gen_ml/ml_ipc_0313.h"

#include "./config.h"
#include "./drivemngr.h"
#include "./drive.h"
#include "./medium.h"
#include "api__ml_disc.h"
#include "..\..\General\gen_ml/menu.h"

#include "./copyfiles.h"
#include "./copyinternal.h"

#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>

#ifndef LONGX86
#ifdef _WIN64
  #define LONGX86	LONG_PTR
#else /*_WIN64*/
  #define LONGX86	 LONG	
#endif  /*_WIN64*/
#endif // LONGX86

#define OLD_AAC_CODEC mmioFOURCC('A','A','C',' ')

#define BN_EX_GETTEXT	0x0FFF 

#define WM_EXTRACTDISC		(WM_APP + 0x010)
#define WM_SHOWFILEINFO		(WM_APP + 0x11) // (wParam)(UINT)WISF_, (lParam)(LPCWSTR)file(track)name (can be NULL to reset)
#define WM_QUERYFILEINFO	(WM_APP + 0x12) 
#define WM_TAGUPDATED		(WM_APP + 0x13) // wParam = 0, lParam = (LPCWSTR)pszFileName

#define VCM_CREATECOMMANDBAR	(WM_APP + 0x20)
#define VCM_DESTROYCOMMANDBAR	(WM_APP + 0x21)
#define VCM_GETCOMMANDBAR		(WM_APP + 0x22)
#define VCM_GETMININFOENABLED	(WM_APP + 0x23)
#define VCM_GETMININFOVISIBLE	(WM_APP + 0x24)


typedef struct __CMDBARCREATESTRUCT
{
	HWND		hwndOwner;
	UINT		resourceId;
	DLGPROC		fnDialogProc;
	ULONG_PTR	uData;
} CMDBARCREATESTRUCT;

#define MSGRESULT(__hwnd, __result) { SetWindowLongPtrW((__hwnd), DWLP_MSGRESULT, ((LONGX86)(LONG_PTR)(__result))); return TRUE; }

#define ViewContainer_CreateCmdBar(/*HWND*/ __hwndViewContainer, /*HWND*/ __hwndOwner, /*INT_PTR*/ __resourceId, /*DLGPROC*/ __fnDialogProc, /*ULONG_PTR*/ __uData)\
		{CMDBARCREATESTRUCT cs; cs.hwndOwner = (__hwndOwner); cs.resourceId = (__resourceId); cs.fnDialogProc = (__fnDialogProc); cs.uData = (__uData);\
		((HWND)SNDMSG((__hwndViewContainer), VCM_CREATECOMMANDBAR, 0, (LPARAM)(&cs)));}

#define ViewContainer_DestroyCmdBar(/*HWND*/ __hwndViewContainer)\
		((BOOL)SNDMSG((__hwndViewContainer), VCM_DESTROYCOMMANDBAR, 0, 0L))

#define ViewContainer_GetCmdBar(/*HWND*/ __hwndViewContainer)\
		((HWND)SNDMSG((__hwndViewContainer), VCM_GETCOMMANDBAR, 0, 0L))

#define ViewContainer_GetMiniInfoEnabled(/*HWND*/ __hwndViewContainer)\
		((HWND)SNDMSG((__hwndViewContainer), VCM_GETMININFOENABLED, 0, 0L))

#define ViewContainer_GetMiniInfoVisible(/*HWND*/ __hwndViewContainer)\
		((HWND)SNDMSG((__hwndViewContainer), VCM_GETMININFOVISIBLE, 0, 0L))


extern winampMediaLibraryPlugin plugin;
extern LARGE_INTEGER freq;

void CleanupDirectoryString(LPTSTR pszDirectory);
LPWSTR GetExtensionString(LPWSTR pszBuffer, INT cchBufferMax, DWORD fourcc);
HRESULT FormatFileName(LPTSTR pszTextOut, INT cchTextMax, LPCTSTR pszFormat,
					   INT nTrackNo, LPCTSTR pszArtist,
					   LPCTSTR pszAlbum, LPCTSTR pszTitle,
					   LPCTSTR pszGenre, LPCTSTR pszYear,
					   LPCTSTR pszTrackArtist,
					   LPCTSTR pszFileName, LPCTSTR pszDisc);


bool RegisteredEncoder(DWORD fourcc);

extern C_Config *g_config;
extern HMENU g_context_menus;
extern C_Config *g_view_metaconf;

#define DSF_CANRECORD	0x00010000

#define DSF_PLAYING		0x00000001
#define DSF_RIPPING		0x00000002
#define DSF_BURNING		0x00000004
#define DSF_GETTINGINFO	0x00000008

typedef struct _DRIVE
{
	CHAR	cLetter;
	CHAR	cMode;
	WCHAR	szTitle[64];
	DWORD	textSize;
	BOOL	textOrigWidth;
	WORD		itemWidth;
	BYTE		nBtnState;
	BOOL	bEjectVisible;
	UINT_PTR	timerId;
} DRIVE;


typedef BOOL (CALLBACK *NAVITEMENUMPROC)(HNAVITEM hItem, DRIVE *pDrive, LPARAM param);

DRIVE *Plugin_GetDriveFromNavItem(HNAVITEM hItem);
HNAVITEM Plugin_GetNavItemFromLetter(CHAR cLetter);
BOOL Plugin_EnumerateNavItems(NAVITEMENUMPROC callback, LPARAM param);
void Plugin_RegisterListener(HWND hwnd, UINT uMsg, CHAR cLetter); // active view can register itself to be notified about drive/medium changes if cLetter = 0 you will be notifed for all drives
void Plugin_UnregisterListener(HWND hwnd);
void Plugin_ShowRippingPreferences(void);
BOOL Plugin_IsExtractScheduled(CHAR cLetter);

int getFileInfo(const char *filename, const char *metadata, char *dest, int len);
int getFileInfoW(const wchar_t *filename, const wchar_t *metadata, wchar_t *dest, int len);

#define HF_DOMODAL			0x0001
#define HF_ALLOWRESIZE		0x0010

HWND MLDisc_ShowHelp(HWND hParent, LPCWSTR pszWindowTitle, LPCWSTR pszCaption, LPCWSTR pszText, UINT uFlags); // returns hwnd only if not HF_DOMODAL


#define QBF_SHOW_CHECKBOX		0x00000001L
#define QBF_SHOW_EXTRA_BUTTON	0x00000002L
#define QBF_TOPMOST				0x00000100L
#define QBF_SETFOREGROUND		0x00000200L
#define QBF_BEEP				0x00000400L
#define QBF_FLASH				0x00000800L
#define QBF_DEFAULT_OK			0x00000000L
#define QBF_DEFAULT_CANCEL		0x00001000L
#define QBF_DEFAULT_EXTRA1		0x00002000L


typedef struct _QUESTIONBOX
{
	HWND			hParent;			// [in]
	LPCTSTR		pszIcon;			// [in]
	UINT		uBeepType;			// [in]
	LPCTSTR		pszTitle;			// [in] accepts MAKEINTRESOURCE() as parameters. 
	LPCTSTR		pszMessage;			// [in] accepts MAKEINTRESOURCE() as parameters. 
	UINT		uFlags;				// [in]
	LPCTSTR		pszBtnOkText;		// [in] accepts MAKEINTRESOURCE() as parameters.
	LPCTSTR		pszBtnCancelText;	// [in] accepts MAKEINTRESOURCE() as parameters.
	LPCTSTR		pszCheckboxText;	// [in] accepts MAKEINTRESOURCE() as parameters.
	LPCTSTR		pszBtnExtraText;	// [in] accepts MAKEINTRESOURCE() as parameters.
	BOOL		checkboxChecked;	// [in][out] 
} QUESTIONBOX;

INT_PTR MLDisc_ShowQuestionBox(QUESTIONBOX *pQuestionBox);  // returns pressed button id;

// cdrip.cpp
BOOL CALLBACK CDRipPrefsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);

typedef struct
{
	char drive_letter;

	wchar_t *album;
	wchar_t *artist;
	wchar_t *genre;
	wchar_t *year;
	wchar_t *publisher; // record label
	wchar_t *disc; // disc ##/##
	wchar_t *comment; // notes from CDDB
	wchar_t **composers; 
	wchar_t **conductors;
	wchar_t **gracenoteFileIDs;
	wchar_t **gracenoteExtData;
	int  total_length_bytes;

	int ntracks; // total number of tracks
	wchar_t **tracks; // set these to NULL to not rip em
	wchar_t **trackArtists;

	int  *lengths; // lengths, in seconds

	wchar_t **filenames;	// can be used internally to override output filenames 
							// (should always allocate, but leave NULL ptrs in the array)
	wchar_t **tempFilenames;	//where we are ripping to, we'll move at the end
} cdrip_params;

void cdrip_extractFiles(cdrip_params *parms);

int cdrip_isextracting(char drive);
void cdrip_stop_all_extracts();

//gracenote.cpp
void gracenoteInit();
int gracenoteQueryFile(const char *filename);
void gracenoteCancelRequest();
int gracenoteDoTimerStuff();
void gracenoteSetValues(char *artist, char *album, char *title);
char *gracenoteGetTuid();
int gracenoteIsWorking();

//view_ripburn.cpp
INT_PTR CALLBACK view_ripburnDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);

// view_cdrom.cpp
void saveCDToItemRecordList(CHAR cLetter, itemRecordList *obj, char *album);
int cdrom_contextMenu(HWND parent, CHAR cLetter, HNAVITEM hItem);
void cdburn_appendItemRecord(itemRecordList *obj, char driveletter);

HWND CreateContainerWindow(HWND hwndParent, CHAR cLetter, BOOL bQueryInfo);
HWND CreateWaitWindow(HWND hwndParent, CHAR cLetter);
HWND CreateInfoWindow(HWND hwndParent, CHAR cLetter);
HWND CreateCDViewWindow(HWND hwndParent, DM_NOTIFY_PARAM *phdr);
HWND CreateCDBurnWindow(HWND hwndParent, CHAR cLetter);
HWND CreateCDRipWindow(HWND hwndParent, CHAR cLetter);
HWND CreateCdDataViewWindow(HWND hwndParent, CHAR cLetter);

BOOL CALLBACK browseEnumProc(HWND hwnd, LPARAM lParam);

#endif