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
8575a814
Commit
8575a814
authored
Jul 04, 2018
by
Hugo Beauzée-Luyssen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a Stream media type
parent
4b72828b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
57 additions
and
5 deletions
+57
-5
include/medialibrary/IMedia.h
include/medialibrary/IMedia.h
+6
-0
include/medialibrary/IMediaLibrary.h
include/medialibrary/IMediaLibrary.h
+7
-0
src/Media.cpp
src/Media.cpp
+2
-2
src/MediaLibrary.cpp
src/MediaLibrary.cpp
+13
-3
src/MediaLibrary.h
src/MediaLibrary.h
+4
-0
test/unittest/MediaTests.cpp
test/unittest/MediaTests.cpp
+25
-0
No files found.
include/medialibrary/IMedia.h
View file @
8575a814
...
...
@@ -64,6 +64,12 @@ class IMedia
* playback history.
*/
External
,
/**
* Represent a stream, which is a specific kind of External media.
* This type of media is also intended to be inserted manually by
* the user.
*/
Stream
,
};
enum
class
SubType
:
uint8_t
{
...
...
include/medialibrary/IMediaLibrary.h
View file @
8575a814
...
...
@@ -264,6 +264,13 @@ class IMediaLibrary
* The media can be fetched using media( std::string ) afterward.
*/
virtual
MediaPtr
addExternalMedia
(
const
std
::
string
&
mrl
)
=
0
;
/**
* @brief addStream Create an external media of type IMedia::Type::Stream
*
* This is equivalent to addExternalMedia, except for the resulting
* new media's type
*/
virtual
MediaPtr
addStream
(
const
std
::
string
&
mrl
)
=
0
;
virtual
Query
<
IMedia
>
audioFiles
(
const
QueryParameters
*
params
=
nullptr
)
const
=
0
;
virtual
Query
<
IMedia
>
videoFiles
(
const
QueryParameters
*
params
=
nullptr
)
const
=
0
;
virtual
AlbumPtr
album
(
int64_t
id
)
const
=
0
;
...
...
src/Media.cpp
View file @
8575a814
...
...
@@ -627,10 +627,10 @@ Query<IMedia> Media::search( MediaLibraryPtr ml, const std::string& title,
" WHERE "
+
policy
::
MediaTable
::
Name
+
"Fts MATCH '*' || ? || '*')"
" AND f.is_present = 1"
" AND f.type = ?"
" AND m.type != ?"
;
" AND m.type !=
? AND m.type !=
?"
;
req
+=
sortRequest
(
params
);
return
make_query
<
Media
,
IMedia
>
(
ml
,
"m.*"
,
req
,
title
,
File
::
Type
::
Main
,
Media
::
Type
::
External
);
Media
::
Type
::
External
,
Media
::
Type
::
Stream
);
}
Query
<
IMedia
>
Media
::
search
(
MediaLibraryPtr
ml
,
const
std
::
string
&
title
,
...
...
src/MediaLibrary.cpp
View file @
8575a814
...
...
@@ -435,13 +435,13 @@ MediaPtr MediaLibrary::media( const std::string& mrl ) const
return
file
->
media
();
}
MediaPtr
MediaLibrary
::
addExternalMedia
(
const
std
::
string
&
mrl
)
MediaPtr
MediaLibrary
::
addExternalMedia
(
const
std
::
string
&
mrl
,
IMedia
::
Type
type
)
{
try
{
return
sqlite
::
Tools
::
withRetries
(
3
,
[
this
,
&
mrl
]()
->
MediaPtr
{
return
sqlite
::
Tools
::
withRetries
(
3
,
[
this
,
&
mrl
,
type
]()
->
MediaPtr
{
auto
t
=
m_dbConnection
->
newTransaction
();
auto
media
=
Media
::
create
(
this
,
IMedia
::
Type
::
External
,
utils
::
file
::
fileName
(
mrl
)
);
auto
media
=
Media
::
create
(
this
,
type
,
utils
::
file
::
fileName
(
mrl
)
);
if
(
media
==
nullptr
)
return
nullptr
;
if
(
media
->
addExternalMrl
(
mrl
,
IFile
::
Type
::
Main
)
==
nullptr
)
...
...
@@ -457,6 +457,16 @@ MediaPtr MediaLibrary::addExternalMedia( const std::string& mrl )
}
}
MediaPtr
MediaLibrary
::
addExternalMedia
(
const
std
::
string
&
mrl
)
{
return
addExternalMedia
(
mrl
,
IMedia
::
Type
::
External
);
}
MediaPtr
MediaLibrary
::
addStream
(
const
std
::
string
&
mrl
)
{
return
addExternalMedia
(
mrl
,
IMedia
::
Type
::
Stream
);
}
Query
<
IMedia
>
MediaLibrary
::
audioFiles
(
const
QueryParameters
*
params
)
const
{
return
Media
::
listAll
(
this
,
IMedia
::
Type
::
Audio
,
params
);
...
...
src/MediaLibrary.h
View file @
8575a814
...
...
@@ -28,6 +28,7 @@
#include "Settings.h"
#include "medialibrary/IDeviceLister.h"
#include "medialibrary/IMedia.h"
namespace
medialibrary
{
...
...
@@ -73,6 +74,7 @@ class MediaLibrary : public IMediaLibrary, public IDeviceListerCb
virtual
MediaPtr
media
(
int64_t
mediaId
)
const
override
;
virtual
MediaPtr
media
(
const
std
::
string
&
mrl
)
const
override
;
virtual
MediaPtr
addExternalMedia
(
const
std
::
string
&
mrl
)
override
;
virtual
MediaPtr
addStream
(
const
std
::
string
&
mrl
)
override
;
virtual
Query
<
IMedia
>
audioFiles
(
const
QueryParameters
*
params
)
const
override
;
virtual
Query
<
IMedia
>
videoFiles
(
const
QueryParameters
*
params
)
const
override
;
...
...
@@ -206,6 +208,8 @@ class MediaLibrary : public IMediaLibrary, public IDeviceListerCb
bool
onDeviceChanged
(
fs
::
IFileSystemFactory
&
fsFactory
,
Device
&
device
);
bool
createThumbnailFolder
(
const
std
::
string
&
thumbnailPath
)
const
;
MediaPtr
addExternalMedia
(
const
std
::
string
&
mrl
,
IMedia
::
Type
type
);
protected:
virtual
void
addLocalFsFactory
();
...
...
test/unittest/MediaTests.cpp
View file @
8575a814
...
...
@@ -685,6 +685,31 @@ TEST_F( Medias, SortFilename )
ASSERT_EQ
(
m3
->
id
(),
media
[
0
]
->
id
()
);
}
TEST_F
(
Medias
,
CreateStream
)
{
auto
m1
=
ml
->
addStream
(
"http://foo.bar/media.mkv"
);
ASSERT_EQ
(
IMedia
::
Type
::
Stream
,
m1
->
type
()
);
}
TEST_F
(
Medias
,
SearchExternal
)
{
auto
m1
=
std
::
static_pointer_cast
<
Media
>
(
ml
->
addExternalMedia
(
"localfile.mkv"
)
);
m1
->
setTitle
(
"local otter"
);
auto
m2
=
std
::
static_pointer_cast
<
Media
>
(
ml
->
addStream
(
"http://remote.file/media.asf"
)
);
m2
->
setTitle
(
"remote otter"
);
auto
media
=
ml
->
searchMedia
(
"otter"
,
nullptr
)
->
all
();
ASSERT_EQ
(
0u
,
media
.
size
()
);
m1
->
setType
(
IMedia
::
Type
::
Video
);
m1
->
save
();
m2
->
setType
(
IMedia
::
Type
::
Video
);
m2
->
save
();
media
=
ml
->
searchMedia
(
"otter"
,
nullptr
)
->
all
();
ASSERT_EQ
(
2u
,
media
.
size
()
);
}
class
FetchMedia
:
public
Tests
{
protected:
...
...
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