summaryrefslogtreecommitdiff
path: root/src/dbUtils.c
diff options
context:
space:
mode:
authorJ. Alexander Treuman <jat@spatialrift.net>2007-02-24 00:54:54 +0000
committerJ. Alexander Treuman <jat@spatialrift.net>2007-02-24 00:54:54 +0000
commit1ae3bdb7e6d5a5c4135f6046be9259d6f716498a (patch)
treeb8e70764ebecf56536c683f98ab3e13a140f60cd /src/dbUtils.c
parentd7e20861d490cf0743f740cec3506fd3aca3d34b (diff)
Moving a bunch of the LocateTagItem code to locate.[ch] so that it can
later be used for playlist searching. git-svn-id: https://svn.musicpd.org/mpd/trunk@5419 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/dbUtils.c')
-rw-r--r--src/dbUtils.c194
1 files changed, 7 insertions, 187 deletions
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 86fb3571e..7a1c0e54d 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -27,10 +27,6 @@
#include "tagTracker.h"
#include "log.h"
-#define LOCATE_TAG_FILE_KEY SONG_FILE
-#define LOCATE_TAG_FILE_KEY_OLD "filename"
-#define LOCATE_TAG_ANY_KEY "any"
-
typedef struct _ListCommandItem {
mpd_sint8 tagType;
int numConditionals;
@@ -42,102 +38,6 @@ typedef struct _LocateTagItemArray {
LocateTagItem *items;
} LocateTagItemArray;
-int getLocateTagItemType(char *str)
-{
- int i;
-
- if (0 == strcasecmp(str, LOCATE_TAG_FILE_KEY) ||
- 0 == strcasecmp(str, LOCATE_TAG_FILE_KEY_OLD))
- {
- return LOCATE_TAG_FILE_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;
- }
-
- return -1;
-}
-
-static int initLocateTagItem(LocateTagItem * item, char *typeStr, char *needle)
-{
- item->tagType = getLocateTagItemType(typeStr);
-
- if (item->tagType < 0)
- return -1;
-
- item->needle = xstrdup(needle);
-
- return 0;
-}
-
-LocateTagItem *newLocateTagItem(char *typeStr, char *needle)
-{
- LocateTagItem *ret = xmalloc(sizeof(LocateTagItem));
-
- if (initLocateTagItem(ret, typeStr, needle) < 0) {
- free(ret);
- ret = NULL;
- }
-
- return ret;
-}
-
-void freeLocateTagItemArray(int count, LocateTagItem * array)
-{
- int i;
-
- for (i = 0; i < count; i++)
- free(array[i].needle);
-
- free(array);
-}
-
-int newLocateTagItemArrayFromArgArray(char *argArray[],
- int numArgs, LocateTagItem ** arrayRet)
-{
- int i, j;
- LocateTagItem *item;
-
- if (numArgs == 0)
- return 0;
-
- if (numArgs % 2 != 0)
- return -1;
-
- *arrayRet = xmalloc(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;
-
-fail:
- for (j = 0; j < i; j++) {
- free((*arrayRet)[j].needle);
- }
-
- free(*arrayRet);
- *arrayRet = NULL;
- return -1;
-}
-
-void freeLocateTagItem(LocateTagItem * item)
-{
- free(item->needle);
- free(item);
-}
-
static int countSongsInDirectory(int fd, Directory * directory, void *data)
{
int *count = (int *)data;
@@ -162,53 +62,12 @@ static int printSongInDirectory(int fd, Song * song, void *data)
return 0;
}
-static int strstrSearchTag(Song * song, int type, char *str)
-{
- int i;
- char *dup;
- int ret = 0;
-
- if (type == LOCATE_TAG_FILE_TYPE || type == LOCATE_TAG_ANY_TYPE) {
- dup = strDupToUpper(getSongUrl(song));
- if (strstr(dup, str))
- ret = 1;
- free(dup);
- if (ret == 1 || type == LOCATE_TAG_FILE_TYPE) {
- return ret;
- }
- }
-
- 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;
- }
-
- dup = strDupToUpper(song->tag->items[i].value);
- if (strstr(dup, str))
- ret = 1;
- free(dup);
- }
-
- return ret;
-}
-
static int searchInDirectory(int fd, 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)) {
- return 0;
- }
- }
- printSongInfo(fd, song);
+ if (strstrSearchTags(song, array->numItems, array->items))
+ printSongInfo(fd, song);
return 0;
}
@@ -241,46 +100,12 @@ int searchForSongsIn(int fd, char *name, int numItems, LocateTagItem * items)
return ret;
}
-static int tagItemFoundAndMatches(Song * song, int type, char *str)
-{
- int i;
-
- if (type == LOCATE_TAG_FILE_TYPE || type == LOCATE_TAG_ANY_TYPE) {
- if (0 == strcmp(str, getSongUrl(song)))
- return 1;
- if (type == LOCATE_TAG_FILE_TYPE)
- return 0;
- }
-
- if (!song->tag)
- return 0;
-
- for (i = 0; i < song->tag->numOfItems; i++) {
- if (type != LOCATE_TAG_ANY_TYPE &&
- song->tag->items[i].type != type) {
- continue;
- }
-
- if (0 == strcmp(str, song->tag->items[i].value))
- return 1;
- }
-
- return 0;
-}
-
static int findInDirectory(int fd, 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)) {
- return 0;
- }
- }
-
- printSongInfo(fd, song);
+ if (tagItemsFoundAndMatches(song, array->numItems, array->items))
+ printSongInfo(fd, song);
return 0;
}
@@ -403,17 +228,12 @@ static void visitTag(int fd, Song * song, int tagType)
static int listUniqueTagsInDirectory(int fd, 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)) {
- return 0;
- }
+ if (tagItemsFoundAndMatches(song, item->numConditionals,
+ item->conditionals)) {
+ visitTag(fd, song, item->tagType);
}
- visitTag(fd, song, item->tagType);
-
return 0;
}