summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-04-16 23:49:48 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-04-16 23:49:48 +0000
commit158c23f23850b6c10a596ee8f003344ff1871302 (patch)
tree31b851ad2bd34eb260cbc660386419481bd0d3f7
parent4a1fbb45c5a5ccffa03bf9a847b996c2f0d9ee39 (diff)
when updating, don't cause db reread on adding and then removing empty directories
git-svn-id: https://svn.musicpd.org/mpd/trunk@805 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r--TODO29
-rw-r--r--src/directory.c40
2 files changed, 35 insertions, 34 deletions
diff --git a/TODO b/TODO
index 8e5c54fb9..a47945fb7 100644
--- a/TODO
+++ b/TODO
@@ -1,40 +1,33 @@
-1) On exploring a directory:
- 1) detect if any songs were added
- 2) if no songs added remove explored directory
- 3) use this info on exploring directory to adjust whether or not an
- update happened
- 4) remove the deleteEmptryDirectories() function
-
-2) resampling audio for compatibility, and better gapless/crossfading
+1) resampling audio for compatibility, and better gapless/crossfading
a) write bit conversion stuff (8->16 and 24->16)
b) mono to stereo conversion
c) default audio format is (44.1khz, 16-bit, stereo)
d) option to set default sampling frequency
e) abitility to disable resampling and audio format conversion
-3) when writing combined interface for all decodes to use, be sure to add a
+2) when writing combined interface for all decodes to use, be sure to add a
common function and abstrct dealing with DecoderControl * and put
cycleLogFiles in there, so we cycleLogFiles while decoding, not just when
decoding has stopped.
-4) reaplygain
+3) reaplygain
-5) streaming and playing in general
- 1) determine a clever interface to play, so that play doesn't block
+4) streaming and playing in general
+ a) determine a clever interface to play, so that play doesn't block
until the file is opened, but just returns when the command
is accepted.
- 2) put errors in error stuff of PlayerControl and report this to
+ b) put errors in error stuff of PlayerControl and report this to
status and print to error logs
- 3) this will help streaming from blocking indefinetly or waiting
+ c) this will help streaming from blocking indefinetly or waiting
on a response
-6) play streams
+5) play streams
-7) ACK error codes
+6) ACK error codes
-8) cleanup main()
+7) cleanup main()
-9) handle '\n' in filenames
+8) handle '\n' in filenames
Post-1.0
diff --git a/src/directory.c b/src/directory.c
index 495173fdd..ed0992021 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -103,7 +103,7 @@ void deleteEmptyDirectoriesInDirectory(Directory * directory);
void removeSongFromDirectory(Directory * directory, char * shortname);
-Directory * addSubDirectoryToDirectory(Directory * directory, char * shortname,
+int addSubDirectoryToDirectory(Directory * directory, char * shortname,
char * name);
Directory * getDirectoryDetails(char * name, char ** shortname,
@@ -328,8 +328,8 @@ int updateInDirectory(Directory * directory, char * shortname, char * name) {
if(updateDirectory((Directory *)subDir)>0) return 1;
}
else {
- addSubDirectoryToDirectory(directory,shortname,name);
- return 1;
+ return addSubDirectoryToDirectory(directory,shortname,
+ name);
}
}
@@ -434,8 +434,9 @@ Directory * addDirectoryPathToDB(char * utf8path, char ** shortname) {
if(!findInList(parentDirectory->subDirectories,*shortname, &directory))
{
- directory = (void *)addSubDirectoryToDirectory(parentDirectory,
- *shortname,utf8path);
+ directory = newDirectory(utf8path);
+ insertInList(parentDirectory->subDirectories,*shortname,
+ directory);
}
/* if we're adding directory paths, make sure to delete filenames
@@ -531,9 +532,7 @@ int updatePath(char * utf8path) {
*/
if(isDir(path) || isMusic(path,NULL)) {
parentDirectory = addParentPathToDB(path,&shortname);
- addToDirectory(parentDirectory,shortname,path);
- sortDirectory(parentDirectory);
- ret = 1;
+ if(addToDirectory(parentDirectory,shortname,path)>0) ret = 1;
}
free(path);
@@ -587,6 +586,11 @@ int updateDirectory(Directory * directory) {
return ret;
}
+/* return values:
+ -1 -> error
+ 0 -> no error, but nothing found
+ 1 -> no error, and stuff found
+ */
int exploreDirectory(Directory * directory) {
DIR * dir;
char cwd[2];
@@ -594,6 +598,7 @@ int exploreDirectory(Directory * directory) {
char * s;
char * utf8;
char * dirname = directory->utf8name;
+ int ret = 0;
cwd[0] = '.';
cwd[1] = '\0';
@@ -619,38 +624,41 @@ int exploreDirectory(Directory * directory) {
sprintf(s,"%s/%s",directory->utf8name,utf8);
}
else s = strdup(utf8);
- addToDirectory(directory,utf8,s);
+ if(addToDirectory(directory,utf8,s)>0) ret = 1;
free(utf8);
free(s);
}
closedir(dir);
- return 0;
+ return ret;
}
-Directory * addSubDirectoryToDirectory(Directory * directory, char * shortname,
+int addSubDirectoryToDirectory(Directory * directory, char * shortname,
char * name)
{
Directory * subDirectory = newDirectory(name);
+ if(exploreDirectory(subDirectory)<1) {
+ freeDirectory(subDirectory);
+ return 0;
+ }
+
insertInList(directory->subDirectories,shortname,subDirectory);
- exploreDirectory(subDirectory);
- return subDirectory;
+ return 1;
}
int addToDirectory(Directory * directory, char * shortname, char * name) {
if(isDir(name)) {
- addSubDirectoryToDirectory(directory,shortname,name);
- return 0;
+ return addSubDirectoryToDirectory(directory,shortname,name);
}
else if(isMusic(name,NULL)) {
Song * song;
song = addSongToList(directory->songs,shortname,name);
if(!song) return -1;
LOG("added %s\n",name);
- return 0;
+ return 1;
}
DEBUG("addToDirectory: %s is not a directory or music\n",name);