Subversion Repositories mdb

Rev

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

Rev 7 Rev 8
Line 28... Line 28...
28
#include <sqlite3.h>
28
#include <sqlite3.h>
29
#include "config.h"
29
#include "config.h"
30
#include "helplib.h"
30
#include "helplib.h"
31
#include "user.h"
31
#include "user.h"
32
 
32
 
-
 
33
/* Global variables */
33
struct ST_USERS *first = NULL;
34
USERS *userchain = NULL;
-
 
35
 
-
 
36
/* Prototypes */
-
 
37
USERS *addUser();
34
 
38
 
35
int createUser(int s1, char *user, char *playlist)
39
int createUser(int s1, char *user, char *playlist)
36
{
40
{
37
	char query[1024];
41
	char query[1024];
38
	char fname[256];
42
	char fname[256];
Line 54... Line 58...
54
		return FALSE;
58
		return FALSE;
55
	}
59
	}
56
 
60
 
57
	sprintf(query, "select id, uname from \"main\".\"users\" where uname = \"%s\"", user);
61
	sprintf(query, "select id, uname from \"main\".\"users\" where uname = \"%s\"", user);
58
 
62
 
59
	if (sqlite3_prepare(db, query, -1, res, NULL) != SQLITE_OK)
63
	if (sqlite3_prepare(db, query, -1, &res, NULL) != SQLITE_OK)
60
	{
64
	{
61
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
65
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
62
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
66
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
63
		write(s1, query, strlen(query));
67
		write(s1, query, strlen(query));
64
		return FALSE;
68
		return FALSE;
Line 73... Line 77...
73
		return TRUE;
77
		return TRUE;
74
	}
78
	}
75
 
79
 
76
	sprintf(query, "insert into \"users\" (uname, playlist) values (\"%s\", \"%s\")", user, playlist);
80
	sprintf(query, "insert into \"users\" (uname, playlist) values (\"%s\", \"%s\")", user, playlist);
77
 
81
 
78
	if (sqlite3_prepare(db, query, -1, res, NULL) != SQLITE_OK)
82
	if (sqlite3_prepare(db, query, -1, &res, NULL) != SQLITE_OK)
79
	{
83
	{
80
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
84
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
81
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
85
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
82
		write(s1, query, strlen(query));
86
		write(s1, query, strlen(query));
83
		return FALSE;
87
		return FALSE;
Line 87... Line 91...
87
	sqlite3_finalize(res);
91
	sqlite3_finalize(res);
88
	sqlite3_close(db);
92
	sqlite3_close(db);
89
	return TRUE;
93
	return TRUE;
90
}
94
}
91
 
95
 
92
ST_USERS *addUser()
96
USERS *addUser()
93
{
97
{
94
	if (first == NULL)
98
	if (userchain == NULL)
95
	{
99
	{
96
		if ((first = (ST_USERS *)malloc(sizeof(ST_USERS))) == NULL)
100
		if ((userchain = (USERS *)malloc(sizeof(USERS))) == NULL)
97
		{
101
		{
98
			syslog(LOG_DAEMON, "Error allocating %d bytes for a user: %s", sizeof(ST_USERS), strerror(errno));
102
			syslog(LOG_DAEMON, "Error allocating %ld bytes for a user: %s", sizeof(USERS), strerror(errno));
99
			return NULL;
103
			return NULL;
100
		}
104
		}
101
 
105
 
102
		memset(first, 0, sizeof(ST_USERS));
106
		memset(userchain, 0, sizeof(USERS));
103
		return first;
107
		return userchain;
104
	}
108
	}
105
	else
109
	else
106
	{
110
	{
107
		struct ST_USERS *new, *act;
111
		USERS *new, *act;
108
 
112
 
109
		if ((new = (struct ST_USERS *)malloc(sizeof(ST_USERS))) == NULL)
113
		if ((new = (USERS *)malloc(sizeof(USERS))) == NULL)
110
		{
114
		{
111
			syslog(LOG_DAEMON, "Error allocating %d bytes for a user: %s", sizeof(ST_USERS), strerror(errno));
115
			syslog(LOG_DAEMON, "Error allocating %ld bytes for a user: %s", sizeof(USERS), strerror(errno));
112
			return NULL;
116
			return NULL;
113
		}
117
		}
114
 
118
 
115
		memset(new, 0, sizeof(ST_USERS));
119
		memset(new, 0, sizeof(USERS));
116
		/* Find last structure in chain */
120
		/* Find last structure in chain */
117
		act = first;
121
		act = userchain;
118
 
122
 
119
		while (act->next)
123
		while (act->next)
120
			act = act->next;
124
			act = act->next;
121
 
125
 
122
		act->next = new;
126
		act->next = new;
123
	}
127
	}
124
}
128
}
125
 
129
 
-
 
130
void deleteUser()
-
 
131
{
-
 
132
	USERS *act;
-
 
133
 
-
 
134
	act = userchain;
-
 
135
	
-
 
136
	while (act)
-
 
137
	{
-
 
138
		userchain = act->next;
-
 
139
		free(act);
-
 
140
		act = userchain;
-
 
141
	}
-
 
142
 
-
 
143
	userchain = NULL;
-
 
144
}
-
 
145
 
126
int selectUser (int s1, char *user)
146
int selectUser (int s1, char *user)
127
{
147
{
128
	char query[1024];
148
	char query[1024];
129
	char fname[256];
149
	char fname[256];
130
	sqlite3 *db;
150
	sqlite3 *db;
131
	char *uname, *playlist, *zErrMsg = 0;
151
	char *uname, *playlist, *zErrMsg = 0;
132
	int rc, id;
152
	int rc, id, total;
133
	sqlite3_stmt *res;
153
	sqlite3_stmt *res;
134
	
154
	
135
	strcpy(fname, configs.home);
155
	strcpy(fname, configs.home);
136
	strcat(fname, "/music.db");
156
	strcat(fname, "/music.db");
137
	
157
	
Line 142... Line 162...
142
		syslog(LOG_WARNING, "Error opening database %s: %s", fname, sqlite3_errmsg(db));
162
		syslog(LOG_WARNING, "Error opening database %s: %s", fname, sqlite3_errmsg(db));
143
		strcpy(query, "ERROR:USER:Error opening database;");
163
		strcpy(query, "ERROR:USER:Error opening database;");
144
		write (s1, query, strlen(query));
164
		write (s1, query, strlen(query));
145
		return FALSE;
165
		return FALSE;
146
	}
166
	}
147
	
167
 
-
 
168
	deleteUser();
148
	sprintf(query, "select id, uname, playlist from \"main\".\"users\" where uname = \"%s\"", user);
169
	sprintf(query, "select id, uname, playlist from \"main\".\"users\" where uname = \"%s\"", user);
149
 
170
 
150
	if (sqlite3_prepare(db, query, -1, res, NULL) != SQLITE_OK)
171
	if (sqlite3_prepare(db, query, -1, &res, NULL) != SQLITE_OK)
151
	{
172
	{
152
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
173
		syslog(LOG_DAEMON, "Error preparing SQL statement [%s]: %s", query, sqlite3_errmsg(db));
153
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
174
		strcpy(query, "ERROR:USER:Error preparing a SQL statement;");
154
		write(s1, query, strlen(query));
175
		write(s1, query, strlen(query));
155
		return FALSE;
176
		return FALSE;
156
	}
177
	}
157
 
178
 
-
 
179
	total = 0;
-
 
180
 
158
	while ((rc = sqlite3_step(res)) == SQLITE_ROW)
181
	while ((rc = sqlite3_step(res)) == SQLITE_ROW)
159
	{
182
	{
160
		struct ST_USERS *act;
183
		USERS *act;
161
 
184
 
162
		if ((act = addUser(user)) == NULL)
185
		if ((act = addUser()) == NULL)
163
		{
186
		{
164
			sqlite3_finalize(res);
187
			sqlite3_finalize(res);
165
			sqlite3_close(db);
188
			sqlite3_close(db);
166
			return FALSE;
189
			return FALSE;
167
		}
190
		}
168
 
191
 
-
 
192
		total++;
169
		act->id = sqlite3_column_int(res, 0);
193
		act->id = sqlite3_column_int(res, 0);
170
		strncpy(act->uname, sqlite3_column_text(res, 1), sizeof(struct ST_USERS.uname));
194
		strncpy(act->uname, (const char *)sqlite3_column_text(res, 1), sizeof(act->uname));
171
		strncpy(act->playlist, sqlite3_column_text(res, 1), sizeof(struct ST_USERS.playlist));
195
		strncpy(act->playlist, (const char *)sqlite3_column_text(res, 2), sizeof(act->playlist));
172
	}
196
	}
173
 
197
 
174
	sqlite3_finalize(res);
198
	sqlite3_finalize(res);
175
	sqlite3_close(db);
199
	sqlite3_close(db);
-
 
200
 
-
 
201
	sprintf(query, "PTOTAL:%s:%d;", user, total);
-
 
202
	write(s1, query, strlen(query));
176
	return TRUE;
203
	return TRUE;
177
}
204
}
-
 
205
 
-
 
206
USERS *findPlaylist(char *playlist)
-
 
207
{
-
 
208
	USERS *act;
-
 
209
 
-
 
210
	act = userchain;
-
 
211
 
-
 
212
	while (act)
-
 
213
	{
-
 
214
		if (strcmp(act->playlist, playlist) == 0)
-
 
215
			return act;
-
 
216
 
-
 
217
		act = act->next;
-
 
218
	}
-
 
219
 
-
 
220
	return NULL;
-
 
221
}
-
 
222