aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/MergePlaylist.h
blob: 5d9be4f10e57e3f29862e8b806c70babdbde05e2 (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
#pragma once
#include "../playlist/ifc_playlist.h"
#include <vector>
#include <windows.h> // for MAX_PATH
#include <bfc/multipatch.h>
#include "../playlist/ifc_playlistloadercallback.h"

class merge_pl_entry
{
public:
	merge_pl_entry()                                                  {}
	merge_pl_entry( const wchar_t *p_filename, const wchar_t *p_title, int p_length_ms );
	~merge_pl_entry();

	size_t GetFilename( wchar_t *p_filename, size_t filenameCch );
	size_t GetTitle( wchar_t *p_title, size_t titleCch );
	int    GetLengthInMilliseconds();
	size_t GetExtendedInfo( const wchar_t *metadata, wchar_t *info, size_t infoCch );

	void   SetFilename( const wchar_t *p_filename );
	void   SetTitle( const wchar_t *p_title );
	void   SetLengthMilliseconds( int p_length_ms );


	wchar_t *filename  = 0;
	wchar_t *filetitle = 0;
	int      length    = -1;
	bool     cached    = false;
};

enum { patch_playlist, patch_playlistloadercallback };

class MergePlaylist : public MultiPatch<patch_playlist, ifc_playlist>, public MultiPatch<patch_playlistloadercallback, ifc_playlistloadercallback>
{
public:
	MergePlaylist();
	~MergePlaylist();

	void           Clear();
	void           OnFile( const wchar_t *p_filename, const wchar_t *p_title, int lengthInMS, ifc_plentryinfo *info );
	void           AppendWithInfo( const wchar_t *p_filename, const wchar_t *p_title, int lengthInMS );
	
	size_t         GetNumItems();

	size_t         GetItem( size_t item, wchar_t *p_filename, size_t filenameCch );
	size_t         GetItemTitle( size_t item, wchar_t *p_title, size_t titleCch );
	const wchar_t *ItemTitle( size_t item );
	const wchar_t *ItemName( size_t item );
	int            GetItemLengthMilliseconds( size_t item );
	size_t         GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch );

	void           SetItemFilename( size_t item, const wchar_t *p_filename );
	void           SetItemTitle( size_t item, const wchar_t *p_title );
	void           SetItemLengthMilliseconds( size_t item, int p_length_ms );

	void           AppendPlaylist( MergePlaylist &copy );

	bool           HasFilename( const wchar_t *p_filename );

	uint64_t total_time;


protected:
	RECVS_MULTIPATCH;

public:
	//private:
	typedef std::vector<merge_pl_entry *> PlaylistEntries;
	PlaylistEntries entries;
};