Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
VideoLAN
medialibrary
Commits
8c0755da
Commit
8c0755da
authored
Jul 02, 2018
by
Hugo Beauzée-Luyssen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
IPlaylist: Allow media to be searched
parent
3cd602b9
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
0 deletions
+56
-0
include/medialibrary/IPlaylist.h
include/medialibrary/IPlaylist.h
+4
-0
src/Media.cpp
src/Media.cpp
+13
-0
src/Media.h
src/Media.h
+2
-0
src/Playlist.cpp
src/Playlist.cpp
+6
-0
src/Playlist.h
src/Playlist.h
+2
-0
test/unittest/PlaylistTests.cpp
test/unittest/PlaylistTests.cpp
+29
-0
No files found.
include/medialibrary/IPlaylist.h
View file @
8c0755da
...
...
@@ -28,6 +28,8 @@
namespace
medialibrary
{
class
QueryParameters
;
class
IPlaylist
{
public:
...
...
@@ -38,6 +40,8 @@ public:
virtual
unsigned
int
creationDate
()
const
=
0
;
virtual
const
std
::
string
&
artworkMrl
()
const
=
0
;
virtual
Query
<
IMedia
>
media
()
const
=
0
;
virtual
Query
<
IMedia
>
searchMedia
(
const
std
::
string
&
pattern
,
const
QueryParameters
*
params
)
const
=
0
;
///
/// \brief append Appends a media to a playlist
/// The media will be the last element of a subsequent call to media()
...
...
src/Media.cpp
View file @
8c0755da
...
...
@@ -776,6 +776,19 @@ Query<IMedia> Media::searchShowEpisodes(MediaLibraryPtr ml, const std::string& p
File
::
Type
::
Main
,
Media
::
SubType
::
ShowEpisode
);
}
Query
<
IMedia
>
Media
::
searchInPlaylist
(
MediaLibraryPtr
ml
,
const
std
::
string
&
pattern
,
int64_t
playlistId
,
const
QueryParameters
*
params
)
{
std
::
string
req
=
"FROM "
+
policy
::
MediaTable
::
Name
+
" m "
"INNER JOIN "
+
policy
::
FileTable
::
Name
+
" f ON m.id_media = f.media_id "
"LEFT JOIN PlaylistMediaRelation pmr ON pmr.media_id = m.id_media "
"WHERE pmr.playlist_id = ? AND m.is_present != 0 AND "
"m.id_media IN (SELECT rowid FROM "
+
policy
::
MediaTable
::
Name
+
"Fts "
"WHERE "
+
policy
::
MediaTable
::
Name
+
"Fts MATCH '*' || ? || '*')"
;
req
+=
sortRequest
(
params
);
return
make_query
<
Media
,
IMedia
>
(
ml
,
"m.*"
,
std
::
move
(
req
),
playlistId
,
pattern
);
}
Query
<
IMedia
>
Media
::
fetchHistory
(
MediaLibraryPtr
ml
)
{
static
const
std
::
string
req
=
"FROM "
+
policy
::
MediaTable
::
Name
+
" WHERE last_played_date IS NOT NULL"
...
...
src/Media.h
View file @
8c0755da
...
...
@@ -137,6 +137,8 @@ class Media : public IMedia, public DatabaseHelpers<Media, policy::MediaTable>
int64_t
genreId
,
const
QueryParameters
*
params
);
static
Query
<
IMedia
>
searchShowEpisodes
(
MediaLibraryPtr
ml
,
const
std
::
string
&
pattern
,
int64_t
showId
,
const
QueryParameters
*
params
);
static
Query
<
IMedia
>
searchInPlaylist
(
MediaLibraryPtr
ml
,
const
std
::
string
&
pattern
,
int64_t
playlistId
,
const
QueryParameters
*
params
);
static
Query
<
IMedia
>
fetchHistory
(
MediaLibraryPtr
ml
);
static
void
clearHistory
(
MediaLibraryPtr
ml
);
...
...
src/Playlist.cpp
View file @
8c0755da
...
...
@@ -117,6 +117,12 @@ Query<IMedia> Playlist::media() const
return
make_query
<
Media
,
IMedia
>
(
m_ml
,
"m.*"
,
req
,
m_id
);
}
Query
<
IMedia
>
Playlist
::
searchMedia
(
const
std
::
string
&
pattern
,
const
QueryParameters
*
params
)
const
{
return
Media
::
searchInPlaylist
(
m_ml
,
pattern
,
m_id
,
params
);
}
bool
Playlist
::
append
(
int64_t
mediaId
)
{
return
add
(
mediaId
,
0
);
...
...
src/Playlist.h
View file @
8c0755da
...
...
@@ -58,6 +58,8 @@ public:
virtual
unsigned
int
creationDate
()
const
override
;
virtual
const
std
::
string
&
artworkMrl
()
const
override
;
virtual
Query
<
IMedia
>
media
()
const
override
;
virtual
Query
<
IMedia
>
searchMedia
(
const
std
::
string
&
pattern
,
const
QueryParameters
*
params
)
const
override
;
virtual
bool
append
(
int64_t
mediaId
)
override
;
virtual
bool
add
(
int64_t
mediaId
,
unsigned
int
position
)
override
;
virtual
bool
move
(
int64_t
mediaId
,
unsigned
int
position
)
override
;
...
...
test/unittest/PlaylistTests.cpp
View file @
8c0755da
...
...
@@ -327,3 +327,32 @@ TEST_F( Playlists, AddDuplicate )
res
=
pl
->
append
(
m
->
id
()
);
ASSERT_FALSE
(
res
);
}
TEST_F
(
Playlists
,
SearchMedia
)
{
auto
m1
=
std
::
static_pointer_cast
<
Media
>
(
ml
->
addMedia
(
"m1.mp3"
)
);
m1
->
setTitleBuffered
(
"otter"
);
m1
->
setType
(
IMedia
::
Type
::
Audio
);
m1
->
save
();
auto
m2
=
std
::
static_pointer_cast
<
Media
>
(
ml
->
addMedia
(
"m2.mp3"
)
);
// Won't match since it's not on the beginning of a word
m2
->
setTitleBuffered
(
"ENOOTTER"
);
m2
->
setType
(
IMedia
::
Type
::
Audio
);
m2
->
save
();
auto
m3
=
std
::
static_pointer_cast
<
Media
>
(
ml
->
addMedia
(
"m3.mp3"
)
);
m3
->
setTitleBuffered
(
"otter otter otter"
);
m3
->
setType
(
IMedia
::
Type
::
Audio
);
m3
->
save
();
pl
->
append
(
m1
->
id
()
);
pl
->
append
(
m2
->
id
()
);
auto
media
=
ml
->
searchMedia
(
"otter"
,
nullptr
)
->
all
();
ASSERT_EQ
(
2u
,
media
.
size
()
);
media
=
pl
->
searchMedia
(
"otter"
,
nullptr
)
->
all
();
ASSERT_EQ
(
1u
,
media
.
size
()
);
ASSERT_EQ
(
m1
->
id
(),
media
[
0
]
->
id
()
);
}
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