Пример #1
0
/* -------------------------------------------------------------------------- */
static void mpd_update_status_time(struct lcd_stuff_mpd *mpd)
{
    int             elapsed, total;
    char            *line3;
    struct song     *cur_song;

    if (mpd->current_state != MPD_PLAYER_PLAY)
        return;

    /* song ? */
    cur_song = mpd_get_current_song(mpd);
    if (!mpd_song_compare(cur_song, mpd->current_song) || !mpd->song_displayed) {
        mpd_song_delete(mpd->current_song);
        mpd->current_song = cur_song;

        screen_show_text(&mpd->screen, 0, cur_song->artist);
        screen_show_text(&mpd->screen, 1, cur_song->title);

        mpd->song_displayed = true;
    } else {
        mpd_song_delete(mpd->current_song);
        mpd->current_song = NULL;
    }

    elapsed = mpd_status_get_elapsed_song_time(mpd->mpd);
    total = mpd_status_get_total_song_time(mpd->mpd);

    line3 = g_strdup_printf("%d:%2.2d/%d:%2.2d     %s%s",
                            elapsed / 60, elapsed % 60,
                            total / 60,   total   % 60,
                            mpd_player_get_repeat(mpd->mpd) ? "R" : "_",
                            mpd_player_get_random(mpd->mpd) ? "S" : "_");
    screen_show_text(&mpd->screen, 2, line3);
    g_free(line3);
}
Пример #2
0
static void seek_command(gpointer user_data, const char *param)
{
	int i = 0, j = 0;
	gchar **fields;
	if (!param)
		return;
	if (!mpd_check_connected(connection))
		return;
	printf("seek: '%s'\n", param);
	fields = g_strsplit(param, ":", -1);
	/* Calculate time */
	for (j = 0; fields && fields[j]; j++)
	{
		i = atoi(fields[j]) + i * 60;
	}
	if (param[0] == '+' || param[0] == '-')
	{
		/* seek relative */
		mpd_player_seek(connection, mpd_status_get_elapsed_song_time(connection) + i);
	} else
	{
		/* seek absolute */
		mpd_player_seek(connection, i);
	}
	g_strfreev(fields);
}
Пример #3
0
void
gimmix_get_progress_status (MpdObj *mo, float *fraction, char *time)
{
	int state;
	int total, elapsed;
		
	state = mpd_player_get_state (mo);
	
	switch (state)
	{
		case MPD_PLAYER_PLAY:
		case MPD_PLAYER_PAUSE:
			mpd_status_update(mo);
			total = mpd_status_get_total_song_time (mo);
			elapsed = mpd_status_get_elapsed_song_time (mo);
			snprintf (time, 20, "%02i:%02i / %02i:%02i", elapsed/60,
					elapsed%60,
					total/60,
					total%60);
			*fraction = (float)((float)elapsed/(float)total);
			break;

		case MPD_PLAYER_STOP:
		case MPD_PLAYER_UNKNOWN:
			time = NULL;
			return;
	}
	return;
}
Пример #4
0
void status_changed(MpdObj *mi, ChangedStatusType what)
{
    pthread_mutex_lock(&lockit);

    mpd_Song *song = mpd_playlist_get_current_song(mi);
    if(song) {
        if (song->artist!=NULL) {
            strncpy(track_info.artist,song->artist,99);
        } else {
            track_info.artist[0] = 0;
        }
        if (song->title!=NULL) {
            strncpy(track_info.title,song->title,99);
        } else {
            track_info.title[0] = 0;
        }
    }

    if(what&MPD_CST_CROSSFADE){
        // printf(GREEN"X-Fade:"RESET" %i sec.\n",mpd_status_get_crossfade(mi));
    }

    if(what&MPD_CST_PLAYLIST)
    {
        // printf(GREEN"Playlist changed"RESET"\n");
        track_info.totalsongs_in_playlist = mpd_playlist_get_playlist_length(mi);

    }

    if(what&MPD_CST_ELAPSED_TIME && !voltimeout){
        track_info.elapsed = mpd_status_get_elapsed_song_time(mi);
        track_info.total = mpd_status_get_total_song_time(mi);
    }

    if(what&MPD_CST_VOLUME){
        voltimeout=100;
        track_info.volume = mpd_status_get_volume(mi);
    }

    if(what&MPD_CST_STATE) {
        track_info.playstate = mpd_player_get_state(mi);
    }

    track_info.repeat = mpd_player_get_repeat(obj);
    track_info.random = mpd_player_get_random(obj);

    pthread_mutex_unlock(&lockit);
    usleep(10*1000);
}
Пример #5
0
void control_window_status_update(MpdObj * mi, ChangedStatusType what, GtkWidget *base)
{
    GtkWidget *volume_button, *progress, *play_image;
    /* Bail out of base == NULL */
    if(base == NULL) return;
    /* Get the different subwidgets from the parent */
    volume_button   = g_object_get_data(G_OBJECT(base), "vol");
    progress        = g_object_get_data(G_OBJECT(base), "progress");
    play_image      = g_object_get_data(G_OBJECT(base), "play_image");

    if (what & MPD_CST_STATE)
    {
        int state = mpd_player_get_state(mi);
        switch (state)
        {
            case MPD_PLAYER_PLAY:
                gtk_image_set_from_stock(GTK_IMAGE(play_image),
                    "gtk-media-pause", GTK_ICON_SIZE_BUTTON);
                break;
            case MPD_PLAYER_PAUSE:
                gtk_image_set_from_stock(GTK_IMAGE(play_image),
                    "gtk-media-play", GTK_ICON_SIZE_BUTTON);
                break;
            default:
                gtk_image_set_from_stock(GTK_IMAGE(play_image),
                    "gtk-media-play", GTK_ICON_SIZE_BUTTON);
                /* Make sure it's reset correctly */
                gmpc_progress_set_time(GMPC_PROGRESS(progress), 0, 0);
        }
    }
    if (what & MPD_CST_ELAPSED_TIME)
    {
        if (mpd_check_connected(connection))
        {
            int totalTime = mpd_status_get_total_song_time(connection);
            int elapsedTime = mpd_status_get_elapsed_song_time(connection);
            gmpc_progress_set_time(GMPC_PROGRESS(progress), totalTime, elapsedTime);
        } else
        {
            gmpc_progress_set_time(GMPC_PROGRESS(progress), 0, 0);
        }
    }
    if (what & MPD_CST_VOLUME)
    {
        int volume = gtk_scale_button_get_value(GTK_SCALE_BUTTON(volume_button))*100;
        int new_volume = mpd_status_get_volume(connection);
        if (new_volume >= 0 &&
            mpd_server_check_command_allowed(connection, "setvol") ==
            MPD_SERVER_COMMAND_ALLOWED
           )
        {
            gtk_widget_set_sensitive(volume_button, TRUE);
            /* don't do anything if nothing is changed */
            if (new_volume != volume)
            {
                gtk_scale_button_set_value(GTK_SCALE_BUTTON(volume_button), new_volume/100.0);
            }
        } else
        {
            gtk_widget_set_sensitive(volume_button, FALSE);
        }
    }
}