Subversion Repositories mdb

Rev

Rev 24 | Rev 26 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24 Rev 25
Line 11... Line 11...
11
 * and are protected by trade secret or copyright law.
11
 * and are protected by trade secret or copyright law.
12
 * Dissemination of this information or reproduction of this material
12
 * Dissemination of this information or reproduction of this material
13
 * is strictly forbidden unless prior written permission is obtained
13
 * is strictly forbidden unless prior written permission is obtained
14
 * from Andreas Theofilu.
14
 * from Andreas Theofilu.
15
 */
15
 */
16
MODULE_NAME='MDB_UI'	(dev dvTPs[], dev vdvMDB)
16
MODULE_NAME='MDB_UI'	(dev dvTPs[], dev vdvMDB, char IP[], char path[])
17
 
17
 
18
#include 'mSNAPI'
18
#include 'mSNAPI'
19
 
19
 
20
DEFINE_TYPE
20
DEFINE_TYPE
21
	struct ST_SONG
21
	struct ST_SONG
Line 36... Line 36...
36
	constant char sPopupDetail[] = 		'MFp_MDB_detail';
36
	constant char sPopupDetail[] = 		'MFp_MDB_detail';
37
	constant char sPopupMenu[] = 		'MFp_MDB_menu';
37
	constant char sPopupMenu[] = 		'MFp_MDB_menu';
38
	constant char sPopupUsers[] =		'MFp_MDB_users';
38
	constant char sPopupUsers[] =		'MFp_MDB_users';
39
	constant char sPopupSelUser[] =		'MFp_MDB_select_user';
39
	constant char sPopupSelUser[] =		'MFp_MDB_select_user';
40
 
40
 
-
 
41
	constant integer BTN_SCROLLBAR =	256;
-
 
42
 
41
	constant integer BTN_SAVE =			340;
43
	constant integer BTN_SAVE =			340;
42
	constant integer BTN_DELETE =		341;
44
	constant integer BTN_DELETE =		341;
43
	constant integer BTN_NOW_PLAYING =	342;
45
	constant integer BTN_NOW_PLAYING =	342;
-
 
46
	constant integer BTN_QUEUE =		349;
44
 
47
 
45
	constant integer BTN_TITLE = 		350;
48
	constant integer BTN_TITLE = 		350;
46
	constant integer BTN_ARTIST =		351;
49
	constant integer BTN_ARTIST =		351;
47
	constant integer BTN_GENRE =		352;
50
	constant integer BTN_GENRE =		352;
48
	constant integer BTN_ALBUM =		353;
51
	constant integer BTN_ALBUM =		353;
49
	constant integer BTN_PLAYLIST =		354;
52
	constant integer BTN_PLAYLIST =		354;
-
 
53
	constant integer BTN_RETURN =		355;
50
 
54
 
51
	constant integer BTN_LINE1_PIC =	301;
55
	constant integer BTN_LINE1_PIC =	301;
52
	constant integer BTN_LINE1_LINE =	321;
56
	constant integer BTN_LINE1_LINE =	321;
53
	constant integer BTN_LINE2_PIC =	302;
57
	constant integer BTN_LINE2_PIC =	302;
54
	constant integer BTN_LINE2_LINE =	322;
58
	constant integer BTN_LINE2_LINE =	322;
Line 78... Line 82...
78
	constant integer BTN_MENU7 =		267;
82
	constant integer BTN_MENU7 =		267;
79
	constant integer BTN_MENU8 =		268;
83
	constant integer BTN_MENU8 =		268;
80
	constant integer BTN_MENU9 =		269;
84
	constant integer BTN_MENU9 =		269;
81
	constant integer BTN_MENU10 =		270;
85
	constant integer BTN_MENU10 =		270;
82
 
86
 
-
 
87
	constant integer BTN_DETAIL_BACK =	400;
-
 
88
	constant integer BTN_USER_OK =		401;
-
 
89
	constant integer BTN_USER_CANCEL =	402;
-
 
90
 
83
	constant integer TEXT_TITLE =		1001;
91
	constant integer TEXT_TITLE =		1001;
84
	constant integer TEXT_PROGRES =		1002;
92
	constant integer TEXT_PROGRES =		1002;
85
	constant integer TEXT_MENU_TITLE =	1003;
93
	constant integer TEXT_MENU_TITLE =	1003;
86
 
94
 
87
	constant integer TEXT_DETAIL_TITLE =	1011;
95
	constant integer TEXT_DETAIL_TITLE =	1011;
Line 92... Line 100...
92
	constant integer TEXT_DETAIL_TIME_TOTAL=1016;
100
	constant integer TEXT_DETAIL_TIME_TOTAL=1016;
93
 
101
 
94
	constant integer TEXT_INPUT_UNAME =		1021;
102
	constant integer TEXT_INPUT_UNAME =		1021;
95
	constant integer TEXT_INPUT_PLAYLIST =	1022;
103
	constant integer TEXT_INPUT_PLAYLIST =	1022;
96
 
104
 
97
	constant char TOK_TXT_NONE[] =		'NONE';
-
 
98
	constant char TOK_TXT_TITLE[] =		'TITLE';
-
 
99
	constant char TOK_TXT_ARTIST[] =	'ARTIST';
-
 
100
	constant char TOK_TXT_ALBUM[] =		'ALBUM';
-
 
101
	constant char TOK_TXT_GENRE[] =		'GENRE';
-
 
102
	constant char TOK_TXT_QUEUE[] =		'QUEUE';
-
 
103
	constant char TOK_TXT_PLAYLIST[] =	'PLAYLIST';
-
 
104
 
-
 
105
	constant integer TOK_NONE =			0;
-
 
106
	constant integer TOK_TITLE =		1;
-
 
107
	constant integer TOK_ARTIST =		2;
-
 
108
	constant integer TOK_ALBUM =		3;
105
	constant integer LVL_SCROLLBAR =		7;
109
	constant integer TOK_GENRE =		4;
-
 
110
	constant integer TOK_QUEUE =		5;
-
 
111
	constant integer TOK_PLAYLIST =		6;
-
 
112
 
106
 
-
 
107
	constant char TOK_TXT_NONE[] =			'NONE';
-
 
108
	constant char TOK_TXT_TITLE[] =			'TITLE';
-
 
109
	constant char TOK_TXT_ARTIST[] =		'ARTIST';
-
 
110
	constant char TOK_TXT_ALBUM[] =			'ALBUM';
-
 
111
	constant char TOK_TXT_GENRE[] =			'GENRE';
-
 
112
	constant char TOK_TXT_QUEUE[] =			'QUEUE';
-
 
113
	constant char TOK_TXT_PLAYLIST[] =		'PLAYLIST';
-
 
114
 
-
 
115
	constant integer TOK_NONE =				0;
-
 
116
	constant integer TOK_TITLE =			1;
-
 
117
	constant integer TOK_ARTIST =			2;
-
 
118
	constant integer TOK_ALBUM =			3;
-
 
119
	constant integer TOK_GENRE =			4;
-
 
120
	constant integer TOK_QUEUE =			5;
-
 
121
	constant integer TOK_PLAYLIST =			6;
-
 
122
 
-
 
123
	constant integer TODO_USER_SELECT = 		1;		// select a user
-
 
124
	constant integer TODO_USER_LIST_PLAYLIST =	2;		// List the playlist
-
 
125
	constant integer TODO_USER_SAVE_PLAYLIST =	3;		// Save queue to playlist
-
 
126
	constant integer TODO_USER_PLAYLIST_QUEUE = 4;		// Move a playlist to the queue
-
 
127
	
113
	constant integer nNavigation[] =
128
	constant integer nNavigation[] =
114
	{
129
	{
115
		BTN_SAVE,
130
		BTN_SAVE,
116
		BTN_DELETE,
131
		BTN_DELETE,
117
		BTN_NOW_PLAYING,
132
		BTN_NOW_PLAYING,
-
 
133
		BTN_QUEUE,
118
		BTN_TITLE,
134
		BTN_TITLE,
119
		BTN_ARTIST,
135
		BTN_ARTIST,
120
		BTN_GENRE,
136
		BTN_GENRE,
121
		BTN_ALBUM,
137
		BTN_ALBUM,
122
		BTN_PLAYLIST
138
		BTN_PLAYLIST
Line 147... Line 163...
147
		SFWD,						// Skip forward
163
		SFWD,						// Skip forward
148
		MENU_THUMBS_DN,
164
		MENU_THUMBS_DN,
149
		MENU_THUMBS_UP,
165
		MENU_THUMBS_UP,
150
		MEDIA_RANDOM,
166
		MEDIA_RANDOM,
151
		MEDIA_REPEAT,
167
		MEDIA_REPEAT,
152
		MENU_BACK
168
		MENU_BACK,
-
 
169
		BTN_RETURN
-
 
170
	};
-
 
171
 
-
 
172
	constant integer nBtnUser[] =
-
 
173
	{
-
 
174
		BTN_DETAIL_BACK,
-
 
175
		BTN_USER_OK,
-
 
176
		BTN_USER_CANCEL,
-
 
177
		TEXT_INPUT_UNAME,
-
 
178
		TEXT_INPUT_PLAYLIST
153
	};
179
	};
154
 
180
 
155
	constant integer nLines[] =
181
	constant integer nLines[] =
156
	{
182
	{
157
		BTN_LINE1_PIC,
183
		BTN_LINE1_PIC,
Line 197... Line 223...
197
		sIconPlaylist
223
		sIconPlaylist
198
	};
224
	};
199
 
225
 
200
DEFINE_VARIABLE
226
DEFINE_VARIABLE
201
	volatile integer nStart;				// Index position of current position in list.
227
	volatile integer nStart;				// Index position of current position in list.
-
 
228
	volatile integer nOldStart;				// Saves the previous value of nStart if a folder is opened
202
	volatile integer nTotal;				// Total number of data
229
	volatile integer nTotal;				// Total number of data
203
	volatile integer nPage;					// The type of the page: TOK_TITLE, ...
230
	volatile integer nPage;					// The type of the page: TOK_TITLE, ...
204
	volatile integer nPlayStatus;			// Status of the player
231
	volatile integer nPlayStatus;			// Status of the player
205
	volatile ST_SONG stSong[MAX_LINES];		// The register of currently showed songs
232
	volatile ST_SONG stSong[MAX_LINES];		// The register of currently showed songs
206
	volatile integer nSongIdx;				// The index of the song pointer
233
	volatile integer nSongIdx;				// The index of the song pointer
207
	volatile char sActPlaylist[128];		// The name of the actual playlist
234
	volatile char    sActPlaylist[128];		// The name of the actual playlist
208
	volatile integer nLastPressedLine;		// The number of the line pressed last
235
	volatile integer nLastPressedLine;		// The number of the line pressed last
209
	volatile integer nLastPressedMenu;		// The number of the menu line pressed last
236
	volatile integer nLastPressedMenu;		// The number of the menu line pressed last
210
	volatile integer nKeyboard[50];			// 1 = Keyboard active
237
	volatile integer nKeyboard[50];			// 1 = Keyboard active
211
	volatile integer sActUser[128];			// The name of the actual loaded user
238
	volatile char    sActUser[128];			// The name of the actual loaded user
-
 
239
	volatile char    sInputUser[128];		// Username in user dialog popup
-
 
240
	volatile char    sInputPlaylist[128];	// Name of playlist in user dialog popup
212
	volatile integer nFolder;				// 0 = Top level of list, 1 = Folder opened
241
	volatile integer nFolder;				// 0 = Top level of list, 1 = Folder opened
213
	volatile integer sActFolder[128];		// The name of the actual selected folder
242
	volatile char    sActFolder[128];		// The name of the actual selected folder
-
 
243
	volatile integer nScrollbarPressed[50];	// 1 = User is sliding the scrollbar
-
 
244
	volatile integer nScrollbarLvl;			// The level of the scrollbar when user releases the scrollbar
-
 
245
	volatile integer nRepeat;				// 1 = repeat on, 0 = repeat off
214
	volatile integer nSaveToFolder;			// 1 = Flag for keyboard to save to entered folder
246
	volatile integer nRandom;				// 1 = random on, 0 = random off
215
 
-
 
-
 
247
	volatile integer nToDo;					// What to do next
216
	volatile char _strTok[10][256];
248
	volatile char _strTok[10][256];
217
 
249
 
218
 
250
 
219
// DecodeURL: Undo URL encoding on a data segment as necessary for CLI protocol
251
// DecodeURL: Undo URL encoding on a data segment as necessary for CLI protocol
220
//	(Note: Distructive for input; copy str before call if needed)
252
//	(Note: Distructive for input; copy str before call if needed)
Line 246... Line 278...
246
}
278
}
247
 
279
 
248
define_function char[1024] EncodeURL(char oldStr[])
280
define_function char[1024] EncodeURL(char oldStr[])
249
{
281
{
250
stack_var char str[1024];
282
stack_var char str[1024];
-
 
283
stack_var char replace[64];
251
stack_var integer len;
284
stack_var integer len;
252
stack_var integer i;
285
stack_var integer i;
-
 
286
stack_var integer j;
-
 
287
stack_var integer flag;
253
 
288
 
-
 
289
	replace = "':;<>"% ',$27";
254
	len = length_string(oldStr);
290
	len = length_string(oldStr);
255
	str = '';
291
	str = '';
256
 
292
 
257
	for (i = 1; i <= len; i++)
293
	for (i = 1; i <= len; i++)
258
	{
294
	{
-
 
295
		flag = false;
-
 
296
 
-
 
297
		for (j = 1; j <= length_string(replace); j++)
-
 
298
		{
259
		if (oldStr[i] == ':' || oldStr[i] == ';')
299
			if (oldStr[i] == replace[j])
-
 
300
			{
260
			str = "str,'%',format('%02X', oldStr[i])";
301
				str = "str,'%',format('%02X', oldStr[i])";
-
 
302
				flag = true;
-
 
303
				break;
261
		else
304
			}
-
 
305
		}
-
 
306
 
-
 
307
		if (!flag)
262
			str = "str,mid_string(oldStr, i, 1)";
308
			str = "str,mid_string(oldStr, i, 1)";
263
	}
309
	}
264
 
310
 
265
	return str;
311
	return str;
266
}
312
}
Line 268... Line 314...
268
define_function integer strtok(char str[], char tok[])
314
define_function integer strtok(char str[], char tok[])
269
{
315
{
270
stack_var integer i;
316
stack_var integer i;
271
stack_var integer idx;
317
stack_var integer idx;
272
 
318
 
273
	idx = 0;
319
	idx = 1;
-
 
320
 
-
 
321
	for (i = 1; i <= 10; i++)
-
 
322
		_strTok[i] = '';
-
 
323
 
274
	i = find_string(str, tok, 1);
324
	i = find_string(str, tok, 1);
275
 
325
 
276
	while (i && idx <= 10)
326
	while (i && idx <= 10)
277
	{
327
	{
278
		idx++;
328
		if (i > 1)
279
		_strTok[idx] = left_string(str, i - length_string(tok));
329
			_strTok[idx] = left_string(str, i - length_string(tok));
-
 
330
		else
-
 
331
			_strTok[idx] = '';
-
 
332
 
280
		remove_string(str, tok, 1);
333
		remove_string(str, tok, 1);
-
 
334
		i = find_string(str, tok, 1);
-
 
335
		idx++;
281
	}
336
	}
282
 
337
 
-
 
338
	if (idx <= 10)
-
 
339
		_strTok[idx] = str;
-
 
340
 
283
	return idx;
341
	return idx;
284
}
342
}
285
 
343
 
286
define_function char[256] getStrTok(integer idx)
344
define_function char[256] getStrTok(integer idx)
287
{
345
{
Line 313... Line 371...
313
 
371
 
314
	if (pos > MAX_LINES)
372
	if (pos > MAX_LINES)
315
		return;
373
		return;
316
 
374
 
317
	sHost = IP;
375
	sHost = IP;
318
	sPath = 'mdb';
376
	sPath = path;
319
	nType = 0;			// 0 = HTTP, 1 = FTP
377
	nType = 0;			// 0 = HTTP, 1 = FTP
320
	send_command dvTPs,"'^SHO-',itoa(300+pos),',1'";
378
	send_command dvTPs,"'^SHO-',itoa(300+pos),',1'";
321
 
379
 
322
	if (!length_string(sFile))
380
	if (!length_string(sFile))
323
	{
381
	{
Line 340... Line 398...
340
}
398
}
341
 
399
 
342
define_function clearPage()
400
define_function clearPage()
343
{
401
{
344
	clearAllLogos();
402
	clearAllLogos();
345
	send_command dvTPs,"'^TXT-',itoa(BTN_LINE1_LINE),'.',itoa(BTN_LINE1_LINE+MAX_LINES-1)',0,'";
403
	send_command dvTPs,"'^TXT-',itoa(BTN_LINE1_LINE),'.',itoa(BTN_LINE1_LINE+MAX_LINES-1),',0,'";
346
}
404
}
347
 
405
 
348
define_function char[32] requestActualPage()
406
define_function char[32] requestActualPage()
349
{
407
{
350
stack_var char sPage[32];
408
stack_var char sPage[32];
Line 434... Line 492...
434
		bis = st + MAX_LINES - 1;
492
		bis = st + MAX_LINES - 1;
435
		send_command dvTPs, "'^TXT-',itoa(TEXT_PROGRES),',0,',itoa(st),' to ',itoa(bis),' of ',itoa(tot)";
493
		send_command dvTPs, "'^TXT-',itoa(TEXT_PROGRES),',0,',itoa(st),' to ',itoa(bis),' of ',itoa(tot)";
436
	}
494
	}
437
	else
495
	else
438
		send_command dvTPs, "'^TXT-',itoa(TEXT_PROGRES),',0,'";
496
		send_command dvTPs, "'^TXT-',itoa(TEXT_PROGRES),',0,'";
-
 
497
 
-
 
498
	// Scrollbar initialisieren
-
 
499
	if (tot && st <= tot)
-
 
500
		bis = type_cast(100.0 / tot * st);
-
 
501
	else
-
 
502
		bis = 0;
-
 
503
 
-
 
504
	send_level dvTPs, LVL_SCROLLBAR, bis;
439
}
505
}
440
 
506
 
441
define_function displaySong(integer idx)
507
define_function displaySong(integer idx)
442
{
508
{
443
	if (!idx || idx > MAX_LINES)
509
	if (!idx || idx > MAX_LINES)
444
		return;
510
		return;
445
 
511
 
446
	send_command dvTPs, "'^TXT-',itoa(BTN_LINE1_LINE+idx-1),',0,',stSong[idx].sTitle,$0d$0a,stSong[idx].sArtist";
512
	send_command dvTPs, "'^TXT-',itoa(BTN_LINE1_LINE+idx-1),',0,',stSong[idx].sTitle,$0d,$0a,stSong[idx].sArtist";
447
}
513
}
448
 
514
 
449
define_function askMenuList()
515
define_function askMenuList()
450
{
516
{
451
	switch(nPage)
517
	switch(nPage)
Line 508... Line 574...
508
			pan = get_last(dvTPs);
574
			pan = get_last(dvTPs);
509
 
575
 
510
			switch(nPage)
576
			switch(nPage)
511
			{
577
			{
512
				case TOK_TITLE:
578
				case TOK_TITLE:
-
 
579
				case TOK_PLAYLIST:
-
 
580
					send_command dvTPs[pan], "'@PPN-',sPopupAudio";
-
 
581
					send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
582
				break;
-
 
583
 
513
				case TOK_ALBUM:
584
				case TOK_ALBUM:
514
				case TOK_ARTIST:
585
				case TOK_ARTIST:
515
				case TOK_GENRE:
586
				case TOK_GENRE:
516
				case TOK_PLAYLIST:
-
 
517
					send_command dvTPs[pan], "'@PPN-',sPopupAudio";
587
					send_command dvTPs[pan], "'@PPN-',sPopupAudio";
518
					send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
588
					send_command vdvMDB, "'FOLDER:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
519
				break;
589
				break;
520
 
590
 
521
				case TOK_QUEUE:
591
				case TOK_QUEUE:
522
					send_command dvTPs[pan], "'@PPN-',sPopupList";
592
					send_command dvTPs[pan], "'@PPN-',sPopupList";
523
					send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
593
					send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
524
				break;
594
				break;
-
 
595
				
-
 
596
				default:
-
 
597
					send_command dvTPs[pan], "'@PPN-',sPopupAudio";
-
 
598
					nStart = 1;
-
 
599
					send_command vdvMDB, "'LIST:TITLE:',itoa(nStart),':',itoa(MAX_LINES),';'";
525
			}
600
			}
526
		}
601
		}
527
	}
602
	}
528
 
603
 
529
	/*
604
	/*
Line 531... Line 606...
531
	 */
606
	 */
532
	button_event[dvTPs, nNavigation]
607
	button_event[dvTPs, nNavigation]
533
	{
608
	{
534
		push:
609
		push:
535
		{
610
		{
-
 
611
		stack_var integer pan;
-
 
612
 
-
 
613
			pan = get_last(dvTPs);
-
 
614
 
536
			switch(BUTTON.INPUT.CHANNEL)
615
			switch(BUTTON.INPUT.CHANNEL)
537
			{
616
			{
-
 
617
				case BTN_TITLE:		
538
				case BTN_TITLE:		send_command vdvMDB, "'LIST:TITLE:1:',itoa(MAX_LINES),';'"; nFolder = 0; break;
618
					send_command vdvMDB, "'LIST:TITLE:1:',itoa(MAX_LINES),';'"; 
-
 
619
					nFolder = 0; 
-
 
620
					nStart = 1;
-
 
621
					nPage = TOK_TITLE;
-
 
622
				break;
-
 
623
 
-
 
624
				case BTN_ARTIST:	
539
				case BTN_ARTIST:	send_command vdvMDB, "'LIST:ARTIST:1:',itoa(MAX_LINES),';'"; nFolder = 0; break;
625
					send_command vdvMDB, "'FOLDER:ARTIST:1:',itoa(MAX_LINES),';'"; 
-
 
626
					nFolder = 0; 
-
 
627
					nStart = 1;
-
 
628
					nPage = TOK_ARTIST;
-
 
629
				break;
-
 
630
 
-
 
631
				case BTN_ALBUM:		
540
				case BTN_ALBUM:		send_command vdvMDB, "'LIST:ALBUM:1:',itoa(MAX_LINES),';'"; nFolder = 0; break;
632
					send_command vdvMDB, "'FOLDER:ALBUM:1:',itoa(MAX_LINES),';'"; 
-
 
633
					nFolder = 0; 
-
 
634
					nStart = 1;
-
 
635
					nPage = TOK_ALBUM;
-
 
636
				break;
-
 
637
 
-
 
638
				case BTN_GENRE:		
541
				case BTN_GENRE:		send_command vdvMDB, "'LIST:GENRE:1:',itoa(MAX_LINES),';'"; nFolder = 0; break;
639
					send_command vdvMDB, "'FOLDER:GENRE:1:',itoa(MAX_LINES),';'"; 
-
 
640
					nFolder = 0; 
-
 
641
					nStart = 1;
-
 
642
					nPage = TOK_GENRE;
-
 
643
				break;
-
 
644
 
-
 
645
				case BTN_QUEUE: 
542
				case BTN_NOW_PLAYING: send_command vdvMDB, "'LIST:QUEUE:1:',itoa(MAX_LINES),';'"; nFolder = 0; break;
646
					send_command vdvMDB, "'LIST:QUEUE:1:',itoa(MAX_LINES),';'"; 
-
 
647
					nFolder = 0; 
-
 
648
					nStart = 1;
-
 
649
					nPage = TOK_QUEUE;
-
 
650
				break;
-
 
651
 
-
 
652
				case BTN_PLAYLIST:
-
 
653
					if (!length_string(sActUser))
-
 
654
					{
-
 
655
						send_command dvTPs[pan], "'@PPN-',sPopupSelUser";
-
 
656
						send_command dvTPs[pan], "'@AKB-',sActUser,';Enter name of user'";
-
 
657
						nKeyboard[pan] = TEXT_INPUT_UNAME;
-
 
658
						nToDo = TODO_USER_SELECT;
-
 
659
					}
-
 
660
					else
-
 
661
					{
-
 
662
						nFolder = 0;
-
 
663
						nStart = 1;
-
 
664
						nPage = TOK_PLAYLIST;
-
 
665
						send_command vdvMDB, "'LIST:PLAYLIST:1:',itoa(MAX_LINES),';'";
-
 
666
					}
-
 
667
				break;
-
 
668
 
-
 
669
				case BTN_NOW_PLAYING:
-
 
670
					if (nPlayStatus == PLAYER_PLAY || nPlayStatus == PLAYER_PAUSE)
-
 
671
						send_command dvTPs, "'@PPN-',sPopupDetail";
-
 
672
				break;
-
 
673
 
-
 
674
				case BTN_SAVE:
-
 
675
					send_command dvTPs[pan], "'@PPN-',sPopupSelUser";
-
 
676
					sInputUser = sActUser;
-
 
677
					sInputPlaylist = '';
-
 
678
					send_command dvTPs[pan], "'^TXT-',itoa(TEXT_INPUT_UNAME),',0,',sActUser";
-
 
679
					send_command dvTPs[pan], "'^TXT-',itoa(TEXT_INPUT_UNAME),',0,'";
-
 
680
					send_command dvTPs[pan], "'@AKB-',sActPlaylist,';Enter name of playlist'";
-
 
681
					nToDo = TODO_USER_SAVE_PLAYLIST;
-
 
682
					nKeyboard[pan] = TEXT_INPUT_PLAYLIST;
-
 
683
				break;
-
 
684
 
-
 
685
				case BTN_DELETE:
-
 
686
					send_command vdvMDB, "'DELETE:QUEUE:-1;'";
-
 
687
				break;
543
			}
688
			}
544
		}
689
		}
545
	}
690
	}
546
 
691
 
547
	/*
692
	/*
Line 555... Line 700...
555
		push:
700
		push:
556
		{
701
		{
557
			switch(BUTTON.INPUT.CHANNEL)
702
			switch(BUTTON.INPUT.CHANNEL)
558
			{
703
			{
559
				case PLAY:			send_command vdvMDB, 'PLAY;';
704
				case PLAY:			send_command vdvMDB, 'PLAY;';
560
				case PAUSE:			send_command vdvMDB, 'PAUSE;';
705
				case PAUSE:			send_command vdvMDB, 'PLAYPAUSE;';
561
				case STOP:			send_command vdvMDB, 'STOP;';
706
				case STOP:			send_command vdvMDB, 'STOP;';
562
				case FFWD:			send_command vdvMDB, 'FORWARD;';
707
				case FFWD:			send_command vdvMDB, 'FORWARD;';
563
				case REW:			send_command vdvMDB, 'REWIND;';
708
				case REW:			send_command vdvMDB, 'REWIND;';
564
				case SREV:			send_command vdvMDB, 'SKIPREW;';
709
				case SREV:			send_command vdvMDB, 'SKIPREW;';
565
				case SFWD:			send_command vdvMDB, 'SKIPFWD;';
710
				case SFWD:			send_command vdvMDB, 'SKIPFWD;';
566
				case MEDIA_RANDOM:	send_command vdvMDB, 'RANDOM;';
711
				case MEDIA_RANDOM:	send_command vdvMDB, 'RANDOM;';
567
				case MEDIA_REPEAT:	send_command vdvMDB, 'REPEAT;';
712
				case MEDIA_REPEAT:	send_command vdvMDB, 'REPEAT;';
568
 
713
 
569
				case MENU_THUMBS_DN:
714
				case MENU_THUMBS_UP:
570
					if (nStart > MAX_LINES)
715
					if (nStart > MAX_LINES)
571
					{
716
					{
572
						nStart = nStart - MAX_LINES;
717
						nStart = nStart - MAX_LINES;
-
 
718
 
-
 
719
						if (nPage == TOK_TITLE || nPage == TOK_QUEUE || nPage == TOK_PLAYLIST)
573
						send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
720
							send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
721
						else
-
 
722
							send_command vdvMDB, "'FOLDER:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
574
					}
723
					}
575
				break;
724
				break;
576
 
725
 
577
				case MENU_THUMBS_UP:
726
				case MENU_THUMBS_DN:
578
					if (nTotal && (nStart+MAX_LINES) <= nTotal)
727
					if (nTotal && (nStart+MAX_LINES) <= nTotal)
579
					{
728
					{
580
						nStart = nStart + MAX_LINES;
729
						nStart = nStart + MAX_LINES;
-
 
730
 
-
 
731
						if (nPage == TOK_TITLE || nPage == TOK_QUEUE || nPage == TOK_PLAYLIST)
581
						send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
732
							send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
733
						else
-
 
734
							send_command vdvMDB, "'FOLDER:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
582
					}
735
					}
583
				break;
736
				break;
584
 
737
 
585
				case MENU_BACK:
738
				case MENU_BACK:
-
 
739
				case BTN_RETURN:
586
					if (nFolder)
740
					if (nFolder)
-
 
741
					{
-
 
742
						nStart = nOldStart;
-
 
743
						nFolder = 0;
-
 
744
					}
-
 
745
 
-
 
746
					if (nPage == TOK_TITLE || nPage == TOK_QUEUE || nPage == TOK_PLAYLIST)
587
						send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
747
						send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
748
					else
-
 
749
						send_command vdvMDB, "'FOLDER:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
588
				break;
750
				break;
589
			}
751
			}
590
		}
752
		}
591
 
753
 
592
		hold[2,repeat]:
754
		hold[2,repeat]:
Line 683... Line 845...
683
					{
845
					{
684
						if (nPlayStatus == PLAYER_PLAY || nPlayStatus == PLAYER_PAUSE)
846
						if (nPlayStatus == PLAYER_PLAY || nPlayStatus == PLAYER_PAUSE)
685
							send_command vdvMDB, 'STOP;';
847
							send_command vdvMDB, 'STOP;';
686
 
848
 
687
						send_command vdvMDB, 'DELETE:QUEUE:-1;';
849
						send_command vdvMDB, 'DELETE:QUEUE:-1;';
-
 
850
						
-
 
851
						if (nPage == TOK_TITLE)
-
 
852
							send_command vdvMDB, "'PLAY:ID:',itoa(stSong[nLastPressedLine].nID),';'";
-
 
853
						else
688
						send_command vdvMDB, "'PLAY:',requestActualPage(),':',getPageLine(nLastPressedLine),';'";
854
							send_command vdvMDB, "'PLAY:',requestActualPage(),':',stSong[nLastPressedLine].sTitle,';'";
689
					}
855
					}
690
					else if (nPage == TOK_PLAYLIST)
856
					else if (nPage == TOK_PLAYLIST)
691
					{
857
					{
692
						if (length_string(sActUser) && length_string(sActPlaylist))
858
						if (length_string(sActUser) && length_string(sActPlaylist))
693
						{
859
						{
Line 702... Line 868...
702
						send_command vdvMDB, "'PLAY:QUEUE:',itoa(nStart+nLastPressedLine-1),';'";
868
						send_command vdvMDB, "'PLAY:QUEUE:',itoa(nStart+nLastPressedLine-1),';'";
703
				break;
869
				break;
704
 
870
 
705
				case BTN_MENU2:
871
				case BTN_MENU2:
706
					if (nPage != TOK_PLAYLIST && nPage != TOK_QUEUE)	// Add to queue
872
					if (nPage != TOK_PLAYLIST && nPage != TOK_QUEUE)	// Add to queue
-
 
873
					{
-
 
874
						if (nPage == TOK_TITLE)
-
 
875
							send_command vdvMDB, "'ADD:ID:',itoa(stSong[nLastPressedLine].nID),';'";
-
 
876
						else
707
						send_command vdvMDB, "'ADD:',requestActualPage(),':',EncodeURL(getPageLine(nLastPressedLine)),';'";
877
							send_command vdvMDB, "'ADD:',requestActualPage(),':',stSong[nLastPressedLine].sTitle,';'";
-
 
878
					}
708
					else if (nPage == TOK_PLAYLIST)
879
					else if (nPage == TOK_PLAYLIST)
709
						send_command vdvMDB, "'ADD:PLAYLIST:',EncodeURL(sActPlaylist),';'";
880
						send_command vdvMDB, "'ADD:PLAYLIST:',EncodeURL(sActPlaylist),';'";
710
					else if (nPage == TOK_QUEUE)
881
					else if (nPage == TOK_QUEUE)
711
					{
882
					{
712
						send_command dvTPs[pan], "'@PPN-',sPopupSelUser";
883
						send_command dvTPs[pan], "'@PPN-',sPopupSelUser";
-
 
884
						sInputUser = sActUser;
-
 
885
						sInputPlaylist = '';
713
						send_command dvTPs[pan], "'^TXT-',itoa(TEXT_INPUT_UNAME),',0,',sActUser";
886
						send_command dvTPs[pan], "'^TXT-',itoa(TEXT_INPUT_UNAME),',0,',sActUser";
714
						send_command dvTPs[pan], "'@AKB-',sActPlaylist,';Enter name of playlist'";
887
						send_command dvTPs[pan], "'@AKB-',sActPlaylist,';Enter name of playlist'";
715
						nSaveToFolder = nLastPressedLine;
888
						nToDo = TODO_USER_PLAYLIST_QUEUE;
716
						nKeyboard[pan] = TEXT_INPUT_PLAYLIST;
889
						nKeyboard[pan] = TEXT_INPUT_PLAYLIST;
717
					}
890
					}
718
				break;
891
				break;
719
				
892
				
720
				case BTN_MENU3:
893
				case BTN_MENU3:
721
					if (nPage != TOK_PLAYLIST && nPage != TOK_QUEUE)	// Open folder
894
					if (nPage != TOK_PLAYLIST && nPage != TOK_QUEUE)	// Open folder
722
					{
895
					{
723
						sActFolder = getPageLine(nLastPressedLine);
896
						sActFolder = stSong[nLastPressedLine].sTitle;	// Get name of folder
724
						nFolder = true;
897
						nFolder = true;									// Set marker for folder
-
 
898
						nOldStart = nStart;								// Save current position
-
 
899
						nStart = 1;										// Reset start position
725
						send_command vdvMDB, "'LISTFOLDER:',requestActualPage(),':',EncodeURL(getPageLine(nLastPressedLine)),':1:',itoa(MAX_LINES),';'";
900
						send_command vdvMDB, "'LISTFOLDER:',requestActualPage(),':',stSong[nLastPressedLine].sTitle,':1:',itoa(MAX_LINES),';'";
726
					}
901
					}
727
					else if (nPage == TOK_PLAYLIST)
902
					else if (nPage == TOK_PLAYLIST)
728
					{
903
					{
-
 
904
						nOldStart = nStart;
-
 
905
						nFolder = 1;
-
 
906
						nStart = 1;
-
 
907
						send_command vdvMDB, "'PLIST:',EncodeURL(sActUser),':',EncodeURL(stSong[nLastPressedLine].sTitle),':',itoa(nStart),':',itoa(MAX_LINES),';'";
729
					}
908
					}
730
					else if (nPage == TOK_QUEUE)
909
					else if (nPage == TOK_QUEUE)
731
						send_command vdvMDB, "'DELETE:QUEUE:',itoa(stSong[nLastPressedLine].nID),';'";
910
						send_command vdvMDB, "'DELETE:QUEUE:',itoa(stSong[nLastPressedLine].nID),';'";
732
				break;
911
				break;
733
			}
912
			}
-
 
913
 
-
 
914
			if (nPage != TOK_QUEUE)
-
 
915
				send_command dvTPs, "'@PPN-',sPopupAudio";
-
 
916
			else
-
 
917
				send_command dvTPs, "'@PPN-',sPopupList";
734
		}
918
		}
735
	}
919
	}
736
 
920
 
737
	button_event[dvTPs,TEXT_INPUT_UNAME]
921
	button_event[dvTPs,nBtnUser]
738
	{
922
	{
739
		push:
923
		push:
740
		{
924
		{
741
			stack_var integer pan;
925
			stack_var integer pan;
742
 
926
 
743
			pan = get_last(dvTPs);
927
			pan = get_last(dvTPs);
744
 
928
 
745
			if (!nKeyboard[pan])
929
			switch(BUTTON.INPUT.CHANNEL)
746
			{
930
			{
-
 
931
				case TEXT_INPUT_UNAME:
-
 
932
					if (!nKeyboard[pan])
-
 
933
					{
747
				nKeyboard[pan] = TEXT_INPUT_UNAME;
934
						nKeyboard[pan] = TEXT_INPUT_UNAME;
748
				send_command dvTPs[pan],"'@AKB-',sActUser,';Enter user name'";
935
						send_command dvTPs[pan],"'@AKB-',sActUser,';Enter user name'";
749
			}
936
					}
750
		}
937
				break;
751
	}
-
 
752
 
938
 
753
	button_event[dvTPs,TEXT_INPUT_PLAYLIST]
939
				case TEXT_INPUT_PLAYLIST:
754
	{
940
					if (!nKeyboard[pan])
755
		push:
941
					{
-
 
942
						nKeyboard[pan] = TEXT_INPUT_PLAYLIST;
-
 
943
						send_command dvTPs[pan],"'@AKB-',sActPlaylist,';Enter name of playlist'";
756
		{
944
					}
757
			stack_var integer pan;
945
				break;
758
 
946
 
759
			pan = get_last(dvTPs);
947
				case BTN_USER_OK:
-
 
948
					send_command dvTPs[pan],"'@PPF-',sPopupSelUser";
760
 
949
 
761
			if (!nKeyboard[pan])
950
					switch(nToDo)
762
			{
951
					{
-
 
952
						case TODO_USER_SELECT:
-
 
953
							sActUser = sInputUser;
-
 
954
							send_command vdvMDB, "'USER:',EncodeURL(sInputUser),':;'";
-
 
955
						break;
-
 
956
 
763
				nKeyboard[pan] = TEXT_INPUT_PLAYLIST;
957
						case TODO_USER_LIST_PLAYLIST:
-
 
958
							sActPlaylist = sInputPlaylist;
-
 
959
							nOldStart = nStart;
-
 
960
							nFolder = 1;
-
 
961
							nStart = 1;
-
 
962
							send_command vdvMDB, "'PLIST:',EncodeURL(sActUser),':',EncodeURL(stSong[nLastPressedLine].sTitle),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
963
						break;
-
 
964
 
-
 
965
						case TODO_USER_SAVE_PLAYLIST:
-
 
966
							sActUser = sInputUser;
-
 
967
							sActPlaylist = sInputPlaylist;
-
 
968
 
-
 
969
							if (length_string(sActUser) && length_string(sActPlaylist))
-
 
970
								send_command vdvMDB, "'SAVEQUEUE:',EncodeURL(sActUser),':',EncodeURL(sActPlaylist),';'";
-
 
971
						break;
-
 
972
 
-
 
973
						case TODO_USER_PLAYLIST_QUEUE:
-
 
974
							sActUser = sInputUser;
-
 
975
							sActPlaylist = sInputPlaylist;
-
 
976
 
-
 
977
							if (length_string(sActUser) && length_string(sActPlaylist))
-
 
978
								send_command vdvMDB, "'ADD:PLAYLIST:',EncodeURL(sActPlaylist),';'";
-
 
979
						break;
-
 
980
					}
-
 
981
 
-
 
982
					nToDo = 0;
-
 
983
				break;
-
 
984
 
-
 
985
				case BTN_USER_CANCEL:
-
 
986
					nToDo = 0;
764
				send_command dvTPs[pan],"'@AKB-',sActPlaylist,';Enter name of playlist'";
987
					send_command dvTPs[pan],"'@PPF-',sPopupSelUser";
-
 
988
				break;
-
 
989
 
-
 
990
				case BTN_DETAIL_BACK:
-
 
991
					if (nPage == TOK_QUEUE)
-
 
992
						send_command dvTPs,"'@PPN-',sPopupAudio";
-
 
993
					else
-
 
994
						send_command dvTPs,"'@PPN-',sPopupList";
-
 
995
				break;
765
			}
996
			}
766
		}
997
		}
767
	}
998
	}
768
 
999
 
769
	/*
1000
	/*
Line 791... Line 1022...
791
					 * This is send by the player whenever the UI should
1022
					 * This is send by the player whenever the UI should
792
					 * display a list with song details.
1023
					 * display a list with song details.
793
					 * The correct popup must be displayed and the contents
1024
					 * The correct popup must be displayed and the contents
794
					 * should be filled with the data from the player.
1025
					 * should be filled with the data from the player.
795
					 */
1026
					 */
796
					active(find_string(buf, 'LIST:', 1)):
1027
					active(find_string(buf, 'LINE:', 1)):
797
					{
1028
					{
798
					stack_var char sPg[32];
1029
					stack_var char sPg[32];
799
					stack_var integer nSongID;
1030
					stack_var integer nSongID;
800
					stack_var integer nLine;
1031
					stack_var integer nLine;
801
					stack_var integer anz;
1032
					stack_var integer anz;
802
					stack_var integer i;
1033
					stack_var integer i;
803
 
1034
 
804
						remove_string(buf, 'LIST:', 1);
1035
						remove_string(buf, 'LINE:', 1);
805
						anz = strtok(buf, ':');
1036
						anz = strtok(buf, ':');
806
						
1037
 
807
						for (i = 1; i <= anz; i++)
1038
						for (i = 1; i <= anz; i++)
808
						{
1039
						{
809
							switch (i)
1040
							switch (i)
810
							{
1041
							{
811
								case 1: sPg = getStrTok(i);
1042
								case 1: sPg = getStrTok(i);
812
								case 2: nSongID = atoi(getStrTok(i));
1043
								case 2: nSongID = atoi(getStrTok(i));
813
								case 3: nLine = atoi(getStrTok(i));
1044
								case 3: nLine = atoi(getStrTok(i));
814
								case 4: stSong[nLine].sTitle = getStrTok(i);
1045
								case 4: stSong[nLine].sTitle = DecodeURL(getStrTok(i));
815
								case 5: stSong[nLine].sArtist = getStrTok(i);
1046
								case 5: stSong[nLine].sArtist = DecodeURL(getStrTok(i));
816
								case 6: stSong[nLine].sAlbum = getStrTok(i);
1047
								case 6: stSong[nLine].sAlbum = DecodeURL(getStrTok(i));
817
								case 7: stSong[nLine].sGenre = getStrTok(i);
1048
								case 7: stSong[nLine].sGenre = DecodeURL(getStrTok(i));
818
								case 8: stSong[nLine].sCover = getStrTok(i);
1049
								case 8: stSong[nLine].sCover = DecodeURL(getStrTok(i));
819
							}
1050
							}
820
						}
1051
						}
821
 
1052
 
822
						stSong[nLine].nID = nSongID;
1053
						stSong[nLine].nID = nSongID;
823
 
1054
 
Line 828... Line 1059...
828
						}
1059
						}
829
 
1060
 
830
						displaySong(nLine);
1061
						displaySong(nLine);
831
					}
1062
					}
832
 
1063
 
-
 
1064
					active(find_string(buf, 'FOLDER:', 1)):
-
 
1065
					{
-
 
1066
					stack_var char sPg[32];
-
 
1067
					stack_var integer nLine;
-
 
1068
					stack_var integer anz;
-
 
1069
					stack_var integer i;
-
 
1070
 
-
 
1071
						remove_string(buf, 'FOLDER:', 1);
-
 
1072
						anz = strtok(buf, ':');
-
 
1073
 
-
 
1074
						for (i = 1; i <= anz; i++)
-
 
1075
						{
-
 
1076
							switch(i)
-
 
1077
							{
-
 
1078
								case 1: sPg = getStrTok(i);
-
 
1079
								case 2: nLine = atoi(getStrTok(i));
-
 
1080
								case 3: stSong[nLine].sTitle = DecodeURL(getStrTok(i));
-
 
1081
								case 4: stSong[nLine].sCover = DecodeURL(getStrTok(i));
-
 
1082
							}
-
 
1083
						}
-
 
1084
 
-
 
1085
						stSong[nLine].nID = 0;
-
 
1086
						stSong[nLine].sAlbum = '';
-
 
1087
						stSong[nLine].sArtist = '';
-
 
1088
						stSong[nLine].sGenre = '';
-
 
1089
 
-
 
1090
						if (nLine == 1)
-
 
1091
						{
-
 
1092
							setActualPage(sPg);
-
 
1093
							clearPage();
-
 
1094
						}
-
 
1095
 
-
 
1096
						displaySong(nLine);
-
 
1097
					}
-
 
1098
 
-
 
1099
					active(find_string(buf, 'PLAYLIST:', 1)):
-
 
1100
					{
-
 
1101
					stack_var integer nLine;
-
 
1102
					stack_var integer anz;
-
 
1103
					stack_var integer i;
-
 
1104
 
-
 
1105
						remove_string(buf, 'PLAYLIST:', 1);
-
 
1106
						anz = strtok(buf, ':');
-
 
1107
 
-
 
1108
						for (i = 1; i <= anz; i++)
-
 
1109
						{
-
 
1110
							switch(i)
-
 
1111
							{
-
 
1112
								case 1: nLine = atoi(getStrTok(i));
-
 
1113
								case 2: sActUser = DecodeURL(getStrTok(i));
-
 
1114
								case 3: stSong[nLine].sTitle = DecodeURL(getStrTok(i));
-
 
1115
							}
-
 
1116
						}
-
 
1117
 
-
 
1118
						stSong[nLine].nID = 0;
-
 
1119
						stSong[nLine].sAlbum = '';
-
 
1120
						stSong[nLine].sArtist = '';
-
 
1121
						stSong[nLine].sGenre = '';
-
 
1122
 
-
 
1123
						if (nLine == 1)
-
 
1124
						{
-
 
1125
							setActualPage('PLAYLIST');
-
 
1126
							clearPage();
-
 
1127
						}
-
 
1128
 
-
 
1129
						displaySong(nLine);
-
 
1130
					}
-
 
1131
 
-
 
1132
					active(find_string(buf, 'FOLDERNAME:', 1)):
-
 
1133
					{
-
 
1134
						remove_string(buf, 'FOLDERNAME:', 1);
-
 
1135
						sActFolder = buf;
-
 
1136
						nFolder = 1;
-
 
1137
					}
-
 
1138
 
833
					active(find_string(buf, 'PLAYING:', 1)):
1139
					active(find_string(buf, 'PLAYING:', 1)):
834
					{
1140
					{
835
					stack_var integer nSongID;
1141
					stack_var integer nSongID;
836
					stack_var char sTitle[256];
1142
					stack_var char sTitle[256];
837
					stack_var char sArtist[256];
1143
					stack_var char sArtist[256];
Line 856... Line 1162...
856
								case 6: sCover = DecodeURL(getStrTok(i));
1162
								case 6: sCover = DecodeURL(getStrTok(i));
857
							}
1163
							}
858
						}
1164
						}
859
 
1165
 
860
						// Initialize detail fields
1166
						// Initialize detail fields
861
						send_command vdvMDB, "'^TXT-',itoa(TEXT_DETAIL_TITLE),',0,',sTitle";
1167
						send_command dvTPs, "'^TXT-',itoa(TEXT_DETAIL_TITLE),',0,',sTitle";
862
						send_command vdvMDB, "'^TXT-',itoa(TEXT_DETAIL_ARTIST),',0,',sArtist";
1168
						send_command dvTPs, "'^TXT-',itoa(TEXT_DETAIL_ARTIST),',0,',sArtist";
863
						send_command vdvMDB, "'^TXT-',itoa(TEXT_DETAIL_ALBUM),',0,',sAlbum";
1169
						send_command dvTPs, "'^TXT-',itoa(TEXT_DETAIL_ALBUM),',0,',sAlbum";
864
						send_command vdvMDB, "'^TXT-',itoa(TEXT_DETAIL_GENRE),',0,',sGenre";
1170
						send_command dvTPs, "'^TXT-',itoa(TEXT_DETAIL_GENRE),',0,',sGenre";
865
						setLogo(sCover, 0);
1171
						setLogo(sCover, 0);
866
					}
1172
					}
867
 
1173
 
-
 
1174
					active(find_string(buf, 'USER:', 1)):
-
 
1175
					{
-
 
1176
						remove_string(buf, 'USER:', 1);
-
 
1177
						sActUser = DecodeURL(buf);
-
 
1178
					}
-
 
1179
 
868
					active(find_string(buf, 'TOTAL:', 1)):
1180
					active(find_string(buf, 'TOTAL:', 1)):
869
					{
1181
					{
870
						remove_string(buf, 'TOTAL:', 1);
1182
						remove_string(buf, 'TOTAL:', 1);
871
						nTotal = atoi(buf);
1183
						nTotal = atoi(buf);
872
						displayPageInfo(nStart, nTotal);
1184
						displayPageInfo(nStart, nTotal);
Line 877... Line 1189...
877
						remove_string(buf, 'PAGE:', 1);
1189
						remove_string(buf, 'PAGE:', 1);
878
						setActualPage(buf);
1190
						setActualPage(buf);
879
						displayPageInfo(nStart, nTotal);
1191
						displayPageInfo(nStart, nTotal);
880
					}
1192
					}
881
 
1193
 
882
					active(find_string(buf, 'PLAYER:')):
1194
					active(find_string(buf, 'PLAYER:', 1)):
883
					{
1195
					{
884
						remove_string(buf, 'PLAYER:', 1);
1196
						remove_string(buf, 'PLAYER:', 1);
885
 
1197
 
886
						if (buf == 'PLAY')
1198
						if (buf == 'PLAY')
887
						{
1199
						{
Line 911... Line 1223...
911
							off[dvTPs,STOP];
1223
							off[dvTPs,STOP];
912
							off[dvTPs,PAUSE];
1224
							off[dvTPs,PAUSE];
913
						}
1225
						}
914
					}
1226
					}
915
 
1227
 
-
 
1228
					active(find_string(buf, 'RANDOM:', 1)):
-
 
1229
					{
-
 
1230
						remove_string(buf, 'RANDOM:', 1);
-
 
1231
 
-
 
1232
						if (buf == 'TRUE')
-
 
1233
							nRandom = 1;
-
 
1234
						else
-
 
1235
							nRandom = 0;
-
 
1236
					}
-
 
1237
 
-
 
1238
					active(find_string(buf, 'REPEAT:', 1)):
-
 
1239
					{
-
 
1240
						remove_string(buf, 'REPEAT:', 1);
-
 
1241
 
-
 
1242
						if (buf == 'TRUE')
-
 
1243
							nRepeat = 1;
-
 
1244
						else
-
 
1245
							nRepeat = 0;
-
 
1246
					}
-
 
1247
 
-
 
1248
					active(find_string(buf, 'ERROR:PLAYLIST:No user selected', 1)):
-
 
1249
					{
-
 
1250
						sActUser = '';
-
 
1251
						nKeyboard[get_last(dvTPs)] = TEXT_INPUT_UNAME;
-
 
1252
						send_command dvTPs[get_last(dvTPs)],"'@AKB-',sActUser,';Enter user name'";
-
 
1253
					}
-
 
1254
 
916
					active(find_string(buf, 'KEYBOARD:', 1)):
1255
					active(find_string(buf, 'KEYBOARD:', 1)):
917
					{
1256
					{
918
					stack_var integer pan;
1257
					stack_var integer pan;
919
	
1258
	
920
						remove_string(buf, 'KEYBOARD:', 1);
1259
						remove_string(buf, 'KEYBOARD:', 1);
921
						pan = atoi(buf);
1260
						pan = atoi(buf);
922
						remove_string(buf, ':', 1);
1261
						remove_string(buf, ':', 1);
923
	
1262
	
924
						if (nKeyboard[pan] == TEXT_INPUT_UNAME)
1263
						if (nKeyboard[pan] == TEXT_INPUT_UNAME)
925
						{
1264
						{
926
							sActUser = left_string(buf, length_string(buf) - 1);
1265
							sInputUser = buf;
927
							send_command dvTPs[pan], "'@PPF-',sPopupSelUser";
1266
							send_command dvTPs[pan], "'^TXT-',itoa(TEXT_INPUT_UNAME),',0,',sInputUser";
928
							send_command vdvMDB, "'USER:',EncodeURL(sActUser),':;'";
-
 
929
							nKeyboard[pan] = 0;
1267
							nKeyboard[pan] = 0;
930
						}
1268
						}
931
						else if (nKeyboard[pan] == TEXT_INPUT_PLAYLIST)
1269
						else if (nKeyboard[pan] == TEXT_INPUT_PLAYLIST)
932
						{
1270
						{
933
							if (!nSaveToFolder)
-
 
934
							{
-
 
935
								sActPlaylist = left_string(buf, length_string(buf) - 1);
-
 
936
								send_command vdvMDB, "'USER:',EncodeURL(sActUser),':',EncodeURL(sActPlaylist),';'";
-
 
937
							}
-
 
938
							else
-
 
939
							{
-
 
940
								stack_var char sPlaylist[128];
1271
							sInputPlaylist = buf;
941
 
-
 
942
								sPlaylist = left_string(buf, length_string(buf) - 1);
-
 
943
								send_command vdvMDB, "'SAVEQUEUE:',EncodeURL(sActUser),':',EncodeURL(sPlaylist),';'";
1272
							send_command dvTPs, "'^TXT-',itoa(TEXT_INPUT_PLAYLIST),',0,',sInputPlaylist";
944
								nSaveToFolder = 0;
-
 
945
							}
-
 
946
 
-
 
947
							send_command dvTPs[pan], "'@PPF-',sPopupSelUser";
-
 
948
							nKeyboard[pan] = 0;
1273
							nKeyboard[pan] = 0;
949
						}
1274
						}
950
					}
1275
					}
951
				}
1276
				}
952
			}
1277
			}
953
		}
1278
		}
954
	}
1279
	}
-
 
1280
 
-
 
1281
	button_event[dvTPs,BTN_SCROLLBAR]
-
 
1282
	{
-
 
1283
		push:
-
 
1284
		{
-
 
1285
		stack_var integer pan;
-
 
1286
		
-
 
1287
			pan = get_last(dvTPs)
-
 
1288
			nScrollbarPressed[pan] = 1;
-
 
1289
		}
-
 
1290
 
-
 
1291
		release:
-
 
1292
		{
-
 
1293
		stack_var integer pan;
-
 
1294
		
-
 
1295
			pan = get_last(dvTPs)
-
 
1296
			nScrollbarPressed[pan] = 0;
-
 
1297
 
-
 
1298
			if (nTotal)
-
 
1299
			{
-
 
1300
				nStart = type_cast(nTotal / 100.0 * nScrollbarLvl);
-
 
1301
				send_command vdvMDB, "'LIST:',requestActualPage(),':',itoa(nStart),':',itoa(MAX_LINES),';'";
-
 
1302
			}
-
 
1303
		}
-
 
1304
	}
-
 
1305
 
-
 
1306
	level_event[dvTPs,LVL_SCROLLBAR]
-
 
1307
	{
-
 
1308
	stack_var integer pan;
-
 
1309
 
-
 
1310
		pan = get_last(dvTPs);
-
 
1311
 
-
 
1312
		if (nScrollbarPressed[pan])
-
 
1313
			nScrollbarLvl = LEVEL.VALUE;
-
 
1314
	}
-
 
1315
 
-
 
1316
DEFINE_PROGRAM
-
 
1317
	[dvTPs,MEDIA_RANDOM] = nRandom;
-
 
1318
	[dvTPs,MEDIA_REPEAT] = nRepeat;