aboutsummaryrefslogtreecommitdiffstats
path: root/src/dbUtils.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/dbUtils.c324
1 files changed, 180 insertions, 144 deletions
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 0a19ff60d..9d2d993e2 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -31,52 +31,54 @@
#define LOCATE_TAG_ANY_TYPE TAG_NUM_OF_ITEM_TYPES+20
#define LOCATE_TAG_ANY_KEY "any"
-
typedef struct _ListCommandItem {
mpd_sint8 tagType;
int numConditionals;
- LocateTagItem * conditionals;
+ LocateTagItem *conditionals;
} ListCommandItem;
typedef struct _LocateTagItemArray {
int numItems;
- LocateTagItem * items;
+ LocateTagItem *items;
} LocateTagItemArray;
-int getLocateTagItemType(char * str) {
+int getLocateTagItemType(char *str)
+{
int i;
- if(0 == strcasecmp(str, LOCATE_TAG_FILE_KEY)) {
+ if (0 == strcasecmp(str, LOCATE_TAG_FILE_KEY)) {
return LOCATE_TAG_FILE_TYPE;
}
- if(0 == strcasecmp(str, LOCATE_TAG_ANY_KEY)) {
- return LOCATE_TAG_ANY_TYPE;
+ if (0 == strcasecmp(str, LOCATE_TAG_ANY_KEY)) {
+ return LOCATE_TAG_ANY_TYPE;
}
-
- for(i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) {
- if(0 == strcasecmp(str, mpdTagItemKeys[i])) return i;
+
+ for (i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) {
+ if (0 == strcasecmp(str, mpdTagItemKeys[i]))
+ return i;
}
return -1;
}
-static int initLocateTagItem(LocateTagItem * item, char * typeStr,
- char * needle)
+static int initLocateTagItem(LocateTagItem * item, char *typeStr, char *needle)
{
item->tagType = getLocateTagItemType(typeStr);
- if(item->tagType < 0) return -1;
+ if (item->tagType < 0)
+ return -1;
item->needle = strdup(needle);
return 0;
}
-LocateTagItem * newLocateTagItem(char * typeStr, char * needle) {
- LocateTagItem * ret = malloc(sizeof(LocateTagItem));
+LocateTagItem *newLocateTagItem(char *typeStr, char *needle)
+{
+ LocateTagItem *ret = malloc(sizeof(LocateTagItem));
- if(initLocateTagItem(ret, typeStr, needle) < 0) {
+ if (initLocateTagItem(ret, typeStr, needle) < 0) {
free(ret);
ret = NULL;
}
@@ -84,36 +86,40 @@ LocateTagItem * newLocateTagItem(char * typeStr, char * needle) {
return ret;
}
-void freeLocateTagItemArray(int count, LocateTagItem * array) {
+void freeLocateTagItemArray(int count, LocateTagItem * array)
+{
int i;
-
- for(i = 0; i < count; i++) free(array[i].needle);
+
+ for (i = 0; i < count; i++)
+ free(array[i].needle);
free(array);
}
-int newLocateTagItemArrayFromArgArray(char * argArray[],
- int numArgs,
- LocateTagItem ** arrayRet)
+int newLocateTagItemArrayFromArgArray(char *argArray[],
+ int numArgs, LocateTagItem ** arrayRet)
{
- int i,j;
- LocateTagItem * item;
-
- if(numArgs == 0) return 0;
+ int i, j;
+ LocateTagItem *item;
- if(numArgs%2 != 0) return -1;
-
- *arrayRet = malloc(sizeof(LocateTagItem)*numArgs/2);
+ if (numArgs == 0)
+ return 0;
- for(i = 0, item = *arrayRet; i < numArgs/2; i++, item++) {
- if(initLocateTagItem(item, argArray[i*2], argArray[i*2+1]) < 0)
+ if (numArgs % 2 != 0)
+ return -1;
+
+ *arrayRet = malloc(sizeof(LocateTagItem) * numArgs / 2);
+
+ for (i = 0, item = *arrayRet; i < numArgs / 2; i++, item++) {
+ if (initLocateTagItem
+ (item, argArray[i * 2], argArray[i * 2 + 1]) < 0)
goto fail;
}
- return numArgs/2;
+ return numArgs / 2;
-fail:
- for(j = 0; j < i; j++) {
+ fail:
+ for (j = 0; j < i; j++) {
free((*arrayRet)[j].needle);
}
@@ -122,70 +128,78 @@ fail:
return -1;
}
-void freeLocateTagItem(LocateTagItem * item) {
+void freeLocateTagItem(LocateTagItem * item)
+{
free(item->needle);
free(item);
}
-static int countSongsInDirectory(FILE * fp, Directory * directory, void * data) {
- int * count = (int *)data;
+static int countSongsInDirectory(FILE * fp, Directory * directory, void *data)
+{
+ int *count = (int *)data;
+
+ *count += directory->songs->numberOfNodes;
- *count+=directory->songs->numberOfNodes;
-
- return 0;
+ return 0;
}
-static int printDirectoryInDirectory(FILE * fp, Directory * directory, void * data) {
- if(directory->path) {
- myfprintf(fp,"directory: %s\n", getDirectoryPath(directory));
+static int printDirectoryInDirectory(FILE * fp, Directory * directory,
+ void *data)
+{
+ if (directory->path) {
+ myfprintf(fp, "directory: %s\n", getDirectoryPath(directory));
}
- return 0;
+ return 0;
}
-static int printSongInDirectory(FILE * fp, Song * song, void * data) {
+static int printSongInDirectory(FILE * fp, Song * song, void *data)
+{
printSongUrl(fp, song);
- return 0;
+ return 0;
}
-static int strstrSearchTag(Song * song, int type, char * str) {
+static int strstrSearchTag(Song * song, int type, char *str)
+{
int i;
- char * dup;
+ char *dup;
int ret = 0;
- if(type == LOCATE_TAG_FILE_TYPE || type == LOCATE_TAG_ANY_TYPE) {
+ if (type == LOCATE_TAG_FILE_TYPE || type == LOCATE_TAG_ANY_TYPE) {
dup = strDupToUpper(getSongUrl(song));
- if(strstr(dup, str)) ret = 1;
+ if (strstr(dup, str))
+ ret = 1;
free(dup);
if (ret == 1 || type == LOCATE_TAG_FILE_TYPE) {
return ret;
}
}
- if(!song->tag) return 0;
+ if (!song->tag)
+ return 0;
- for(i = 0; i < song->tag->numOfItems && !ret; i++) {
- if(type != LOCATE_TAG_ANY_TYPE &&
- song->tag->items[i].type != type)
- {
- continue;
+ for (i = 0; i < song->tag->numOfItems && !ret; i++) {
+ if (type != LOCATE_TAG_ANY_TYPE &&
+ song->tag->items[i].type != type) {
+ continue;
}
-
+
dup = strDupToUpper(song->tag->items[i].value);
- if(strstr(dup, str)) ret = 1;
+ if (strstr(dup, str))
+ ret = 1;
free(dup);
}
return ret;
}
-static int searchInDirectory(FILE * fp, Song * song, void * data) {
- LocateTagItemArray * array = data;
+static int searchInDirectory(FILE * fp, Song * song, void *data)
+{
+ LocateTagItemArray *array = data;
int i;
- for(i = 0; i < array->numItems; i++) {
- if(!strstrSearchTag(song, array->items[i].tagType,
- array->items[i].needle))
- {
+ for (i = 0; i < array->numItems; i++) {
+ if (!strstrSearchTag(song, array->items[i].tagType,
+ array->items[i].needle)) {
return 0;
}
}
@@ -195,16 +209,15 @@ static int searchInDirectory(FILE * fp, Song * song, void * data) {
return 0;
}
-int searchForSongsIn(FILE * fp, char * name, int numItems,
- LocateTagItem * items)
+int searchForSongsIn(FILE * fp, char *name, int numItems, LocateTagItem * items)
{
int ret = -1;
int i;
- char ** originalNeedles = malloc(numItems*sizeof(char *));
+ char **originalNeedles = malloc(numItems * sizeof(char *));
LocateTagItemArray array;
- for(i = 0; i < numItems; i++) {
+ for (i = 0; i < numItems; i++) {
originalNeedles[i] = items[i].needle;
items[i].needle = strDupToUpper(originalNeedles[i]);
}
@@ -212,9 +225,9 @@ int searchForSongsIn(FILE * fp, char * name, int numItems,
array.numItems = numItems;
array.items = items;
- ret = traverseAllIn(fp,name,searchInDirectory, NULL, &array);
+ ret = traverseAllIn(fp, name, searchInDirectory, NULL, &array);
- for(i = 0; i < numItems; i++) {
+ for (i = 0; i < numItems; i++) {
free(items[i].needle);
items[i].needle = originalNeedles[i];
}
@@ -224,32 +237,37 @@ int searchForSongsIn(FILE * fp, char * name, int numItems,
return ret;
}
-static int tagItemFoundAndMatches(Song * song, int type, char * str) {
+static int tagItemFoundAndMatches(Song * song, int type, char *str)
+{
int i;
- if(type == LOCATE_TAG_FILE_TYPE) {
- if(0 == strcmp(str, getSongUrl(song))) return 1;
+ if (type == LOCATE_TAG_FILE_TYPE) {
+ if (0 == strcmp(str, getSongUrl(song)))
+ return 1;
}
- if(!song->tag) return 0;
+ if (!song->tag)
+ return 0;
- for(i = 0; i < song->tag->numOfItems; i++) {
- if(song->tag->items[i].type != type) continue;
-
- if(0 == strcmp(str, song->tag->items[i].value)) return 1;
+ for (i = 0; i < song->tag->numOfItems; i++) {
+ if (song->tag->items[i].type != type)
+ continue;
+
+ if (0 == strcmp(str, song->tag->items[i].value))
+ return 1;
}
return 0;
}
-static int findInDirectory(FILE * fp, Song * song, void * data) {
- LocateTagItemArray * array = data;
+static int findInDirectory(FILE * fp, Song * song, void *data)
+{
+ LocateTagItemArray *array = data;
int i;
- for(i = 0; i < array->numItems; i++) {
- if(!tagItemFoundAndMatches(song, array->items[i].tagType,
- array->items[i].needle))
- {
+ for (i = 0; i < array->numItems; i++) {
+ if (!tagItemFoundAndMatches(song, array->items[i].tagType,
+ array->items[i].needle)) {
return 0;
}
}
@@ -259,67 +277,77 @@ static int findInDirectory(FILE * fp, Song * song, void * data) {
return 0;
}
-int findSongsIn(FILE * fp, char * name, int numItems, LocateTagItem * items) {
+int findSongsIn(FILE * fp, char *name, int numItems, LocateTagItem * items)
+{
LocateTagItemArray array;
array.numItems = numItems;
array.items = items;
-
- return traverseAllIn(fp, name, findInDirectory, NULL,
- (void *)&array);
+
+ return traverseAllIn(fp, name, findInDirectory, NULL, (void *)&array);
}
-int printAllIn(FILE * fp, char * name) {
- return traverseAllIn(fp,name,printSongInDirectory,
- printDirectoryInDirectory,NULL);
+int printAllIn(FILE * fp, char *name)
+{
+ return traverseAllIn(fp, name, printSongInDirectory,
+ printDirectoryInDirectory, NULL);
}
-static int directoryAddSongToPlaylist(FILE * fp, Song * song, void * data) {
+static int directoryAddSongToPlaylist(FILE * fp, Song * song, void *data)
+{
return addSongToPlaylist(fp, song, 0);
}
-int addAllIn(FILE * fp, char * name) {
- return traverseAllIn(fp,name,directoryAddSongToPlaylist,NULL,NULL);
+int addAllIn(FILE * fp, char *name)
+{
+ return traverseAllIn(fp, name, directoryAddSongToPlaylist, NULL, NULL);
}
-static int directoryPrintSongInfo(FILE * fp, Song * song, void * data) {
- return printSongInfo(fp,song);
+static int directoryPrintSongInfo(FILE * fp, Song * song, void *data)
+{
+ return printSongInfo(fp, song);
}
-static int sumSongTime(FILE * fp, Song * song, void * data) {
- unsigned long * time = (unsigned long *)data;
+static int sumSongTime(FILE * fp, Song * song, void *data)
+{
+ unsigned long *time = (unsigned long *)data;
- if(song->tag && song->tag->time>=0) *time+=song->tag->time;
+ if (song->tag && song->tag->time >= 0)
+ *time += song->tag->time;
return 0;
}
-int printInfoForAllIn(FILE * fp, char * name) {
- return traverseAllIn(fp,name,directoryPrintSongInfo,printDirectoryInDirectory,NULL);
+int printInfoForAllIn(FILE * fp, char *name)
+{
+ return traverseAllIn(fp, name, directoryPrintSongInfo,
+ printDirectoryInDirectory, NULL);
}
-int countSongsIn(FILE * fp, char * name) {
+int countSongsIn(FILE * fp, char *name)
+{
int count = 0;
- void * ptr = (void *)&count;
-
- traverseAllIn(fp,name,NULL,countSongsInDirectory,ptr);
+ void *ptr = (void *)&count;
+
+ traverseAllIn(fp, name, NULL, countSongsInDirectory, ptr);
return count;
}
-unsigned long sumSongTimesIn(FILE * fp, char * name) {
+unsigned long sumSongTimesIn(FILE * fp, char *name)
+{
unsigned long dbPlayTime = 0;
- void * ptr = (void *)&dbPlayTime;
-
- traverseAllIn(fp,name,sumSongTime,NULL,ptr);
+ void *ptr = (void *)&dbPlayTime;
+
+ traverseAllIn(fp, name, sumSongTime, NULL, ptr);
return dbPlayTime;
}
-static ListCommandItem * newListCommandItem(int tagType, int numConditionals,
- LocateTagItem * conditionals)
+static ListCommandItem *newListCommandItem(int tagType, int numConditionals,
+ LocateTagItem * conditionals)
{
- ListCommandItem * item = malloc(sizeof(ListCommandItem));
+ ListCommandItem *item = malloc(sizeof(ListCommandItem));
item->tagType = tagType;
item->numConditionals = numConditionals;
@@ -328,36 +356,39 @@ static ListCommandItem * newListCommandItem(int tagType, int numConditionals,
return item;
}
-static void freeListCommandItem(ListCommandItem * item) {
+static void freeListCommandItem(ListCommandItem * item)
+{
free(item);
}
-static void visitTag(FILE * fp, Song * song, int tagType) {
+static void visitTag(FILE * fp, Song * song, int tagType)
+{
int i;
- MpdTag * tag = song->tag;
+ MpdTag *tag = song->tag;
- if(tagType == LOCATE_TAG_FILE_TYPE) {
+ if (tagType == LOCATE_TAG_FILE_TYPE) {
printSongUrl(fp, song);
return;
}
- if(!tag) return;
+ if (!tag)
+ return;
- for(i = 0; i < tag->numOfItems; i++) {
- if(tag->items[i].type == tagType) {
+ for (i = 0; i < tag->numOfItems; i++) {
+ if (tag->items[i].type == tagType) {
visitInTagTracker(tagType, tag->items[i].value);
}
}
}
-static int listUniqueTagsInDirectory(FILE * fp, Song * song, void * data) {
- ListCommandItem * item = data;
+static int listUniqueTagsInDirectory(FILE * fp, Song * song, void *data)
+{
+ ListCommandItem *item = data;
int i;
- for(i = 0; i < item->numConditionals; i++) {
- if(!tagItemFoundAndMatches(song, item->conditionals[i].tagType,
- item->conditionals[i].needle))
- {
+ for (i = 0; i < item->numConditionals; i++) {
+ if (!tagItemFoundAndMatches(song, item->conditionals[i].tagType,
+ item->conditionals[i].needle)) {
return 0;
}
}
@@ -367,21 +398,21 @@ static int listUniqueTagsInDirectory(FILE * fp, Song * song, void * data) {
return 0;
}
-int listAllUniqueTags(FILE * fp, int type, int numConditionals,
- LocateTagItem * conditionals)
+int listAllUniqueTags(FILE * fp, int type, int numConditionals,
+ LocateTagItem * conditionals)
{
int ret;
- ListCommandItem * item = newListCommandItem(type, numConditionals,
- conditionals);
-
- if(type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) {
+ ListCommandItem *item = newListCommandItem(type, numConditionals,
+ conditionals);
+
+ if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) {
resetVisitedFlagsInTagTracker(type);
}
ret = traverseAllIn(fp, NULL, listUniqueTagsInDirectory, NULL,
- (void *)item);
+ (void *)item);
- if(type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) {
+ if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) {
printVisitedInTagTracker(fp, type);
}
@@ -390,30 +421,35 @@ int listAllUniqueTags(FILE * fp, int type, int numConditionals,
return ret;
}
-static int sumSavedFilenameMemoryInDirectory(FILE * fp, Directory * dir, void * data) {
- int * sum = data;
+static int sumSavedFilenameMemoryInDirectory(FILE * fp, Directory * dir,
+ void *data)
+{
+ int *sum = data;
- if(!dir->path) return 0;
+ if (!dir->path)
+ return 0;
- *sum += (strlen(getDirectoryPath(dir))+1-sizeof(Directory *))*
- dir->songs->numberOfNodes;
+ *sum += (strlen(getDirectoryPath(dir)) + 1 - sizeof(Directory *)) *
+ dir->songs->numberOfNodes;
return 0;
}
-static int sumSavedFilenameMemoryInSong(FILE * fp, Song * song, void * data) {
- int * sum = data;
+static int sumSavedFilenameMemoryInSong(FILE * fp, Song * song, void *data)
+{
+ int *sum = data;
+
+ *sum += strlen(song->url) + 1;
- *sum += strlen(song->url)+1;
-
return 0;
}
-void printSavedMemoryFromFilenames(void) {
+void printSavedMemoryFromFilenames(void)
+{
int sum = 0;
traverseAllIn(stderr, NULL, sumSavedFilenameMemoryInSong,
- sumSavedFilenameMemoryInDirectory, (void *)&sum);
+ sumSavedFilenameMemoryInDirectory, (void *)&sum);
DEBUG("saved memory from filenames: %i\n", sum);
}