Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
32b62ade
Commit
32b62ade
authored
Apr 14, 2004
by
Warren Dukes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
incremental update can now recognize if you pass it a deleted path
git-svn-id:
https://svn.musicpd.org/mpd/trunk@742
09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent
700093ad
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
33 deletions
+61
-33
directory.c
src/directory.c
+61
-33
No files found.
src/directory.c
View file @
32b62ade
...
@@ -64,7 +64,6 @@ typedef List DirectoryList;
...
@@ -64,7 +64,6 @@ typedef List DirectoryList;
typedef
struct
_Directory
{
typedef
struct
_Directory
{
char
*
utf8name
;
char
*
utf8name
;
DirectoryList
*
subDirectories
;
DirectoryList
*
subDirectories
;
struct
_Directory
*
parentDirectory
;
SongList
*
songs
;
SongList
*
songs
;
time_t
mtime
;
/* modification time */
time_t
mtime
;
/* modification time */
}
Directory
;
}
Directory
;
...
@@ -95,13 +94,19 @@ void deleteEmptyDirectoriesInDirectory(Directory * directory);
...
@@ -95,13 +94,19 @@ void deleteEmptyDirectoriesInDirectory(Directory * directory);
void
removeSongFromDirectory
(
Directory
*
directory
,
char
*
shortname
);
void
removeSongFromDirectory
(
Directory
*
directory
,
char
*
shortname
);
int
addSubDirectoryToDirectory
(
Directory
*
directory
,
char
*
shortname
,
char
*
name
);
int
addSubDirectoryToDirectory
(
Directory
*
directory
,
char
*
shortname
,
char
*
name
);
Directory
*
getDirectoryDetails
(
char
*
name
,
char
**
shortname
,
Directory
**
parentDirectory
);
Directory
*
getDirectory
(
char
*
name
);
Directory
*
getDirectory
(
char
*
name
);
Song
*
getSongDetails
(
char
*
file
,
char
**
shortnameRet
,
Song
*
getSongDetails
(
char
*
file
,
char
**
shortnameRet
,
Directory
**
directoryRet
);
Directory
**
directoryRet
);
void
updatePath
(
char
*
utf8path
);
void
clearUpdatePid
()
{
void
clearUpdatePid
()
{
directory_updatePid
=
0
;
directory_updatePid
=
0
;
}
}
...
@@ -164,26 +169,9 @@ int updateInit(FILE * fp, List * pathList) {
...
@@ -164,26 +169,9 @@ int updateInit(FILE * fp, List * pathList) {
if
(
pathList
)
{
if
(
pathList
)
{
ListNode
*
node
=
pathList
->
firstNode
;
ListNode
*
node
=
pathList
->
firstNode
;
Directory
*
directory
;
Song
*
song
;
char
*
shortname
;
while
(
node
)
{
while
(
node
)
{
if
(
NULL
==
(
directory
=
getDirectory
(
node
->
key
)))
updatePath
(
node
->
key
);
{
song
=
getSongDetails
(
node
->
key
,
&
shortname
,
&
directory
);
if
(
song
&&
updateSongInfo
(
song
)
<
0
)
{
removeSongFromDirectory
(
directory
,
shortname
);
}
}
else
{
if
(
updateDirectory
(
directory
)
<
0
)
{
exit
(
EXIT_FAILURE
);
}
}
node
=
node
->
nextNode
;
node
=
node
->
nextNode
;
}
}
}
}
...
@@ -216,14 +204,13 @@ int updateInit(FILE * fp, List * pathList) {
...
@@ -216,14 +204,13 @@ int updateInit(FILE * fp, List * pathList) {
return
0
;
return
0
;
}
}
Directory
*
newDirectory
(
Directory
*
parentDirectory
,
char
*
dirname
,
time_t
mtime
)
{
Directory
*
newDirectory
(
char
*
dirname
,
time_t
mtime
)
{
Directory
*
directory
;
Directory
*
directory
;
directory
=
malloc
(
sizeof
(
Directory
));
directory
=
malloc
(
sizeof
(
Directory
));
if
(
dirname
!=
NULL
)
directory
->
utf8name
=
strdup
(
dirname
);
if
(
dirname
!=
NULL
)
directory
->
utf8name
=
strdup
(
dirname
);
else
directory
->
utf8name
=
NULL
;
else
directory
->
utf8name
=
NULL
;
directory
->
parentDirectory
=
parentDirectory
;
directory
->
subDirectories
=
newDirectoryList
();
directory
->
subDirectories
=
newDirectoryList
();
directory
->
songs
=
newSongList
();
directory
->
songs
=
newSongList
();
if
(
mtime
<
0
)
isDir
(
dirname
,
&
(
directory
->
mtime
));
if
(
mtime
<
0
)
isDir
(
dirname
,
&
(
directory
->
mtime
));
...
@@ -373,6 +360,30 @@ int removeDeletedFromDirectory(Directory * directory) {
...
@@ -373,6 +360,30 @@ int removeDeletedFromDirectory(Directory * directory) {
return
0
;
return
0
;
}
}
void
updatePath
(
char
*
utf8path
)
{
Directory
*
directory
;
Directory
*
parentDirectory
;
char
*
shortname
;
/* if path is already in the DB */
if
(
NULL
==
(
directory
=
getDirectoryDetails
(
utf8path
,
&
shortname
,
&
parentDirectory
)))
{
Song
*
song
=
getSongDetails
(
utf8path
,
&
shortname
,
&
directory
);
if
(
song
&&
updateSongInfo
(
song
)
<
0
)
{
removeSongFromDirectory
(
directory
,
shortname
);
}
}
else
{
/* if updateDirectory fials, means we should delete it */
if
(
updateDirectory
(
directory
)
<
0
&&
directory
!=
mp3rootDirectory
)
{
deleteFromList
(
parentDirectory
->
subDirectories
,
shortname
);
}
}
}
int
updateDirectory
(
Directory
*
directory
)
{
int
updateDirectory
(
Directory
*
directory
)
{
DIR
*
dir
;
DIR
*
dir
;
char
cwd
[
2
];
char
cwd
[
2
];
...
@@ -460,7 +471,7 @@ int exploreDirectory(Directory * directory) {
...
@@ -460,7 +471,7 @@ int exploreDirectory(Directory * directory) {
int
addSubDirectoryToDirectory
(
Directory
*
directory
,
char
*
shortname
,
int
addSubDirectoryToDirectory
(
Directory
*
directory
,
char
*
shortname
,
char
*
name
)
char
*
name
)
{
{
Directory
*
subDirectory
=
newDirectory
(
directory
,
name
,
-
1
);
Directory
*
subDirectory
=
newDirectory
(
name
,
-
1
);
insertInList
(
directory
->
subDirectories
,
shortname
,
subDirectory
);
insertInList
(
directory
->
subDirectories
,
shortname
,
subDirectory
);
exploreDirectory
(
subDirectory
);
exploreDirectory
(
subDirectory
);
...
@@ -509,7 +520,9 @@ Directory * findSubDirectory(Directory * directory,char * name) {
...
@@ -509,7 +520,9 @@ Directory * findSubDirectory(Directory * directory,char * name) {
return
NULL
;
return
NULL
;
}
}
Directory
*
getSubDirectory
(
Directory
*
directory
,
char
*
name
)
{
Directory
*
getSubDirectory
(
Directory
*
directory
,
char
*
name
,
char
**
shortname
,
Directory
**
parentDirectory
)
{
Directory
*
subDirectory
;
Directory
*
subDirectory
;
int
len
;
int
len
;
...
@@ -519,15 +532,32 @@ Directory * getSubDirectory(Directory * directory,char * name) {
...
@@ -519,15 +532,32 @@ Directory * getSubDirectory(Directory * directory,char * name) {
if
((
subDirectory
=
findSubDirectory
(
directory
,
name
))
==
NULL
)
return
NULL
;
if
((
subDirectory
=
findSubDirectory
(
directory
,
name
))
==
NULL
)
return
NULL
;
*
shortname
=
name
;
*
parentDirectory
=
directory
;
len
=
0
;
len
=
0
;
while
(
name
[
len
]
!=
'/'
&&
name
[
len
]
!=
'\0'
)
len
++
;
while
(
name
[
len
]
!=
'/'
&&
name
[
len
]
!=
'\0'
)
len
++
;
while
(
name
[
len
]
==
'/'
)
len
++
;
while
(
name
[
len
]
==
'/'
)
len
++
;
return
getSubDirectory
(
subDirectory
,
&
(
name
[
len
]));
return
getSubDirectory
(
subDirectory
,
&
(
name
[
len
]),
shortname
,
parentDirectory
);
}
Directory
*
getDirectoryDetails
(
char
*
name
,
char
**
shortname
,
Directory
**
parentDirectory
)
{
*
shortname
=
NULL
;
*
parentDirectory
=
NULL
;
return
getSubDirectory
(
mp3rootDirectory
,
name
,
shortname
,
parentDirectory
);
}
}
Directory
*
getDirectory
(
char
*
name
)
{
Directory
*
getDirectory
(
char
*
name
)
{
return
getSubDirectory
(
mp3rootDirectory
,
name
);
char
*
shortname
;
Directory
*
parentDirectory
;
return
getSubDirectory
(
mp3rootDirectory
,
name
,
&
shortname
,
&
parentDirectory
);
}
}
int
printDirectoryList
(
FILE
*
fp
,
DirectoryList
*
directoryList
)
{
int
printDirectoryList
(
FILE
*
fp
,
DirectoryList
*
directoryList
)
{
...
@@ -623,8 +653,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) {
...
@@ -623,8 +653,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) {
}
}
if
(
NULL
==
nextDirNode
)
{
if
(
NULL
==
nextDirNode
)
{
subDirectory
=
newDirectory
(
directory
,
name
,
subDirectory
=
newDirectory
(
name
,
mtime
);
mtime
);
insertInList
(
directory
->
subDirectories
,
key
,
insertInList
(
directory
->
subDirectories
,
key
,
(
void
*
)
subDirectory
);
(
void
*
)
subDirectory
);
}
}
...
@@ -634,8 +663,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) {
...
@@ -634,8 +663,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) {
nextDirNode
=
nextDirNode
->
nextNode
;
nextDirNode
=
nextDirNode
->
nextNode
;
}
}
else
{
else
{
subDirectory
=
newDirectory
(
directory
,
name
,
subDirectory
=
newDirectory
(
name
,
mtime
);
mtime
);
insertInListBeforeNode
(
insertInListBeforeNode
(
directory
->
subDirectories
,
directory
->
subDirectories
,
nextDirNode
,
nextDirNode
,
...
@@ -704,7 +732,7 @@ int writeDirectoryDB() {
...
@@ -704,7 +732,7 @@ int writeDirectoryDB() {
int
readDirectoryDB
()
{
int
readDirectoryDB
()
{
FILE
*
fp
;
FILE
*
fp
;
if
(
!
mp3rootDirectory
)
mp3rootDirectory
=
newDirectory
(
NULL
,
NULL
,
0
);
if
(
!
mp3rootDirectory
)
mp3rootDirectory
=
newDirectory
(
NULL
,
0
);
while
(
!
(
fp
=
fopen
(
directorydb
,
"r"
))
&&
errno
==
EINTR
);
while
(
!
(
fp
=
fopen
(
directorydb
,
"r"
))
&&
errno
==
EINTR
);
if
(
!
fp
)
return
-
1
;
if
(
!
fp
)
return
-
1
;
...
@@ -1019,7 +1047,7 @@ unsigned long sumSongTimesIn(FILE * fp, char * name) {
...
@@ -1019,7 +1047,7 @@ unsigned long sumSongTimesIn(FILE * fp, char * name) {
}
}
void
initMp3Directory
()
{
void
initMp3Directory
()
{
mp3rootDirectory
=
newDirectory
(
NULL
,
NULL
,
0
);
mp3rootDirectory
=
newDirectory
(
NULL
,
0
);
exploreDirectory
(
mp3rootDirectory
);
exploreDirectory
(
mp3rootDirectory
);
}
}
...
@@ -1047,7 +1075,7 @@ Song * getSongDetails(char * file, char ** shortnameRet,
...
@@ -1047,7 +1075,7 @@ Song * getSongDetails(char * file, char ** shortnameRet,
dir
=
dup
;
dir
=
dup
;
}
}
if
(
!
(
directory
=
get
SubDirectory
(
mp3rootDirectory
,
dir
)))
{
if
(
!
(
directory
=
get
Directory
(
dir
)))
{
free
(
dup
);
free
(
dup
);
return
NULL
;
return
NULL
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment