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
9dc9459f
Commit
9dc9459f
authored
Jul 30, 2012
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
db_plugin: convert to C++
parent
37b92967
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
308 additions
and
334 deletions
+308
-334
Makefile.am
Makefile.am
+5
-5
DatabaseGlue.cxx
src/DatabaseGlue.cxx
+42
-13
DatabasePlugin.hxx
src/DatabasePlugin.hxx
+28
-97
DatabaseVisitor.hxx
src/DatabaseVisitor.hxx
+10
-10
Directory.cxx
src/Directory.cxx
+22
-18
SimpleDatabasePlugin.cxx
src/db/SimpleDatabasePlugin.cxx
+100
-142
SimpleDatabasePlugin.hxx
src/db/SimpleDatabasePlugin.hxx
+84
-0
simple_db_plugin.h
src/db/simple_db_plugin.h
+0
-42
directory.h
src/directory.h
+17
-7
No files found.
Makefile.am
View file @
9dc9459f
...
@@ -246,18 +246,18 @@ src_mpd_SOURCES = \
...
@@ -246,18 +246,18 @@ src_mpd_SOURCES = \
src/decoder_api.c
\
src/decoder_api.c
\
src/decoder_internal.c
\
src/decoder_internal.c
\
src/decoder_print.c
\
src/decoder_print.c
\
src/
directory.c
\
src/
Directory.cxx
\
src/directory_save.c
\
src/directory_save.c
\
src/database.c
\
src/DatabaseGlue.cxx
\
src/db_internal.h
\
src/db_error.h
\
src/db_error.h
\
src/db_lock.c src/db_lock.h
\
src/db_lock.c src/db_lock.h
\
src/db_save.c src/db_save.h
\
src/db_save.c src/db_save.h
\
src/db_print.c src/db_print.h
\
src/db_print.c src/db_print.h
\
src/db_plugin.h
\
src/db_visitor.h
\
src/db_visitor.h
\
src/DatabasePlugin.hxx
\
src/DatabaseVisitor.hxx
\
src/db_selection.h
\
src/db_selection.h
\
src/db/
simple_db_plugin.c src/db/simple_db_plugin.h
\
src/db/
SimpleDatabasePlugin.cxx src/db/SimpleDatabasePlugin.hxx
\
src/exclude.c
\
src/exclude.c
\
src/fd_util.c
\
src/fd_util.c
\
src/fifo_buffer.c src/fifo_buffer.h
\
src/fifo_buffer.c src/fifo_buffer.h
\
...
...
src/
database.c
→
src/
DatabaseGlue.cxx
View file @
9dc9459f
...
@@ -18,17 +18,22 @@
...
@@ -18,17 +18,22 @@
*/
*/
#include "config.h"
#include "config.h"
extern
"C"
{
#include "database.h"
#include "database.h"
#include "db_error.h"
#include "db_error.h"
#include "db_save.h"
#include "db_save.h"
#include "db_selection.h"
#include "db_selection.h"
#include "db_visitor.h"
#include "db_visitor.h"
#include "db_plugin.h"
#include "db/simple_db_plugin.h"
#include "directory.h"
#include "stats.h"
#include "stats.h"
#include "conf.h"
#include "conf.h"
#include "glib_compat.h"
#include "glib_compat.h"
}
#include "directory.h"
#include "DatabasePlugin.hxx"
#include "db/SimpleDatabasePlugin.hxx"
#include <glib.h>
#include <glib.h>
...
@@ -42,7 +47,7 @@
...
@@ -42,7 +47,7 @@
#undef G_LOG_DOMAIN
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "database"
#define G_LOG_DOMAIN "database"
static
struct
db
*
db
;
static
Database
*
db
;
static
bool
db_is_open
;
static
bool
db_is_open
;
bool
bool
...
@@ -57,7 +62,7 @@ db_init(const struct config_param *path, GError **error_r)
...
@@ -57,7 +62,7 @@ db_init(const struct config_param *path, GError **error_r)
struct
config_param
*
param
=
config_new_param
(
"database"
,
path
->
line
);
struct
config_param
*
param
=
config_new_param
(
"database"
,
path
->
line
);
config_add_block_param
(
param
,
"path"
,
path
->
value
,
path
->
line
);
config_add_block_param
(
param
,
"path"
,
path
->
value
,
path
->
line
);
db
=
db_plugin_new
(
&
simple_db_plugin
,
param
,
error_r
);
db
=
simple_db_plugin
.
create
(
param
,
error_r
);
config_param_free
(
param
);
config_param_free
(
param
);
...
@@ -68,10 +73,10 @@ void
...
@@ -68,10 +73,10 @@ void
db_finish
(
void
)
db_finish
(
void
)
{
{
if
(
db_is_open
)
if
(
db_is_open
)
db
_plugin_close
(
db
);
db
->
Close
(
);
if
(
db
!=
NULL
)
if
(
db
!=
NULL
)
d
b_plugin_free
(
db
)
;
d
elete
db
;
}
}
struct
directory
*
struct
directory
*
...
@@ -79,7 +84,7 @@ db_get_root(void)
...
@@ -79,7 +84,7 @@ db_get_root(void)
{
{
assert
(
db
!=
NULL
);
assert
(
db
!=
NULL
);
return
simple_db_get_root
(
db
);
return
((
SimpleDatabase
*
)
db
)
->
GetRoot
(
);
}
}
struct
directory
*
struct
directory
*
...
@@ -107,7 +112,7 @@ db_get_song(const char *file)
...
@@ -107,7 +112,7 @@ db_get_song(const char *file)
if
(
db
==
NULL
)
if
(
db
==
NULL
)
return
NULL
;
return
NULL
;
return
db
_plugin_get_song
(
db
,
file
,
NULL
);
return
db
->
GetSong
(
file
,
NULL
);
}
}
bool
bool
...
@@ -121,7 +126,31 @@ db_visit(const struct db_selection *selection,
...
@@ -121,7 +126,31 @@ db_visit(const struct db_selection *selection,
return
false
;
return
false
;
}
}
return
db_plugin_visit
(
db
,
selection
,
visitor
,
ctx
,
error_r
);
VisitDirectory
visit_directory
;
if
(
visitor
->
directory
!=
NULL
)
visit_directory
=
[
&
](
const
struct
directory
*
directory
,
GError
**
error_r2
)
{
return
visitor
->
directory
(
directory
,
ctx
,
error_r2
);
};
VisitSong
visit_song
;
if
(
visitor
->
song
!=
NULL
)
visit_song
=
[
&
](
struct
song
*
song
,
GError
**
error_r2
)
{
return
visitor
->
song
(
song
,
ctx
,
error_r2
);
};
VisitPlaylist
visit_playlist
;
if
(
visitor
->
playlist
!=
NULL
)
visit_playlist
=
[
&
](
const
struct
playlist_metadata
*
playlist
,
const
struct
directory
*
directory
,
GError
**
error_r2
)
{
return
visitor
->
playlist
(
playlist
,
directory
,
ctx
,
error_r2
);
};
return
db
->
Visit
(
selection
,
visit_directory
,
visit_song
,
visit_playlist
,
error_r
);
}
}
bool
bool
...
@@ -141,7 +170,7 @@ db_save(GError **error_r)
...
@@ -141,7 +170,7 @@ db_save(GError **error_r)
assert
(
db
!=
NULL
);
assert
(
db
!=
NULL
);
assert
(
db_is_open
);
assert
(
db_is_open
);
return
simple_db_save
(
db
,
error_r
);
return
((
SimpleDatabase
*
)
db
)
->
Save
(
error_r
);
}
}
bool
bool
...
@@ -150,7 +179,7 @@ db_load(GError **error)
...
@@ -150,7 +179,7 @@ db_load(GError **error)
assert
(
db
!=
NULL
);
assert
(
db
!=
NULL
);
assert
(
!
db_is_open
);
assert
(
!
db_is_open
);
if
(
!
db
_plugin_open
(
db
,
error
))
if
(
!
db
->
Open
(
error
))
return
false
;
return
false
;
db_is_open
=
true
;
db_is_open
=
true
;
...
@@ -166,5 +195,5 @@ db_get_mtime(void)
...
@@ -166,5 +195,5 @@ db_get_mtime(void)
assert
(
db
!=
NULL
);
assert
(
db
!=
NULL
);
assert
(
db_is_open
);
assert
(
db_is_open
);
return
simple_db_get_mtime
(
db
);
return
((
SimpleDatabase
*
)
db
)
->
GetLastModified
(
);
}
}
src/
db_plugin.h
→
src/
DatabasePlugin.hxx
View file @
9dc9459f
...
@@ -23,8 +23,10 @@
...
@@ -23,8 +23,10 @@
* plugin API for databases of song metadata.
* plugin API for databases of song metadata.
*/
*/
#ifndef MPD_DB_PLUGIN_H
#ifndef MPD_DATABASE_PLUGIN_HXX
#define MPD_DB_PLUGIN_H
#define MPD_DATABASE_PLUGIN_HXX
#include "DatabaseVisitor.hxx"
#include <glib.h>
#include <glib.h>
#include <assert.h>
#include <assert.h>
...
@@ -34,123 +36,52 @@ struct config_param;
...
@@ -34,123 +36,52 @@ struct config_param;
struct
db_selection
;
struct
db_selection
;
struct
db_visitor
;
struct
db_visitor
;
struct
db
{
class
Database
{
const
struct
db_plugin
*
plugin
;
public
:
};
struct
db_plugin
{
const
char
*
name
;
/**
* Allocates and configures a database.
*/
struct
db
*
(
*
init
)(
const
struct
config_param
*
param
,
GError
**
error_r
);
/**
/**
* Free instance data.
* Free instance data.
*/
*/
v
oid
(
*
finish
)(
struct
db
*
db
);
v
irtual
~
Database
()
{}
/**
/**
* Open the database. Read it into memory if applicable.
* Open the database. Read it into memory if applicable.
*/
*/
bool
(
*
open
)(
struct
db
*
db
,
GError
**
error_r
);
virtual
bool
Open
(
G_GNUC_UNUSED
GError
**
error_r
)
{
return
true
;
}
/**
/**
* Close the database, free allocated memory.
* Close the database, free allocated memory.
*/
*/
v
oid
(
*
close
)(
struct
db
*
db
);
v
irtual
void
Close
()
{}
/**
/**
* Look up a song (including tag data) in the database.
* Look up a song (including tag data) in the database.
*
*
* @param
the URI of the song within the music directory
* @param
uri_utf8 the URI of the song within the music
* (UTF-8)
*
directory
(UTF-8)
*/
*/
struct
song
*
(
*
get_song
)(
struct
db
*
db
,
const
char
*
uri
,
virtual
struct
song
*
GetSong
(
const
char
*
uri_utf8
,
GError
**
error_r
)
;
GError
**
error_r
)
=
0
;
/**
/**
* Visit the selected entities.
* Visit the selected entities.
*/
*/
bool
(
*
visit
)(
struct
db
*
db
,
const
struct
db_selection
*
selection
,
virtual
bool
Visit
(
const
struct
db_selection
*
selection
,
const
struct
db_visitor
*
visitor
,
void
*
ctx
,
VisitDirectory
visit_directory
,
GError
**
error_r
);
VisitSong
visit_song
,
VisitPlaylist
visit_playlist
,
GError
**
error_r
)
=
0
;
};
};
G_GNUC_MALLOC
struct
DatabasePlugin
{
static
inline
struct
db
*
const
char
*
name
;
db_plugin_new
(
const
struct
db_plugin
*
plugin
,
const
struct
config_param
*
param
,
GError
**
error_r
)
{
assert
(
plugin
!=
NULL
);
assert
(
plugin
->
init
!=
NULL
);
assert
(
plugin
->
finish
!=
NULL
);
assert
(
plugin
->
get_song
!=
NULL
);
assert
(
plugin
->
visit
!=
NULL
);
assert
(
error_r
==
NULL
||
*
error_r
==
NULL
);
struct
db
*
db
=
plugin
->
init
(
param
,
error_r
);
assert
(
db
==
NULL
||
db
->
plugin
==
plugin
);
assert
(
db
!=
NULL
||
error_r
==
NULL
||
*
error_r
!=
NULL
);
return
db
;
}
static
inline
void
db_plugin_free
(
struct
db
*
db
)
{
assert
(
db
!=
NULL
);
assert
(
db
->
plugin
!=
NULL
);
assert
(
db
->
plugin
->
finish
!=
NULL
);
db
->
plugin
->
finish
(
db
);
}
static
inline
bool
db_plugin_open
(
struct
db
*
db
,
GError
**
error_r
)
{
assert
(
db
!=
NULL
);
assert
(
db
->
plugin
!=
NULL
);
return
db
->
plugin
->
open
!=
NULL
?
db
->
plugin
->
open
(
db
,
error_r
)
:
true
;
}
static
inline
void
db_plugin_close
(
struct
db
*
db
)
{
assert
(
db
!=
NULL
);
assert
(
db
->
plugin
!=
NULL
);
if
(
db
->
plugin
->
close
!=
NULL
)
db
->
plugin
->
close
(
db
);
}
static
inline
struct
song
*
db_plugin_get_song
(
struct
db
*
db
,
const
char
*
uri
,
GError
**
error_r
)
{
assert
(
db
!=
NULL
);
assert
(
db
->
plugin
!=
NULL
);
assert
(
db
->
plugin
->
get_song
!=
NULL
);
assert
(
uri
!=
NULL
);
return
db
->
plugin
->
get_song
(
db
,
uri
,
error_r
);
}
static
inline
bool
db_plugin_visit
(
struct
db
*
db
,
const
struct
db_selection
*
selection
,
const
struct
db_visitor
*
visitor
,
void
*
ctx
,
GError
**
error_r
)
{
assert
(
db
!=
NULL
);
assert
(
db
->
plugin
!=
NULL
);
assert
(
selection
!=
NULL
);
assert
(
visitor
!=
NULL
);
assert
(
error_r
==
NULL
||
*
error_r
==
NULL
);
return
db
->
plugin
->
visit
(
db
,
selection
,
visitor
,
ctx
,
error_r
);
/**
}
* Allocates and configures a database.
*/
Database
*
(
*
create
)(
const
struct
config_param
*
param
,
GError
**
error_r
);
};
#endif
#endif
src/
db_internal.h
→
src/
DatabaseVisitor.hxx
View file @
9dc9459f
...
@@ -17,19 +17,19 @@
...
@@ -17,19 +17,19 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
*/
#ifndef MPD_D
B_INTERNAL_H
#ifndef MPD_D
ATABASE_VISITOR_HXX
#define MPD_D
B_INTERNAL_H
#define MPD_D
ATABASE_VISITOR_HXX
#include
"db_plugin.h"
#include
<functional>
#include <
assert
.h>
#include <
glib
.h>
static
inline
void
struct
directory
;
db_base_init
(
struct
db
*
db
,
const
struct
db_plugin
*
plugin
)
struct
song
;
{
struct
playlist_metadata
;
assert
(
plugin
!=
NULL
);
db
->
plugin
=
plugin
;
typedef
std
::
function
<
bool
(
const
struct
directory
*
,
GError
**
)
>
VisitDirectory
;
}
typedef
std
::
function
<
bool
(
struct
song
*
,
GError
**
)
>
VisitSong
;
typedef
std
::
function
<
bool
(
const
struct
playlist_metadata
*
,
const
struct
directory
*
,
GError
**
)
>
VisitPlaylist
;
#endif
#endif
src/
directory.c
→
src/
Directory.cxx
View file @
9dc9459f
...
@@ -19,6 +19,8 @@
...
@@ -19,6 +19,8 @@
#include "config.h"
#include "config.h"
#include "directory.h"
#include "directory.h"
extern
"C"
{
#include "song.h"
#include "song.h"
#include "song_sort.h"
#include "song_sort.h"
#include "playlist_vector.h"
#include "playlist_vector.h"
...
@@ -26,6 +28,7 @@
...
@@ -26,6 +28,7 @@
#include "util/list_sort.h"
#include "util/list_sort.h"
#include "db_visitor.h"
#include "db_visitor.h"
#include "db_lock.h"
#include "db_lock.h"
}
#include <glib.h>
#include <glib.h>
...
@@ -36,14 +39,15 @@
...
@@ -36,14 +39,15 @@
struct
directory
*
struct
directory
*
directory_new
(
const
char
*
path
,
struct
directory
*
parent
)
directory_new
(
const
char
*
path
,
struct
directory
*
parent
)
{
{
struct
directory
*
directory
;
size_t
pathlen
=
strlen
(
path
);
size_t
pathlen
=
strlen
(
path
);
assert
(
path
!=
NULL
);
assert
(
path
!=
NULL
);
assert
((
*
path
==
0
)
==
(
parent
==
NULL
));
assert
((
*
path
==
0
)
==
(
parent
==
NULL
));
directory
=
g_malloc0
(
sizeof
(
*
directory
)
-
struct
directory
*
directory
=
sizeof
(
directory
->
path
)
+
pathlen
+
1
);
(
struct
directory
*
)
g_malloc0
(
sizeof
(
*
directory
)
-
sizeof
(
directory
->
path
)
+
pathlen
+
1
);
INIT_LIST_HEAD
(
&
directory
->
children
);
INIT_LIST_HEAD
(
&
directory
->
children
);
INIT_LIST_HEAD
(
&
directory
->
songs
);
INIT_LIST_HEAD
(
&
directory
->
songs
);
INIT_LIST_HEAD
(
&
directory
->
playlists
);
INIT_LIST_HEAD
(
&
directory
->
playlists
);
...
@@ -277,36 +281,36 @@ directory_sort(struct directory *directory)
...
@@ -277,36 +281,36 @@ directory_sort(struct directory *directory)
}
}
bool
bool
directory_walk
(
const
struct
directory
*
directory
,
bool
recursive
,
directory
::
Walk
(
bool
recursive
,
const
struct
db_visitor
*
visitor
,
void
*
ctx
,
VisitDirectory
visit_directory
,
VisitSong
visit_song
,
GError
**
error_r
)
VisitPlaylist
visit_playlist
,
GError
**
error_r
)
const
{
{
assert
(
directory
!=
NULL
);
assert
(
visitor
!=
NULL
);
assert
(
error_r
==
NULL
||
*
error_r
==
NULL
);
assert
(
error_r
==
NULL
||
*
error_r
==
NULL
);
if
(
visit
or
->
song
!=
NULL
)
{
if
(
visit
_song
)
{
struct
song
*
song
;
struct
song
*
song
;
directory_for_each_song
(
song
,
directory
)
directory_for_each_song
(
song
,
this
)
if
(
!
visit
or
->
song
(
song
,
ctx
,
error_r
))
if
(
!
visit
_song
(
song
,
error_r
))
return
false
;
return
false
;
}
}
if
(
visit
or
->
playlist
!=
NULL
)
{
if
(
visit
_playlist
)
{
struct
playlist_metadata
*
i
;
struct
playlist_metadata
*
i
;
directory_for_each_playlist
(
i
,
directory
)
directory_for_each_playlist
(
i
,
this
)
if
(
!
visit
or
->
playlist
(
i
,
directory
,
ctx
,
error_r
))
if
(
!
visit
_playlist
(
i
,
this
,
error_r
))
return
false
;
return
false
;
}
}
struct
directory
*
child
;
struct
directory
*
child
;
directory_for_each_child
(
child
,
directory
)
{
directory_for_each_child
(
child
,
this
)
{
if
(
visit
or
->
directory
!=
NULL
&&
if
(
visit
_directory
&&
!
visit
or
->
directory
(
child
,
ctx
,
error_r
))
!
visit
_directory
(
child
,
error_r
))
return
false
;
return
false
;
if
(
recursive
&&
if
(
recursive
&&
!
directory_walk
(
child
,
recursive
,
visitor
,
ctx
,
error_r
))
!
child
->
Walk
(
recursive
,
visit_directory
,
visit_song
,
visit_playlist
,
error_r
))
return
false
;
return
false
;
}
}
...
...
src/db/
simple_db_plugin.c
→
src/db/
SimpleDatabasePlugin.cxx
View file @
9dc9459f
This diff is collapsed.
Click to expand it.
src/db/SimpleDatabasePlugin.hxx
0 → 100644
View file @
9dc9459f
/*
* Copyright (C) 2003-2011 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_SIMPLE_DATABASE_PLUGIN_HXX
#define MPD_SIMPLE_DATABASE_PLUGIN_HXX
#include "DatabasePlugin.hxx"
#include "gcc.h"
#include <cassert>
#include <string>
#include <glib.h>
#include <stdbool.h>
#include <time.h>
struct
directory
;
class
SimpleDatabase
:
public
Database
{
std
::
string
path
;
struct
directory
*
root
;
time_t
mtime
;
public
:
G_GNUC_PURE
struct
directory
*
GetRoot
()
{
assert
(
root
!=
NULL
);
return
root
;
}
bool
Save
(
GError
**
error_r
);
G_GNUC_PURE
time_t
GetLastModified
()
const
{
return
mtime
;
}
static
Database
*
Create
(
const
struct
config_param
*
param
,
GError
**
error_r
);
virtual
bool
Open
(
GError
**
error_r
)
override
;
virtual
void
Close
()
override
;
virtual
struct
song
*
GetSong
(
const
char
*
uri_utf8
,
GError
**
error_r
)
override
;
virtual
bool
Visit
(
const
struct
db_selection
*
selection
,
VisitDirectory
visit_directory
,
VisitSong
visit_song
,
VisitPlaylist
visit_playlist
,
GError
**
error_r
)
override
;
protected
:
bool
Configure
(
const
struct
config_param
*
param
,
GError
**
error_r
);
G_GNUC_PURE
bool
Check
(
GError
**
error_r
)
const
;
bool
Load
(
GError
**
error_r
);
G_GNUC_PURE
const
struct
directory
*
LookupDirectory
(
const
char
*
uri
)
const
;
};
extern
const
DatabasePlugin
simple_db_plugin
;
#endif
src/db/simple_db_plugin.h
deleted
100644 → 0
View file @
37b92967
/*
* Copyright (C) 2003-2011 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_SIMPLE_DB_PLUGIN_H
#define MPD_SIMPLE_DB_PLUGIN_H
#include <glib.h>
#include <stdbool.h>
#include <time.h>
extern
const
struct
db_plugin
simple_db_plugin
;
struct
db
;
G_GNUC_PURE
struct
directory
*
simple_db_get_root
(
struct
db
*
db
);
bool
simple_db_save
(
struct
db
*
db
,
GError
**
error_r
);
G_GNUC_PURE
time_t
simple_db_get_mtime
(
const
struct
db
*
db
);
#endif
src/directory.h
View file @
9dc9459f
...
@@ -23,6 +23,10 @@
...
@@ -23,6 +23,10 @@
#include "check.h"
#include "check.h"
#include "util/list.h"
#include "util/list.h"
#ifdef __cplusplus
#include "DatabaseVisitor.hxx"
#endif
#include <glib.h>
#include <glib.h>
#include <stdbool.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/types.h>
...
@@ -86,8 +90,20 @@ struct directory {
...
@@ -86,8 +90,20 @@ struct directory {
dev_t
device
;
dev_t
device
;
bool
have_stat
;
/* not needed if ino_t == dev_t == 0 is impossible */
bool
have_stat
;
/* not needed if ino_t == dev_t == 0 is impossible */
char
path
[
sizeof
(
long
)];
char
path
[
sizeof
(
long
)];
#ifdef __cplusplus
/**
* Caller must lock #db_mutex.
*/
bool
Walk
(
bool
recursive
,
VisitDirectory
visit_directory
,
VisitSong
visit_song
,
VisitPlaylist
visit_playlist
,
GError
**
error_r
)
const
;
#endif
};
};
G_BEGIN_DECLS
static
inline
bool
static
inline
bool
isRootDirectory
(
const
char
*
name
)
isRootDirectory
(
const
char
*
name
)
{
{
...
@@ -251,12 +267,6 @@ directory_lookup_song(struct directory *directory, const char *uri);
...
@@ -251,12 +267,6 @@ directory_lookup_song(struct directory *directory, const char *uri);
void
void
directory_sort
(
struct
directory
*
directory
);
directory_sort
(
struct
directory
*
directory
);
/**
G_END_DECLS
* Caller must lock #db_mutex.
*/
bool
directory_walk
(
const
struct
directory
*
directory
,
bool
recursive
,
const
struct
db_visitor
*
visitor
,
void
*
ctx
,
GError
**
error_r
);
#endif
#endif
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