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
29072797
Commit
29072797
authored
Feb 01, 2014
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
db/DatabasePlaylist: pass Database reference around
Reduce global variable usage, move to frontend code.
parent
db69cead
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
53 additions
and
27 deletions
+53
-27
SongLoader.cxx
src/SongLoader.cxx
+4
-3
SongLoader.hxx
src/SongLoader.hxx
+19
-0
DatabaseCommands.cxx
src/command/DatabaseCommands.cxx
+6
-1
PlaylistCommands.cxx
src/command/PlaylistCommands.cxx
+6
-1
DatabasePlaylist.cxx
src/db/DatabasePlaylist.cxx
+3
-7
DatabasePlaylist.hxx
src/db/DatabasePlaylist.hxx
+4
-2
DatabaseSong.cxx
src/db/DatabaseSong.cxx
+3
-8
DatabaseSong.hxx
src/db/DatabaseSong.hxx
+2
-1
test_translate_song.cxx
test/test_translate_song.cxx
+6
-4
No files found.
src/SongLoader.cxx
View file @
29072797
...
...
@@ -92,11 +92,12 @@ SongLoader::LoadSong(const char *uri_utf8, Error &error) const
/* URI relative to the music directory */
#ifdef ENABLE_DATABASE
return
DatabaseDetachSong
(
uri_utf8
,
error
);
#else
if
(
db
!=
nullptr
)
return
DatabaseDetachSong
(
*
db
,
uri_utf8
,
error
);
#endif
error
.
Set
(
playlist_domain
,
int
(
PlaylistResult
::
NO_SUCH_SONG
),
"No database"
);
return
nullptr
;
#endif
}
}
src/SongLoader.hxx
View file @
29072797
...
...
@@ -20,9 +20,13 @@
#ifndef MPD_SONG_LOADER_HXX
#define MPD_SONG_LOADER_HXX
#include "check.h"
#include "Compiler.h"
#include <cstddef>
class
Client
;
class
Database
;
class
DetachedSong
;
class
Error
;
...
...
@@ -35,11 +39,26 @@ class Error;
class
SongLoader
{
const
Client
*
const
client
;
#ifdef ENABLE_DATABASE
const
Database
*
const
db
;
#endif
public
:
#ifdef ENABLE_DATABASE
SongLoader
(
const
Client
*
_client
,
const
Database
*
_db
=
nullptr
)
:
client
(
_client
),
db
(
_db
)
{}
explicit
SongLoader
(
const
Client
&
_client
)
:
client
(
&
_client
),
db
(
nullptr
)
{}
explicit
SongLoader
(
const
Database
*
_db
)
:
client
(
nullptr
),
db
(
_db
)
{}
explicit
SongLoader
(
std
::
nullptr_t
)
:
client
(
nullptr
),
db
(
nullptr
)
{}
#else
explicit
SongLoader
(
const
Client
&
_client
)
:
client
(
&
_client
)
{}
explicit
SongLoader
(
const
Client
*
_client
)
:
client
(
_client
)
{}
#endif
gcc_nonnull_all
DetachedSong
*
LoadSong
(
const
char
*
uri_utf8
,
Error
&
error
)
const
;
...
...
src/command/DatabaseCommands.cxx
View file @
29072797
...
...
@@ -19,6 +19,7 @@
#include "config.h"
#include "DatabaseCommands.hxx"
#include "db/DatabaseGlue.hxx"
#include "db/DatabaseQueue.hxx"
#include "db/DatabasePlaylist.hxx"
#include "db/DatabasePrint.hxx"
...
...
@@ -119,7 +120,11 @@ handle_searchaddpl(Client &client, int argc, char *argv[])
}
Error
error
;
return
search_add_to_playlist
(
""
,
playlist
,
&
filter
,
error
)
const
Database
*
db
=
GetDatabase
(
error
);
if
(
db
==
nullptr
)
return
print_error
(
client
,
error
);
return
search_add_to_playlist
(
*
db
,
""
,
playlist
,
&
filter
,
error
)
?
CommandResult
::
OK
:
print_error
(
client
,
error
);
}
...
...
src/command/PlaylistCommands.cxx
View file @
29072797
...
...
@@ -19,6 +19,7 @@
#include "config.h"
#include "PlaylistCommands.hxx"
#include "db/DatabaseGlue.hxx"
#include "db/DatabasePlaylist.hxx"
#include "CommandError.hxx"
#include "PlaylistPrint.hxx"
...
...
@@ -192,7 +193,11 @@ handle_playlistadd(Client &client, gcc_unused int argc, char *argv[])
success
=
spl_append_uri
(
playlist
,
loader
,
uri
,
error
);
}
else
{
#ifdef ENABLE_DATABASE
success
=
search_add_to_playlist
(
uri
,
playlist
,
nullptr
,
const
Database
*
db
=
GetDatabase
(
error
);
if
(
db
==
nullptr
)
return
print_error
(
client
,
error
);
success
=
search_add_to_playlist
(
*
db
,
uri
,
playlist
,
nullptr
,
error
);
#else
success
=
false
;
...
...
src/db/DatabasePlaylist.cxx
View file @
29072797
...
...
@@ -21,7 +21,6 @@
#include "DatabasePlaylist.hxx"
#include "Selection.hxx"
#include "PlaylistFile.hxx"
#include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx"
#include "DetachedSong.hxx"
#include "Mapper.hxx"
...
...
@@ -37,17 +36,14 @@ AddSong(const char *playlist_path_utf8,
}
bool
search_add_to_playlist
(
const
char
*
uri
,
const
char
*
playlist_path_utf8
,
search_add_to_playlist
(
const
Database
&
db
,
const
char
*
uri
,
const
char
*
playlist_path_utf8
,
const
SongFilter
*
filter
,
Error
&
error
)
{
const
Database
*
db
=
GetDatabase
(
error
);
if
(
db
==
nullptr
)
return
false
;
const
DatabaseSelection
selection
(
uri
,
true
,
filter
);
using
namespace
std
::
placeholders
;
const
auto
f
=
std
::
bind
(
AddSong
,
playlist_path_utf8
,
_1
,
_2
);
return
db
->
Visit
(
selection
,
f
,
error
);
return
db
.
Visit
(
selection
,
f
,
error
);
}
src/db/DatabasePlaylist.hxx
View file @
29072797
...
...
@@ -22,12 +22,14 @@
#include "Compiler.h"
class
Database
;
class
SongFilter
;
class
Error
;
gcc_nonnull
(
1
,
2
)
gcc_nonnull
(
2
,
3
)
bool
search_add_to_playlist
(
const
char
*
uri
,
const
char
*
path_utf8
,
search_add_to_playlist
(
const
Database
&
db
,
const
char
*
uri
,
const
char
*
path_utf8
,
const
SongFilter
*
filter
,
Error
&
error
);
...
...
src/db/DatabaseSong.cxx
View file @
29072797
...
...
@@ -19,23 +19,18 @@
#include "config.h"
#include "DatabaseSong.hxx"
#include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx"
#include "DetachedSong.hxx"
#include "Mapper.hxx"
DetachedSong
*
DatabaseDetachSong
(
const
char
*
uri
,
Error
&
error
)
DatabaseDetachSong
(
const
Database
&
db
,
const
char
*
uri
,
Error
&
error
)
{
const
Database
*
db
=
GetDatabase
(
error
);
if
(
db
==
nullptr
)
return
nullptr
;
const
LightSong
*
tmp
=
db
->
GetSong
(
uri
,
error
);
const
LightSong
*
tmp
=
db
.
GetSong
(
uri
,
error
);
if
(
tmp
==
nullptr
)
return
nullptr
;
DetachedSong
*
song
=
new
DetachedSong
(
map_song_detach
(
*
tmp
));
db
->
ReturnSong
(
tmp
);
db
.
ReturnSong
(
tmp
);
return
song
;
}
src/db/DatabaseSong.hxx
View file @
29072797
...
...
@@ -22,6 +22,7 @@
#include "Compiler.h"
class
Database
;
class
DetachedSong
;
class
Error
;
...
...
@@ -33,6 +34,6 @@ class Error;
*/
gcc_malloc
gcc_nonnull_all
DetachedSong
*
DatabaseDetachSong
(
const
char
*
uri
,
Error
&
error
);
DatabaseDetachSong
(
const
Database
&
db
,
const
char
*
uri
,
Error
&
error
);
#endif
test/test_translate_song.cxx
View file @
29072797
...
...
@@ -117,7 +117,8 @@ static const char *uri1 = "/foo/bar.ogg";
static
const
char
*
uri2
=
"foo/bar.ogg"
;
DetachedSong
*
DatabaseDetachSong
(
const
char
*
uri
,
gcc_unused
Error
&
error
)
DatabaseDetachSong
(
gcc_unused
const
Database
&
db
,
const
char
*
uri
,
gcc_unused
Error
&
error
)
{
if
(
strcmp
(
uri
,
uri2
)
==
0
)
return
new
DetachedSong
(
uri
,
MakeTag2a
());
...
...
@@ -236,7 +237,7 @@ class TranslateSongTest : public CppUnit::TestFixture {
}
void
TestInDatabase
()
{
const
SongLoader
loader
(
nullptr
);
const
SongLoader
loader
(
reinterpret_cast
<
const
Database
*>
(
1
)
);
DetachedSong
song1
(
"doesntexist"
);
CPPUNIT_ASSERT
(
!
playlist_check_translate_song
(
song1
,
nullptr
,
...
...
@@ -258,8 +259,9 @@ class TranslateSongTest : public CppUnit::TestFixture {
}
void
TestRelative
()
{
const
SongLoader
secure_loader
(
nullptr
);
const
SongLoader
insecure_loader
(
reinterpret_cast
<
const
Client
*>
(
1
));
const
Database
&
db
=
*
reinterpret_cast
<
const
Database
*>
(
1
);
const
SongLoader
secure_loader
(
&
db
);
const
SongLoader
insecure_loader
(
reinterpret_cast
<
const
Client
*>
(
1
),
&
db
);
/* map to music_directory */
DetachedSong
song1
(
"bar.ogg"
,
MakeTag2b
());
...
...
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