예제 #1
0
gboolean
cli_current (cli_context_t *ctx, command_t *cmd)
{
	status_entry_t *status;
	const gchar *format;
	gint refresh;

	if (!command_flag_int_get (cmd, "refresh", &refresh)) {
		refresh = 0;
	}

	if (!command_flag_string_get (cmd, "format", &format)) {
		configuration_t *config = cli_context_config (ctx);
		format = configuration_get_string (config, "STATUS_FORMAT");
	}

	status = currently_playing_init (ctx, format, refresh);

	if (refresh > 0) {
		cli_context_status_mode (ctx, status);
	} else {
		status_refresh (status, TRUE, TRUE);
		status_free (status);
	}

	return refresh != 0; /* need I/O if we are refreshing */
}
예제 #2
0
void
cli_context_status_mode (cli_context_t *ctx, status_entry_t *entry)
{
	ctx->status = CLI_ACTION_STATUS_REFRESH;
	ctx->status_entry = entry;
	readline_status_mode (ctx, status_get_keymap (entry));
	status_refresh (entry, TRUE, FALSE);
}
예제 #3
0
파일: cli_infos.c 프로젝트: chrippa/xmms2
void
cli_infos_status_mode (cli_infos_t *infos, status_entry_t *entry)
{
	infos->status = CLI_ACTION_STATUS_REFRESH;
	infos->status_entry = entry;
	readline_status_mode (infos, status_get_keymap (entry));
	status_refresh (infos, entry, TRUE, FALSE);
}
예제 #4
0
/* Called on server disconnection. We can keep the loop running. */
static gint
cli_context_disconnect_callback (xmmsv_t *val, void *userdata)
{
	cli_context_t *ctx = (cli_context_t *) userdata;

	xmmsc_unref (ctx->conn);
	xmmsc_unref (ctx->sync);

	ctx->conn = NULL;
	ctx->sync = NULL;

	if (ctx->status == CLI_ACTION_STATUS_REFRESH) {
		status_refresh (ctx->status_entry, FALSE, TRUE);
		readline_status_mode_exit ();
	}
	cli_context_loop_resume (ctx);

	return TRUE;
}
예제 #5
0
파일: cli_infos.c 프로젝트: chrippa/xmms2
/* Called on server disconnection. We can keep the loop running. */
static gint
cli_infos_disconnect_callback (xmmsv_t *val, void *userdata)
{
	cli_infos_t *infos = (cli_infos_t *) userdata;

	xmmsc_unref (infos->conn);
	xmmsc_unref (infos->sync);

	infos->conn = NULL;
	infos->sync = NULL;

	if (infos->status == CLI_ACTION_STATUS_REFRESH) {
		status_refresh (infos, infos->status_entry, FALSE, TRUE);
		readline_status_mode_exit ();
	}
	cli_infos_loop_resume (infos);

	return TRUE;
}
예제 #6
0
int eraseImg_Cmd(char **argv,unsigned short argc){
    int ret;
    //erase data from SD card
    ret=mmcErase(IMG_ADDR_START,IMG_ADDR_END);
    //check return value
    if(ret==MMC_SUCCESS){
        //clear imager variables
        writePic = 0;
        picNum=0;
        //print message
        printf("Picture data erased\r\n");
        //refresh status info
        status_refresh();
    }else{
        //print error
        printf("Error erase failed %s\r\n",SD_error_str(ret));
    }
    return 0;
}
예제 #7
0
void
cli_context_refresh_status (cli_context_t *ctx)
{
	status_refresh (ctx->status_entry, FALSE, FALSE);
}
예제 #8
0
파일: main.c 프로젝트: chrippa/xmms2
static void
loop_select (cli_infos_t *infos)
{
	fd_set rfds, wfds;
	gint modfds;
	gint xmms2fd;
	gint maxfds = 0;

	FD_ZERO(&rfds);
	FD_ZERO(&wfds);

	/* Listen to xmms2 if connected */
	if (infos->conn) {
		xmms2fd = xmmsc_io_fd_get (infos->conn);
		if (xmms2fd == -1) {
			g_printf (_("Error: failed to retrieve XMMS2 file descriptor!"));
			return;
		}

		FD_SET(xmms2fd, &rfds);
		if (xmmsc_io_want_out (infos->conn)) {
			FD_SET(xmms2fd, &wfds);
		}

		if (maxfds < xmms2fd) {
			maxfds = xmms2fd;
		}
	}

	/* Listen to readline in shell mode or status mode */
	if ((infos->mode == CLI_EXECUTION_MODE_SHELL &&
	     infos->status == CLI_ACTION_STATUS_READY) ||
	     infos->status == CLI_ACTION_STATUS_REFRESH) {
		FD_SET(STDINFD, &rfds);
		if (maxfds < STDINFD) {
			maxfds = STDINFD;
		}
	}

	if (infos->status == CLI_ACTION_STATUS_REFRESH) {
		struct timeval refresh;
		refresh.tv_sec = status_get_refresh_interval (infos->status_entry);
		refresh.tv_usec = 0;
		modfds = select (maxfds + 1, &rfds, &wfds, NULL, &refresh);
	} else {
		modfds = select (maxfds + 1, &rfds, &wfds, NULL, NULL);
	}

	if (modfds < 0 && errno != EINTR) {
		g_printf (_("Error: invalid I/O result!"));
		return;
	} else if (modfds != 0) {
		/* Get/send data to xmms2 */
		if (infos->conn) {
			if (FD_ISSET(xmms2fd, &rfds) &&
			    !xmmsc_io_in_handle (infos->conn)) {
				return;
			}

			if (FD_ISSET(xmms2fd, &wfds) &&
			    !xmmsc_io_out_handle (infos->conn)) {
				return;
			}
		}

		/* User input found, read it */
		if ((infos->mode == CLI_EXECUTION_MODE_SHELL ||
		     infos->status == CLI_ACTION_STATUS_REFRESH) &&
		    FD_ISSET(STDINFD, &rfds)) {
			rl_callback_read_char ();
		}
	}

	/* Status -refresh
	   Ask theefer: use callbacks for update and -refresh only for print?
	   Nesciens: Yes, please!
	*/
	if (infos->status == CLI_ACTION_STATUS_REFRESH) {
		status_refresh (infos, infos->status_entry, FALSE, FALSE);
	}
}