statusbar

minimal utilities for displaying system status information
git clone https://git.awy.one/statusbar
Log | Files | Refs | LICENSE

stmpdup.c (1965B) - View raw


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* Copyright (C) 2025 awy <awy@awy.one>

   This file is part of stbar.

   stbar is free software: you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation,
   either version 3 of the License, or (at your option) any later version.

   stbar is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public
   License along with stbar. If not, see
   <https://www.gnu.org/licenses/>. */

/* cmd_idle and cmd_idleloop functions are taken from the
   MPC <https://github.com/MusicPlayerDaemon/mpc> */

#define _POSIX_C_SOURCE 200112L
#include <dirent.h>
#include <mpd/client.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>

#include "../lib/util.h"

int cmd_idle(struct mpd_connection *connection)
{
  enum mpd_idle idle = 0;
  pid_t wbarpid;

  idle = idle == 0 ? mpd_run_idle(connection)
                   : mpd_run_idle_mask(connection, idle);
  if (idle == 0 && mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS)
    printf("error");

  for (unsigned j = 0;; ++j) {
    enum mpd_idle i = 1 << j;
    const char *name = mpd_idle_name(i);

    if (name == NULL)
      break;

    if (idle & i) {
      updatebar(11);
    }
  }

  return 0;
}

int cmd_idleloop(struct mpd_connection *connection)
{
  while (true) {
    int ret = cmd_idle(connection);
    fflush(stdout);
    if (ret != 0)
      return ret;
  }
}

int stmpdup(void)
{
  struct mpd_connection *conn;

  conn = mpd_connection_new(NULL, 0, 30000);
  if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) {
    fprintf(stderr, "MPD connection error: %s\n",
            mpd_connection_get_error_message(conn));
    return 1;
  }

  cmd_idleloop(conn);
  return 0;
}