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
39529204
Commit
39529204
authored
Aug 27, 2014
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Playlist: use std::chrono::duration for Seek*()
parent
c2001a72
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
26 deletions
+62
-26
Partition.hxx
src/Partition.hxx
+4
-3
PlayerCommands.cxx
src/command/PlayerCommands.cxx
+8
-6
ArgParser.cxx
src/protocol/ArgParser.cxx
+23
-0
ArgParser.hxx
src/protocol/ArgParser.hxx
+8
-0
Playlist.hxx
src/queue/Playlist.hxx
+5
-3
PlaylistControl.cxx
src/queue/PlaylistControl.cxx
+10
-10
PlaylistState.cxx
src/queue/PlaylistState.cxx
+4
-4
No files found.
src/Partition.hxx
View file @
39529204
...
...
@@ -25,6 +25,7 @@
#include "mixer/Listener.hxx"
#include "PlayerControl.hxx"
#include "PlayerListener.hxx"
#include "Chrono.hxx"
struct
Instance
;
class
MultipleOutputs
;
...
...
@@ -141,15 +142,15 @@ struct Partition final : private PlayerListener, private MixerListener {
}
PlaylistResult
SeekSongPosition
(
unsigned
song_position
,
float
seek_time
)
{
SongTime
seek_time
)
{
return
playlist
.
SeekSongPosition
(
pc
,
song_position
,
seek_time
);
}
PlaylistResult
SeekSongId
(
unsigned
song_id
,
float
seek_time
)
{
PlaylistResult
SeekSongId
(
unsigned
song_id
,
SongTime
seek_time
)
{
return
playlist
.
SeekSongId
(
pc
,
song_id
,
seek_time
);
}
PlaylistResult
SeekCurrent
(
float
seek_time
,
bool
relative
)
{
PlaylistResult
SeekCurrent
(
SignedSongTime
seek_time
,
bool
relative
)
{
return
playlist
.
SeekCurrent
(
pc
,
seek_time
,
relative
);
}
...
...
src/command/PlayerCommands.cxx
View file @
39529204
...
...
@@ -300,11 +300,12 @@ handle_clearerror(gcc_unused Client &client,
CommandResult
handle_seek
(
Client
&
client
,
gcc_unused
unsigned
argc
,
char
*
argv
[])
{
unsigned
song
,
seek_time
;
unsigned
song
;
SongTime
seek_time
;
if
(
!
check_unsigned
(
client
,
&
song
,
argv
[
1
]))
return
CommandResult
::
ERROR
;
if
(
!
check_unsigned
(
client
,
&
seek_time
,
argv
[
2
]))
if
(
!
ParseCommandArg
(
client
,
seek_time
,
argv
[
2
]))
return
CommandResult
::
ERROR
;
PlaylistResult
result
=
...
...
@@ -315,11 +316,12 @@ handle_seek(Client &client, gcc_unused unsigned argc, char *argv[])
CommandResult
handle_seekid
(
Client
&
client
,
gcc_unused
unsigned
argc
,
char
*
argv
[])
{
unsigned
id
,
seek_time
;
unsigned
id
;
SongTime
seek_time
;
if
(
!
check_unsigned
(
client
,
&
id
,
argv
[
1
]))
return
CommandResult
::
ERROR
;
if
(
!
check_unsigned
(
client
,
&
seek_time
,
argv
[
2
]))
if
(
!
ParseCommandArg
(
client
,
seek_time
,
argv
[
2
]))
return
CommandResult
::
ERROR
;
PlaylistResult
result
=
...
...
@@ -332,8 +334,8 @@ handle_seekcur(Client &client, gcc_unused unsigned argc, char *argv[])
{
const
char
*
p
=
argv
[
1
];
bool
relative
=
*
p
==
'+'
||
*
p
==
'-'
;
int
seek_time
;
if
(
!
check_int
(
client
,
&
seek_time
,
p
))
SignedSongTime
seek_time
;
if
(
!
ParseCommandArg
(
client
,
seek_time
,
p
))
return
CommandResult
::
ERROR
;
PlaylistResult
result
=
...
...
src/protocol/ArgParser.cxx
View file @
39529204
...
...
@@ -20,6 +20,7 @@
#include "config.h"
#include "ArgParser.hxx"
#include "Result.hxx"
#include "Chrono.hxx"
#include <limits>
...
...
@@ -186,3 +187,25 @@ check_float(Client &client, float *value_r, const char *s)
*
value_r
=
value
;
return
true
;
}
bool
ParseCommandArg
(
Client
&
client
,
SongTime
&
value_r
,
const
char
*
s
)
{
unsigned
value
;
bool
success
=
check_unsigned
(
client
,
&
value
,
s
);
if
(
success
)
value_r
=
SongTime
::
FromS
(
value
);
return
success
;
}
bool
ParseCommandArg
(
Client
&
client
,
SignedSongTime
&
value_r
,
const
char
*
s
)
{
int
value
;
bool
success
=
check_int
(
client
,
&
value
,
s
);
if
(
success
)
value_r
=
SignedSongTime
::
FromS
(
value
);
return
success
;
}
src/protocol/ArgParser.hxx
View file @
39529204
...
...
@@ -25,6 +25,8 @@
#include <stdint.h>
class
Client
;
class
SongTime
;
class
SignedSongTime
;
bool
check_uint32
(
Client
&
client
,
uint32_t
*
dst
,
const
char
*
s
);
...
...
@@ -45,4 +47,10 @@ check_bool(Client &client, bool *value_r, const char *s);
bool
check_float
(
Client
&
client
,
float
*
value_r
,
const
char
*
s
);
bool
ParseCommandArg
(
Client
&
client
,
SongTime
&
value_r
,
const
char
*
s
);
bool
ParseCommandArg
(
Client
&
client
,
SignedSongTime
&
value_r
,
const
char
*
s
);
#endif
src/queue/Playlist.hxx
View file @
39529204
...
...
@@ -29,6 +29,8 @@ class DetachedSong;
class
Database
;
class
Error
;
class
SongLoader
;
class
SongTime
;
class
SignedSongTime
;
struct
playlist
{
/**
...
...
@@ -251,10 +253,10 @@ public:
PlaylistResult
SeekSongPosition
(
PlayerControl
&
pc
,
unsigned
song_position
,
float
seek_time
);
SongTime
seek_time
);
PlaylistResult
SeekSongId
(
PlayerControl
&
pc
,
unsigned
song_id
,
float
seek_time
);
unsigned
song_id
,
SongTime
seek_time
);
/**
* Seek within the current song. Fails if MPD is not currently
...
...
@@ -265,7 +267,7 @@ public:
* current position
*/
PlaylistResult
SeekCurrent
(
PlayerControl
&
pc
,
float
seek_time
,
bool
relative
);
SignedSongTime
seek_time
,
bool
relative
);
bool
GetRepeat
()
const
{
return
queue
.
repeat
;
...
...
src/queue/PlaylistControl.cxx
View file @
39529204
...
...
@@ -190,7 +190,8 @@ playlist::PlayPrevious(PlayerControl &pc)
}
PlaylistResult
playlist
::
SeekSongPosition
(
PlayerControl
&
pc
,
unsigned
song
,
float
seek_time
)
playlist
::
SeekSongPosition
(
PlayerControl
&
pc
,
unsigned
song
,
SongTime
seek_time
)
{
if
(
!
queue
.
IsValidPosition
(
song
))
return
PlaylistResult
::
BAD_RANGE
;
...
...
@@ -215,8 +216,7 @@ playlist::SeekSongPosition(PlayerControl &pc, unsigned song, float seek_time)
queued_song
=
nullptr
;
}
if
(
!
pc
.
Seek
(
new
DetachedSong
(
queue
.
GetOrder
(
i
)),
SongTime
::
FromS
(
seek_time
)))
{
if
(
!
pc
.
Seek
(
new
DetachedSong
(
queue
.
GetOrder
(
i
)),
seek_time
))
{
UpdateQueuedSong
(
pc
,
queued_song
);
return
PlaylistResult
::
NOT_PLAYING
;
...
...
@@ -229,7 +229,7 @@ playlist::SeekSongPosition(PlayerControl &pc, unsigned song, float seek_time)
}
PlaylistResult
playlist
::
SeekSongId
(
PlayerControl
&
pc
,
unsigned
id
,
float
seek_time
)
playlist
::
SeekSongId
(
PlayerControl
&
pc
,
unsigned
id
,
SongTime
seek_time
)
{
int
song
=
queue
.
IdToPosition
(
id
);
if
(
song
<
0
)
...
...
@@ -239,7 +239,8 @@ playlist::SeekSongId(PlayerControl &pc, unsigned id, float seek_time)
}
PlaylistResult
playlist
::
SeekCurrent
(
PlayerControl
&
pc
,
float
seek_time
,
bool
relative
)
playlist
::
SeekCurrent
(
PlayerControl
&
pc
,
SignedSongTime
seek_time
,
bool
relative
)
{
if
(
!
playing
)
return
PlaylistResult
::
NOT_PLAYING
;
...
...
@@ -251,11 +252,10 @@ playlist::SeekCurrent(PlayerControl &pc, float seek_time, bool relative)
status
.
state
!=
PlayerState
::
PAUSE
)
return
PlaylistResult
::
NOT_PLAYING
;
seek_time
+=
(
int
)
status
.
elapsed_time
;
seek_time
+=
SignedSongTime
::
FromS
(
status
.
elapsed_time
);
if
(
seek_time
.
IsNegative
())
seek_time
=
SignedSongTime
::
zero
();
}
if
(
seek_time
<
0
)
seek_time
=
0
;
return
SeekSongPosition
(
pc
,
current
,
seek_time
);
return
SeekSongPosition
(
pc
,
current
,
SongTime
(
seek_time
));
}
src/queue/PlaylistState.cxx
View file @
39529204
...
...
@@ -132,7 +132,7 @@ playlist_state_restore(const char *line, TextFile &file,
struct
playlist
&
playlist
,
PlayerControl
&
pc
)
{
int
current
=
-
1
;
int
seek_time
=
0
;
SongTime
seek_time
=
SongTime
::
zero
()
;
bool
random_mode
=
false
;
if
(
!
StringStartsWith
(
line
,
PLAYLIST_STATE_FILE_STATE
))
...
...
@@ -150,8 +150,8 @@ playlist_state_restore(const char *line, TextFile &file,
while
((
line
=
file
.
ReadLine
())
!=
nullptr
)
{
if
(
StringStartsWith
(
line
,
PLAYLIST_STATE_FILE_TIME
))
{
seek_time
=
atoi
(
&
(
line
[
strlen
(
PLAYLIST_STATE_FILE_TIME
)])
);
unsigned
seconds
=
atoi
(
&
(
line
[
strlen
(
PLAYLIST_STATE_FILE_TIME
)]));
seek_time
=
SongTime
::
FromS
(
seconds
);
}
else
if
(
StringStartsWith
(
line
,
PLAYLIST_STATE_FILE_REPEAT
))
{
playlist
.
SetRepeat
(
pc
,
strcmp
(
&
(
line
[
strlen
(
PLAYLIST_STATE_FILE_REPEAT
)]),
...
...
@@ -209,7 +209,7 @@ playlist_state_restore(const char *line, TextFile &file,
if
(
state
==
PlayerState
::
STOP
/* && config_option */
)
playlist
.
current
=
current
;
else
if
(
seek_time
==
0
)
else
if
(
seek_time
.
count
()
==
0
)
playlist
.
PlayPosition
(
pc
,
current
);
else
playlist
.
SeekSongPosition
(
pc
,
current
,
seek_time
);
...
...
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