char * playback_get_title (void) { g_return_val_if_fail (playing, NULL); wait_until_ready (); char s[32]; if (current_length) { int len = current_length / 1000; if (len < 3600) snprintf (s, sizeof s, get_bool (NULL, "leading_zero") ? " (%02d:%02d)" : " (%d:%02d)", len / 60, len % 60); else snprintf (s, sizeof s, " (%d:%02d:%02d)", len / 3600, (len / 60) % 60, len % 60); } else s[0] = 0; if (get_bool (NULL, "show_numbers_in_pl")) return str_printf ("%d. %s%s", 1 + playlist_get_position (playlist_get_playing ()), current_title, s); return str_printf ("%s%s", current_title, s); }
static void real_position(gint * playlist, gint * entry) { if (*playlist == -2) *playlist = playlist_get_playing(); if (*playlist == -1) *playlist = playlist_get_active(); if (*entry == -1) *entry = playlist_get_position(*playlist); }
void drct_pl_delete_selected (int list) { int pos = playlist_get_position (list); if (get_bool (NULL, "advance_on_delete") && ! get_bool (NULL, "no_playlist_advance") && playback_get_playing () && list == playlist_get_playing () && pos >= 0 && playlist_entry_get_selected (list, pos)) { playlist_entry_set_selected (list, pos, FALSE); playlist_delete_selected (list); pos = playlist_get_position (list); /* it may have moved */ if (playlist_next_song (list, get_bool (NULL, "repeat")) && playlist_get_position (list) != pos) playback_play (0, FALSE); playlist_entry_delete (list, pos, 1); } else playlist_delete_selected (list); }
void playback_play (int seek_time, bool_t pause) { g_return_if_fail (! playing); int playlist = playlist_get_playing (); if (playlist < 0) return; int entry = playlist_get_position (playlist); if (entry < 0) return; failed_entries = 0; playback_start (playlist, entry, seek_time, pause); }
void drct_play (void) { if (drct_get_playing ()) { if (drct_get_paused ()) drct_pause (); else { int a, b; drct_get_ab_repeat (& a, & b); drct_seek (MAX (a, 0)); } } else { int playlist = playlist_get_active (); playlist_set_position (playlist, playlist_get_position (playlist)); drct_play_playlist (playlist); } }
void drct_play_playlist (int playlist) { bool_t same_playlist = (playlist_get_playing () == playlist); if (! same_playlist) playlist_set_playing (playlist); if (playback_get_playing ()) { if (playback_get_paused ()) playback_pause (); else if (same_playlist) playback_seek (0); } else { if (playlist_get_position (playlist) < 0) playlist_next_song (playlist, TRUE); playback_play (0, FALSE); } }
gboolean mpris_emit_track_change(MprisPlayer * obj) { gint playlist, entry; GHashTable *metadata; playlist = playlist_get_playing(); entry = playlist_get_position(playlist); gchar * filename = playlist_entry_get_filename (playlist, entry); Tuple * tuple = playlist_entry_get_tuple (playlist, entry, FALSE); if (filename && tuple) { metadata = make_mpris_metadata (filename, tuple); g_signal_emit (obj, signals[TRACK_CHANGE_SIG], 0, metadata); g_hash_table_destroy (metadata); } g_free (filename); if (tuple) tuple_free (tuple); return (filename && tuple); }
static bool_t end_cb (void * unused) { g_return_val_if_fail (playing, FALSE); hook_call ("playback end", NULL); if (playback_error) failed_entries ++; else failed_entries = 0; playback_cleanup (); int playlist = playlist_get_playing (); bool_t play; if (get_bool (NULL, "no_playlist_advance")) play = get_bool (NULL, "repeat") && ! failed_entries; else if (! (play = playlist_next_song (playlist, get_bool (NULL, "repeat")))) playlist_set_position (playlist, -1); else if (failed_entries >= 10) play = FALSE; if (get_bool (NULL, "stop_after_current_song")) play = FALSE; if (play) playback_start (playlist, playlist_get_position (playlist), 0, FALSE); else { complete_stop (); hook_call ("playlist end reached", NULL); } return FALSE; }
int sendStream(shout_t *shout, FILE *filepstream, const char *fileName, int isStdin, const char *songLenStr, struct timeval *tv) { unsigned char buff[4096]; size_t bytes_read, total, oldTotal; int ret; double kbps = -1.0; struct timeval timeStamp, *startTime = tv; struct timeval callTime, currentTime; if (startTime == NULL) { printf("%s: sendStream(): Internal error: startTime is NULL\n", __progname); abort(); } ez_gettimeofday((void *)&callTime); timeStamp.tv_sec = startTime->tv_sec; timeStamp.tv_usec = startTime->tv_usec; total = oldTotal = 0; ret = STREAM_DONE; while ((bytes_read = fread(buff, 1UL, sizeof(buff), filepstream)) > 0) { if (shout_get_connected(shout) != SHOUTERR_CONNECTED && reconnectServer(shout, 0) == 0) { ret = STREAM_SERVERR; break; } shout_sync(shout); if (shout_send(shout, buff, bytes_read) != SHOUTERR_SUCCESS) { printf("%s: shout_send(): %s\n", __progname, shout_get_error(shout)); if (reconnectServer(shout, 1)) break; else { ret = STREAM_SERVERR; break; } } if (quit) break; if (rereadPlaylist_notify) { rereadPlaylist_notify = 0; if (!pezConfig->fileNameIsProgram) printf("%s: SIGHUP signal received, will reread playlist after this file\n", __progname); } if (skipTrack) { skipTrack = 0; ret = STREAM_SKIP; break; } ez_gettimeofday((void *)¤tTime); if (queryMetadata || (pezConfig->metadataRefreshInterval != -1 && (currentTime.tv_sec - callTime.tv_sec >= pezConfig->metadataRefreshInterval) ) ) { queryMetadata = 0; if (metadataFromProgram) { ret = STREAM_UPDMDATA; break; } } total += bytes_read; if (qFlag && vFlag) { double oldTime, newTime; if (!isStdin && playlistMode) { if (pezConfig->fileNameIsProgram) { char *tmp = xstrdup(pezConfig->fileName); printf(" [%s]", local_basename(tmp)); xfree(tmp); } else printf(" [%4lu/%-4lu]", playlist_get_position(playlist), playlist_get_num_items(playlist)); } oldTime = (double)timeStamp.tv_sec + (double)timeStamp.tv_usec / 1000000.0; newTime = (double)currentTime.tv_sec + (double)currentTime.tv_usec / 1000000.0; if (songLenStr == NULL) printf(" [ %s]", getTimeString(currentTime.tv_sec - startTime->tv_sec)); else printf(" [ %s/%s]", getTimeString(currentTime.tv_sec - startTime->tv_sec), songLenStr); if (newTime - oldTime >= 1.0) { kbps = (((double)(total - oldTotal) / (newTime - oldTime)) * 8.0) / 1000.0; timeStamp.tv_sec = currentTime.tv_sec; timeStamp.tv_usec = currentTime.tv_usec; oldTotal = total; } if (kbps < 0) printf(" "); else printf(" [%8.2f kbps]", kbps); printf(" \r"); fflush(stdout); } } if (ferror(filepstream)) { if (errno == EINTR) { clearerr(filepstream); ret = STREAM_CONT; } else if (errno == EBADF && isStdin) printf("%s: No (more) data available on standard input\n", __progname); else printf("%s: sendStream(): Error while reading '%s': %s\n", __progname, fileName, strerror(errno)); } return (ret); }
gint drct_pl_get_pos (void) { return playlist_get_position (playlist_get_active ()); }