chiark / gitweb /
Remove extraneous logging.
[disorder] / lib / trackdb.c
index 83a67af3f1a499f9fb28677bff087993ecc35d46..d724472203034ddd1c6a0b96df1dd762bab309e9 100644 (file)
@@ -157,6 +157,13 @@ DB *trackdb_scheduledb;
  */
 DB *trackdb_usersdb;
 
+/** @brief The playlists database
+ * - Keys are playlist names
+ * - Values are encoded key-value pairs
+ * - Data is user data and cannot be reconstructed
+ */
+DB *trackdb_playlistsdb;
+
 static pid_t db_deadlock_pid = -1;      /* deadlock manager PID */
 static pid_t rescan_pid = -1;           /* rescanner PID */
 static int initialized, opened;         /* state */
@@ -472,6 +479,7 @@ void trackdb_open(int flags) {
   trackdb_noticeddb = open_db("noticed.db",
                              DB_DUPSORT, DB_BTREE, dbflags, 0666);
   trackdb_scheduledb = open_db("schedule.db", 0, DB_HASH, dbflags, 0666);
+  trackdb_playlistsdb = open_db("playlists.db", 0, DB_HASH, dbflags, 0666);
   if(!trackdb_existing_database && !(flags & TRACKDB_READ_ONLY)) {
     /* Stash the database version */
     char buf[32];
@@ -503,6 +511,7 @@ void trackdb_close(void) {
   CLOSE("noticed.db", trackdb_noticeddb);
   CLOSE("schedule.db", trackdb_scheduledb);
   CLOSE("users.db", trackdb_usersdb);
+  CLOSE("playlists.db", trackdb_playlistsdb);
   D(("closed databases"));
 }
 
@@ -1042,7 +1051,7 @@ int trackdb_notice_tid(const char *track,
   /* this is a real track */
   t_changed += kvp_set(&t, "_alias_for", 0);
   t_changed += kvp_set(&t, "_path", path);
-  time(&now);
+  xtime(&now);
   if(ret == DB_NOTFOUND) {
     /* It's a new track; record the time */
     byte_xasprintf(&noticed, "%lld", (long long)now);
@@ -2553,8 +2562,10 @@ static int trusted(const char *user) {
  * Currently we only allow the letters and digits in ASCII.  We could be more
  * liberal than this but it is a nice simple test.  It is critical that
  * semicolons are never allowed.
+ *
+ * NB also used by playlist_parse_name() to validate playlist names!
  */
-static int valid_username(const char *user) {
+int valid_username(const char *user) {
   if(!*user)
     return 0;
   while(*user) {
@@ -2598,7 +2609,7 @@ static int create_user(const char *user,
     kvp_set(&k, "email", email);
   if(confirmation)
     kvp_set(&k, "confirmation", confirmation);
-  snprintf(s, sizeof s, "%jd", (intmax_t)time(0));
+  snprintf(s, sizeof s, "%jd", (intmax_t)xtime(0));
   kvp_set(&k, "created", s);
   return trackdb_putdata(trackdb_usersdb, user, k, tid, flags);
 }