1
/* XMMS2 - X Music Multiplexer System
2
* Copyright (C) 2003-2009 XMMS2 Team
4
* PLUGINS ARE NOT CONSIDERED TO BE DERIVED WORK !!!
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
17
#include "cmd_playback.h"
22
do_reljump (xmmsc_connection_t *conn, gint where)
28
res = xmmsc_playlist_set_next_rel (conn, where);
29
xmmsc_result_wait (res);
31
val = xmmsc_result_get_value (res);
32
if (xmmsv_get_error (val, &errmsg)) {
33
print_error ("Couldn't advance in playlist: %s", errmsg);
35
xmmsc_result_unref (res);
37
res = xmmsc_playback_tickle (conn);
38
xmmsc_result_wait (res);
40
val = xmmsc_result_get_value (res);
41
if (xmmsv_get_error (val, &errmsg)) {
42
print_error ("%s", errmsg);
44
xmmsc_result_unref (res);
49
cmd_toggleplay (xmmsc_connection_t *conn, gint argc, gchar **argv)
56
res = xmmsc_playback_status (conn);
57
xmmsc_result_wait (res);
58
val = xmmsc_result_get_value (res);
60
if (xmmsv_get_error (val, &errmsg)) {
61
print_error ("Couldn't get playback status: %s", errmsg);
64
if (!xmmsv_get_int (val, &status)) {
65
print_error ("Broken resultset");
68
if (status == XMMS_PLAYBACK_STATUS_PLAY) {
69
cmd_pause (conn, argc, argv);
71
cmd_play (conn, argc, argv);
74
xmmsc_result_unref (res);
79
cmd_play (xmmsc_connection_t *conn, gint argc, gchar **argv)
85
res = xmmsc_playback_start (conn);
86
xmmsc_result_wait (res);
88
val = xmmsc_result_get_value (res);
89
if (xmmsv_get_error (val, &errmsg)) {
90
print_error ("Couldn't start playback: %s", errmsg);
92
xmmsc_result_unref (res);
96
cmd_stop (xmmsc_connection_t *conn, gint argc, gchar **argv)
102
res = xmmsc_playback_stop (conn);
103
xmmsc_result_wait (res);
105
val = xmmsc_result_get_value (res);
106
if (xmmsv_get_error (val, &errmsg)) {
107
print_error ("Couldn't stop playback: %s", errmsg);
109
xmmsc_result_unref (res);
114
cmd_pause (xmmsc_connection_t *conn, gint argc, gchar **argv)
120
res = xmmsc_playback_pause (conn);
121
xmmsc_result_wait (res);
123
val = xmmsc_result_get_value (res);
124
if (xmmsv_get_error (val, &errmsg)) {
125
print_error ("Couldn't pause playback: %s", errmsg);
127
xmmsc_result_unref (res);
132
cmd_next (xmmsc_connection_t *conn, gint argc, gchar **argv)
134
do_reljump (conn, 1);
139
cmd_prev (xmmsc_connection_t *conn, gint argc, gchar **argv)
141
do_reljump (conn, -1);
146
cmd_seek (xmmsc_connection_t *conn, gint argc, gchar **argv)
152
gchar *endptr = NULL;
155
print_error ("You need to specify a number of seconds. Usage:\n"
156
"xmms2 seek n - seek to absolute position in song\n"
157
"xmms2 seek +n - seek n seconds forward in song\n"
158
"xmms2 seek -n - seek n seconds backwards");
161
/* parse the movement argument */
162
arg = strtol (argv[2], &endptr, 10) * 1000;
164
if (endptr == argv[2]) {
165
print_error ("invalid argument");
168
if (argv[2][0] == '+' || argv[2][0] == '-') {
169
/* do we need to seek at all? */
173
res = xmmsc_playback_seek_ms (conn, arg, XMMS_PLAYBACK_SEEK_CUR);
175
res = xmmsc_playback_seek_ms (conn, arg, XMMS_PLAYBACK_SEEK_SET);
178
xmmsc_result_wait (res);
179
val = xmmsc_result_get_value (res);
180
if (xmmsv_get_error (val, &errmsg)) {
181
print_error ("Couldn't seek to %d arg: %s", arg, errmsg);
183
xmmsc_result_unref (res);
188
cmd_jump (xmmsc_connection_t *conn, gint argc, gchar **argv)
195
print_error ("You'll need to specify a position to jump to. Usage:\n"
196
"xmms2 jump n - jump to absolute position n\n"
197
"xmms2 jump +n - advance n positions\n"
198
"xmms2 jump -n - jump n positions backwards\n");
201
if (argv[2][0] == '-' || argv[2][0] == '+') {
202
res = xmmsc_playlist_set_next_rel (conn, strtol (argv[2], NULL, 10));
204
res = xmmsc_playlist_set_next (conn, strtol (argv[2], NULL, 10));
206
xmmsc_result_wait (res);
208
val = xmmsc_result_get_value (res);
209
if (xmmsv_get_error (val, &errmsg)) {
210
print_error ("Couldn't jump to that song: %s", errmsg);
212
xmmsc_result_unref (res);
214
res = xmmsc_playback_tickle (conn);
215
xmmsc_result_wait (res);
217
val = xmmsc_result_get_value (res);
218
if (xmmsv_get_error (val, &errmsg)) {
219
print_error ("Couldn't go to next song: %s", errmsg);
221
xmmsc_result_unref (res);