Subversion Repositories mdb

Rev

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

Rev 56 Rev 57
Line 25... Line 25...
25
#include <errno.h>
25
#include <errno.h>
26
#include <sys/stat.h>
26
#include <sys/stat.h>
27
#include <sys/types.h>
27
#include <sys/types.h>
28
#include <fcntl.h>
28
#include <fcntl.h>
29
#include <time.h>
29
#include <time.h>
-
 
30
#include <pthread.h>
30
#include <sqlite3.h>
31
#include <sqlite3.h>
31
#include <ao/ao.h>
32
#include <ao/ao.h>
32
#include <mpg123.h>
33
#include <mpg123.h>
33
#include "config.h"
34
#include "config.h"
34
#include "mdb.h"
35
#include "mdb.h"
Line 108... Line 109...
108
 
109
 
109
	if (_playPars == NULL)
110
	if (_playPars == NULL)
110
	{
111
	{
111
		syslog(LOG_DAEMON, "Internal error: Invalid or no parameters for thread \"pthr_playfile\"!");
112
		syslog(LOG_DAEMON, "Internal error: Invalid or no parameters for thread \"pthr_playfile\"!");
112
		playerActive = FALSE;
113
		playerActive = FALSE;
-
 
114
		pthread_exit(NULL);
113
		return NULL;
115
		return NULL;
114
	}
116
	}
115
 
117
 
116
	/* retrieve the data from the database */
118
	/* retrieve the data from the database */
117
	strcpy(fname, configs.home);			/* Base file name */
119
	strcpy(fname, configs.home);			/* Base file name */
Line 123... Line 125...
123
	{
125
	{
124
		syslog(LOG_WARNING, "Error opening database %s: %s", fname, sqlite3_errmsg(db));
126
		syslog(LOG_WARNING, "Error opening database %s: %s", fname, sqlite3_errmsg(db));
125
		strcpy(query, "ERROR:PLAY:Error opening database;");
127
		strcpy(query, "ERROR:PLAY:Error opening database;");
126
		write (_playPars->s1, query, strlen(query));
128
		write (_playPars->s1, query, strlen(query));
127
		playerActive = FALSE;
129
		playerActive = FALSE;
-
 
130
		pthread_exit(NULL);
128
		return NULL;
131
		return NULL;
129
	}
132
	}
130
 
133
 
131
	strcpy (query, "select id, path, type, title, interpret, album, genre, cover from \"main\".\"musicdb\" where ");
134
	strcpy (query, "select id, path, type, title, interpret, album, genre, cover from \"main\".\"musicdb\" where ");
132
	flag = FALSE;
135
	flag = FALSE;
Line 202... Line 205...
202
		{
205
		{
203
			strcpy (hv0, "ERROR:PLAY:No user selected;");
206
			strcpy (hv0, "ERROR:PLAY:No user selected;");
204
			write (_playPars->s1, hv0, strlen(hv0));
207
			write (_playPars->s1, hv0, strlen(hv0));
205
			sqlite3_close(db);
208
			sqlite3_close(db);
206
			playerActive = FALSE;
209
			playerActive = FALSE;
-
 
210
			pthread_exit(NULL);
207
			return NULL;
211
			return NULL;
208
		}
212
		}
209
 
213
 
210
		/* find uid */
214
		/* find uid */
211
		if ((act = findPlaylist(userchain->uname, _playPars->what)) != NULL)
215
		if ((act = findPlaylist(userchain->uname, _playPars->what)) != NULL)
212
		{
216
		{
213
			if (!playlistToQueue(act->id, TRUE))
217
			if (!playlistToQueue(act->id, TRUE))
214
			{
218
			{
215
				sqlite3_close(db);
219
				sqlite3_close(db);
216
				playerActive = FALSE;
220
				playerActive = FALSE;
-
 
221
				pthread_exit(NULL);
217
				return NULL;
222
				return NULL;
218
			}
223
			}
219
		}
224
		}
220
		else if (isnumeric(_playPars->what))
225
		else if (isnumeric(_playPars->what))
221
		{
226
		{
Line 225... Line 230...
225
 
230
 
226
			if (!playlistToQueue(id, TRUE))
231
			if (!playlistToQueue(id, TRUE))
227
			{
232
			{
228
				sqlite3_close(db);
233
				sqlite3_close(db);
229
				playerActive = FALSE;
234
				playerActive = FALSE;
-
 
235
				pthread_exit(NULL);
230
				return NULL;
236
				return NULL;
231
			}
237
			}
232
		}
238
		}
233
		else
239
		else
234
		{
240
		{
235
			strcpy (hv0, "ERROR:PLAY:No playlist found;");
241
			strcpy (hv0, "ERROR:PLAY:No playlist found;");
236
			write (_playPars->s1, hv0, strlen(hv0));
242
			write (_playPars->s1, hv0, strlen(hv0));
237
			sqlite3_close(db);
243
			sqlite3_close(db);
238
			playerActive = FALSE;
244
			playerActive = FALSE;
-
 
245
			pthread_exit(NULL);
239
			return NULL;
246
			return NULL;
240
		}
247
		}
241
	}
248
	}
242
	else
249
	else
243
	{
250
	{
244
		strcpy(hv0, "ERROR:PLAY:Missing type of argument;");
251
		strcpy(hv0, "ERROR:PLAY:Missing type of argument;");
245
		write(_playPars->s1, hv0, strlen(hv0));
252
		write(_playPars->s1, hv0, strlen(hv0));
246
		sqlite3_close(db);
253
		sqlite3_close(db);
247
		playerActive = FALSE;
254
		playerActive = FALSE;
-
 
255
		pthread_exit(NULL);
248
		return NULL;
256
		return NULL;
249
	}
257
	}
250
 
258
 
251
	if (configs.debug)
259
	if (configs.debug)
252
	{
260
	{
Line 264... Line 272...
264
			syslog(LOG_WARNING, "SQL error [%s]: %s", query, sqlite3_errmsg(db));
272
			syslog(LOG_WARNING, "SQL error [%s]: %s", query, sqlite3_errmsg(db));
265
			sqlite3_close(db);
273
			sqlite3_close(db);
266
			strcpy(query, "ERROR:PLAY:SQL error;");
274
			strcpy(query, "ERROR:PLAY:SQL error;");
267
			write (_playPars->s1, query, strlen(query));
275
			write (_playPars->s1, query, strlen(query));
268
			playerActive = FALSE;
276
			playerActive = FALSE;
-
 
277
			pthread_exit(NULL);
269
			return NULL;
278
			return NULL;
270
		}
279
		}
271
 
280
 
272
		err = 0;
281
		err = 0;
273
		memset(path, 0, sizeof(path));
282
		memset(path, 0, sizeof(path));
Line 290... Line 299...
290
			sqlite3_finalize(res);
299
			sqlite3_finalize(res);
291
			sqlite3_close(db);
300
			sqlite3_close(db);
292
			strcpy(query, "ERROR:PLAY:SQL error;");
301
			strcpy(query, "ERROR:PLAY:SQL error;");
293
			write (_playPars->s1, query, strlen(query));
302
			write (_playPars->s1, query, strlen(query));
294
			playerActive = FALSE;
303
			playerActive = FALSE;
-
 
304
			pthread_exit(NULL);
295
			return NULL;
305
			return NULL;
296
		}
306
		}
297
		else
307
		else
298
			strncpy(path, p, sizeof(path));
308
			strncpy(path, p, sizeof(path));
299
 
309
 
Line 305... Line 315...
305
			sqlite3_finalize(res);
315
			sqlite3_finalize(res);
306
			sqlite3_close(db);
316
			sqlite3_close(db);
307
			strcpy(query, "ERROR:PLAY:SQL error;");
317
			strcpy(query, "ERROR:PLAY:SQL error;");
308
			write (_playPars->s1, query, strlen(query));
318
			write (_playPars->s1, query, strlen(query));
309
			playerActive = FALSE;
319
			playerActive = FALSE;
-
 
320
			pthread_exit(NULL);
310
			return NULL;
321
			return NULL;
311
		}
322
		}
312
		else
323
		else
313
			strncpy(title, p, sizeof(title));
324
			strncpy(title, p, sizeof(title));
314
 
325
 
Line 318... Line 329...
318
			sqlite3_finalize(res);
329
			sqlite3_finalize(res);
319
			sqlite3_close(db);
330
			sqlite3_close(db);
320
			strcpy(query, "ERROR:PLAY:SQL error;");
331
			strcpy(query, "ERROR:PLAY:SQL error;");
321
			write (_playPars->s1, query, strlen(query));
332
			write (_playPars->s1, query, strlen(query));
322
			playerActive = FALSE;
333
			playerActive = FALSE;
-
 
334
			pthread_exit(NULL);
323
			return NULL;
335
			return NULL;
324
		}
336
		}
325
		else
337
		else
326
			strncpy(artist, p, sizeof(artist));
338
			strncpy(artist, p, sizeof(artist));
327
 
339
 
Line 331... Line 343...
331
			sqlite3_finalize(res);
343
			sqlite3_finalize(res);
332
			sqlite3_close(db);
344
			sqlite3_close(db);
333
			strcpy(query, "ERROR:PLAY:SQL error;");
345
			strcpy(query, "ERROR:PLAY:SQL error;");
334
			write (_playPars->s1, query, strlen(query));
346
			write (_playPars->s1, query, strlen(query));
335
			playerActive = FALSE;
347
			playerActive = FALSE;
-
 
348
			pthread_exit(NULL);
336
			return NULL;
349
			return NULL;
337
		}
350
		}
338
		else
351
		else
339
			strncpy(album, p, sizeof(album));
352
			strncpy(album, p, sizeof(album));
340
 
353
 
Line 344... Line 357...
344
			sqlite3_finalize(res);
357
			sqlite3_finalize(res);
345
			sqlite3_close(db);
358
			sqlite3_close(db);
346
			strcpy(query, "ERROR:PLAY:SQL error;");
359
			strcpy(query, "ERROR:PLAY:SQL error;");
347
			write (_playPars->s1, query, strlen(query));
360
			write (_playPars->s1, query, strlen(query));
348
			playerActive = FALSE;
361
			playerActive = FALSE;
-
 
362
			pthread_exit(NULL);
349
			return NULL;
363
			return NULL;
350
		}
364
		}
351
		else
365
		else
352
			strncpy(genre, p, sizeof(genre));
366
			strncpy(genre, p, sizeof(genre));
353
 
367
 
Line 432... Line 446...
432
				}
446
				}
433
			}
447
			}
434
		}
448
		}
435
 
449
 
436
		playerActive = FALSE;
450
		playerActive = FALSE;
-
 
451
		pthread_exit(NULL);
437
		return NULL;
452
		return NULL;
438
	}
453
	}
439
	else if (flag && (rc = sqlite3_exec(db, query, playCallback, (void *)_playPars->what, &zErrMsg)) != SQLITE_OK)
454
	else if (flag && (rc = sqlite3_exec(db, query, playCallback, (void *)_playPars->what, &zErrMsg)) != SQLITE_OK)
440
	{
455
	{
441
		syslog(LOG_WARNING, "SQL error [%s]: %s", query, zErrMsg);
456
		syslog(LOG_WARNING, "SQL error [%s]: %s", query, zErrMsg);
442
		sqlite3_free(zErrMsg);
457
		sqlite3_free(zErrMsg);
443
		sqlite3_close(db);
458
		sqlite3_close(db);
444
		strcpy(query, "ERROR:PLAY:SQL error;");
459
		strcpy(query, "ERROR:PLAY:SQL error;");
445
		write (_playPars->s1, query, strlen(query));
460
		write (_playPars->s1, query, strlen(query));
446
		playerActive = FALSE;
461
		playerActive = FALSE;
-
 
462
		pthread_exit(NULL);
447
		return NULL;
463
		return NULL;
448
	}
464
	}
449
 
465
 
450
	if (configs.debug)
466
	if (configs.debug)
451
		syslog(LOG_DEBUG, "Playing from current queue starting at entry %d", start);
467
		syslog(LOG_DEBUG, "Playing from current queue starting at entry %d", start);
Line 460... Line 476...
460
		
476
		
461
		if ((fd = open(fname, O_RDONLY)) < 0)
477
		if ((fd = open(fname, O_RDONLY)) < 0)
462
		{
478
		{
463
			syslog(LOG_WARNING, "Error opening file %s: %s", fname, strerror(errno));
479
			syslog(LOG_WARNING, "Error opening file %s: %s", fname, strerror(errno));
464
			playerActive = FALSE;
480
			playerActive = FALSE;
-
 
481
			pthread_exit(NULL);
465
			return NULL;
482
			return NULL;
466
		}
483
		}
467
 
484
 
468
		iflag = FALSE;
485
		iflag = FALSE;
469
		num = 0;
486
		num = 0;
Line 613... Line 630...
613
	}
630
	}
614
	else
631
	else
615
		syslog(LOG_WARNING, "Error accessing file %s: %s", fname, strerror(errno));
632
		syslog(LOG_WARNING, "Error accessing file %s: %s", fname, strerror(errno));
616
 
633
 
617
	playerActive = FALSE;
634
	playerActive = FALSE;
-
 
635
	pthread_exit(NULL);
618
	return NULL;
636
	return NULL;
619
}
637
}
620
 
638
 
621
static int playCallback(void *hint, int argc, char **argv, char **azColName)
639
static int playCallback(void *hint, int argc, char **argv, char **azColName)
622
{
640
{