Example #1
0
static void
get_loadavg(Enna_Buffer *b)
{
    float load;
#ifdef __FreeBSD__
    double loadavg[3];

    if (getloadavg(loadavg, 3) == -1)
        return;

    load = loadavg[0] * 100.0;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("CPU Load:"));
    enna_buffer_appendf(b, "</hilight> %d%%<br>", (int) load);
#else /* __FreeBSD__ */
    FILE *f;
    char buf[256] = { 0 };
    char *ld, *x;

    f = fopen("/proc/loadavg", "r");
    if (!f)
        return;

    x = fgets(buf, sizeof(buf), f);
    x = strchr(buf, ' ');
    if (!x)
        goto err_loadavg;

    ld = strndup(buf, sizeof(x));
    load = enna_util_atof(ld) * 100.0;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("CPU Load:"));
    enna_buffer_appendf(b, "</hilight> %d%%<br>", (int) load);

 err_loadavg:
    if (ld)
        free(ld);
    if (f)
        fclose(f);
#endif /* !__FreeBSD__ */
}
Example #2
0
static void
get_resolution(Enna_Buffer *b)
{
    XRRScreenConfiguration *sc;
    Window root;
    Display *dpy;
    short rate;
    int screen;
    int minWidth, maxWidth, minHeight, maxHeight;

    dpy = XOpenDisplay(":0.0");
    if (!dpy)
        return;

    screen = DefaultScreen(dpy);
    if (screen >= ScreenCount(dpy))
        return;

    root = RootWindow(dpy, screen);
    if (root < 0)
        return;

    sc = XRRGetScreenInfo(dpy, root);
    if (!sc)
        return;

    rate = XRRConfigCurrentRate(sc);
    XRRGetScreenSizeRange(dpy, root,
                          &minWidth, &minHeight, &maxWidth, &maxHeight);

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Screen resolution:"));
    enna_buffer_appendf(b, "</hilight> %dx%d ",
                   DisplayWidth(dpy, screen), DisplayHeight(dpy, screen));
    enna_buffer_append(b, _("at"));
    enna_buffer_appendf(b, " %d Hz (", rate);
    enna_buffer_append(b, _("min:"));
    enna_buffer_appendf(b, " %dx%d, ", minWidth, minHeight);
    enna_buffer_append(b, _("max:"));
    enna_buffer_appendf(b, " %dx%d)<br>", maxWidth, maxHeight);
    XCloseDisplay(dpy);
}
Example #3
0
static void
get_network(Enna_Buffer *b)
{
    struct ifaddrs *ifr, *ifa;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Available network interfaces:"));
    enna_buffer_append(b, "</hilight><br>");

    if (getifaddrs(&ifr) == -1)
        return;

    for (ifa = ifr; ifa != NULL; ifa = ifa->ifa_next)
    {
        /* discard loopback interface */
        if (!strncmp(ifa->ifa_name, "lo", 2)) /* also remove the lo* */
            continue;

        if (   ifa->ifa_addr->sa_family != AF_INET
            && ifa->ifa_addr->sa_family != AF_INET6)
            continue;

        /* show the device name and IP address */
        enna_buffer_appendf(b, "  * %s (", ifa->ifa_name);
        enna_buffer_append(b, _("IP:"));
        enna_buffer_appendf(b, " %s, ",
                            inet_ntoa(((struct sockaddr_in *)
                                       ifa->ifa_addr)->sin_addr));

        enna_buffer_append(b, _("Netmask:"));
        enna_buffer_appendf(b, " %s)<br>",
                            inet_ntoa(((struct sockaddr_in *)
                                       ifa->ifa_netmask)->sin_addr));

    }

    freeifaddrs(ifr);
}
Example #4
0
static void
set_system_information(Enna_Buffer *b)
{
    if (!b)
        return;

    enna_buffer_append(b, "<c>");
    enna_buffer_append(b, _("System information"));
    enna_buffer_append(b, "</c><br><br>");
    get_distribution(b);
    get_uname(b);
    get_cpuinfos(b);
    get_loadavg(b);
    get_ram_usage(b);
#ifdef BUILD_LIBSVDRP
    get_vdr(b);
#endif /* BUILD_LIBSVDRP */
#ifdef BUILD_LIBXRANDR
    get_resolution(b);
#endif /* BUILD_LIBXRANDR */
    get_network(b);
    get_default_gw(b);
}
Example #5
0
File: utils.c Project: GeeXboX/enna
char *
enna_util_tuple_set (Eina_List *tuple, const char *delimiter)
{
    char *buf;
    Enna_Buffer *b;
    char *c;
    Eina_List *l;

    if (!tuple || !delimiter)
        return NULL;

    b =  enna_buffer_new();
    EINA_LIST_FOREACH(tuple, l, c)
    {
        if (b->len > 0)
            enna_buffer_append(b, delimiter);
        enna_buffer_append(b, c);
    }

    buf = strdup(b->buf);
    enna_buffer_free(b);

    return buf;
}
Example #6
0
static void
get_uname(Enna_Buffer *b)
{
    struct utsname name;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("OS:"));
    enna_buffer_append(b, "</hilight> ");
    if (uname(&name) == -1) {
        enna_buffer_append(b, BUF_DEFAULT);
    }
    else
    {
        enna_buffer_appendf(b, "%s %s ", name.sysname, name.release);
        enna_buffer_append(b, _("for"));
        enna_buffer_appendf(b, " %s", name.machine);
    }
    enna_buffer_append(b, "<br>");
}
Example #7
0
static void
get_vdr(Enna_Buffer *b)
{
    svdrp_t *svdrp = enna_svdrp_get();

    enna_buffer_append(b, "<hilight> ");
    enna_buffer_append(b, _("VDR:"));
    enna_buffer_append(b, "</hilight> ");
    if (svdrp && svdrp_try_connect(svdrp)) {
        enna_buffer_appendf(b, _("connected to VDR"));
        enna_buffer_appendf(b, " %s )",
                       svdrp_get_property(svdrp, SVDRP_PROPERTY_VERSION));
        enna_buffer_append(b, _("on"));
        enna_buffer_appendf(b, " %s on %s (%s)",
                       svdrp_get_property(svdrp, SVDRP_PROPERTY_NAME),
                       svdrp_get_property(svdrp, SVDRP_PROPERTY_HOSTNAME));
    } else {
        enna_buffer_append(b, _("not connected"));
    }
    enna_buffer_append(b, "<br>");
}
Example #8
0
static void
set_enna_information(Enna_Buffer *b)
{
    unsigned int ver;

    if (!b)
        return;

    enna_buffer_append(b, "<c>");
    enna_buffer_append(b, _("Enna information"));
    enna_buffer_append(b, "</c><br><br><hilight>");
    enna_buffer_append(b, _("Enna:"));

    ver = libvalhalla_version();
    enna_buffer_appendf(b, "<hilight>libvalhalla:</hilight> %u.%u.%u<br>",
                   ver >> 16, ver >> 8 & 0xFF, ver & 0xFF);
#ifdef BUILD_LIBSVDRP
    enna_buffer_appendf(b, "<hilight>libsvdrp:</hilight> %s<br>",
                        LIBSVDRP_VERSION);
#endif /* BUILD_LIBSVDRP */
    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Video renderer:"));
    enna_buffer_appendf(b, "</hilight> %s<br>", enna_config->engine);
}
Example #9
0
static void
get_default_gw(Enna_Buffer *b)
{
#ifdef __FreeBSD__
    int s, seq, l, pid, rtm_addrs, i;
    struct sockaddr so_dst, so_mask;
    char *cp = m_rtmsg.m_space;
    struct sockaddr *gate = NULL, *sa;
    struct rt_msghdr *rtm_aux;

    pid = getpid();
    seq = 0;
    rtm_addrs = RTA_DST | RTA_NETMASK;

    memset(&so_dst,  0, sizeof(so_dst));
    memset(&so_mask, 0, sizeof(so_mask));
    memset(&rtm,     0, sizeof(struct rt_msghdr));

    rtm.rtm_type = RTM_GET;
    rtm.rtm_flags = RTF_UP | RTF_GATEWAY;
    rtm.rtm_version = RTM_VERSION;
    rtm.rtm_seq = ++seq;
    rtm.rtm_addrs = rtm_addrs;

    so_dst.sa_family = AF_INET;
    so_dst.sa_len = sizeof(struct sockaddr_in);
    so_mask.sa_family = AF_INET;
    so_mask.sa_len = sizeof(struct sockaddr_in);

    NEXTADDR(RTA_DST, so_dst);
    NEXTADDR(RTA_NETMASK, so_mask);

    rtm.rtm_msglen = l = cp - (char *)&m_rtmsg;

    s = socket(PF_ROUTE, SOCK_RAW, 0);

    if (write(s, (char *)&m_rtmsg, l) < 0)
        return;

    do
    {
      l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg));
    }
    while (l > 0 && (rtm.rtm_seq != seq || rtm.rtm_pid != pid));

    close(s);

    rtm_aux = &rtm;

    cp = ((char *)(rtm_aux + 1));
    if (rtm_aux->rtm_addrs)
    {
        for (i = 1; i; i <<= 1)
            if (i & rtm_aux->rtm_addrs)
            {
                sa = (struct sockaddr *)cp;
                if (i == RTA_GATEWAY )
                    gate = sa;
                ADVANCE(cp, sa);
            }
    }
    else
        return;

    if (gate)
    {
        enna_buffer_append(b, "<hilight>");
        enna_buffer_append(b, _("Default gateway:"));
        enna_buffer_append(b, "</hilight> ");

        enna_buffer_appendf(b, "%s<br>",
                            inet_ntoa(((struct sockaddr_in *)gate)->sin_addr));
    }
#else /* __FreeBSD__ */
    char devname[64];
    unsigned long d, g, m;
    int res, flgs, ref, use, metric, mtu, win, ir;
    FILE *fp;

    fp = fopen("/proc/net/route", "r");
    if (!fp)
        return;

    if (fscanf(fp, "%*[^\n]\n") < 0) /* Skip the first line. */
        return;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Default gateway:"));
    enna_buffer_append(b, "</hilight> ");
    res = 0;

    while (1)
    {
        struct in_addr gw;
        int r;

        r = fscanf(fp, "%63s%lx%lx%X%d%d%d%lx%d%d%d\n",
                   devname, &d, &g, &flgs, &ref, &use, &metric, &m,
                   &mtu, &win, &ir);

        if (r != 11)
            if ((r < 0) && feof(fp))
                break;

        /* we only care about default gateway */
        if (d != 0)
            continue;

        gw.s_addr = g;
        enna_buffer_appendf(b, "%s<br>", inet_ntoa (gw));
        res = 1;
        break;
    }

    if (!res) {
        enna_buffer_append(b, _("None"));
        enna_buffer_append(b, "<br>");
    }


    fclose(fp);
#endif /* !__FreeBSD__ */
}
Example #10
0
static void
get_ram_usage(Enna_Buffer *b)
{
#ifdef __FreeBSD__
    int mem_total = 0, mem_active = 0;
    int page_size;
    size_t len;

    len = sizeof(mem_total);
    if (sysctlbyname("hw.physmem", &mem_total, &len, NULL, 0))
        return;

    mem_total = mem_total / 1024 / 1024;

    len = sizeof(mem_active);

    if (sysctlbyname("vm.stats.vm.v_active_count", &mem_active, &len, NULL, 0))
        return;

    len = sizeof(page_size);
    if (sysctlbyname("hw.pagesize", &page_size, &len, NULL, 0))
        return;

    mem_active = mem_active * page_size / 1024 / 1024;
#else /* __FreeBSD__ */
    int mem_total = 0, mem_active = 0;
    FILE *f;
    char buf[256] = { 0 };

    f = fopen("/proc/meminfo", "r");
    if (!f)
        return;

    while (fgets(buf, sizeof(buf), f))
    {
        if (!strncmp(buf, STR_MEM_TOTAL, strlen(STR_MEM_TOTAL)))
        {
            char *x;
            /* remove the trailing ' kB' from buffer */
            buf[strlen(buf) - 4] = '\0';
            x = strrchr(buf, ' ');
            if (x)
                mem_total = atoi(x + 1) / 1024;
        }
        else if (!strncmp(buf, STR_MEM_ACTIVE, strlen(STR_MEM_ACTIVE)))
        {
            char *x;
            /* remove the trailing ' kB' from buffer */
            buf[strlen(buf) - 4] = '\0';
            x = strrchr(buf, ' ');
            if (x)
                mem_active = atoi(x + 1) / 1024;
        }
    }

    fclose(f);
#endif /* !__FreeBSD__ */

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Memory:"));
    enna_buffer_appendf(b, "</hilight> %d MB ", mem_active);
    enna_buffer_append(b, _("used on"));
    enna_buffer_appendf(b, " %d MB ", mem_total);
    enna_buffer_append(b, _("total"));
    enna_buffer_appendf(b, " (%d%%)</hilight><br>",
                        (int) (mem_active * 100 / mem_total));
}
Example #11
0
static void
get_cpuinfos(Enna_Buffer *b)
{
#ifdef __FreeBSD__
    int nbcpu = 0, i, freq;
    char cpu_model[256];
    size_t len;
    char buf[256];

    len = sizeof(cpu_model);
    if (sysctlbyname("hw.model", &cpu_model, &len, NULL, 0))
        return;

    len = sizeof(nbcpu);
    if (sysctlbyname("hw.ncpu", &nbcpu, &len, NULL, 0))
        return;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Available CPUs:"));
    enna_buffer_append(b, "</hilight><br>");

    for (i = 0; i < nbcpu; i++)
    {
        snprintf(buf, sizeof(buf), "dev.cpu.%d.freq", i);
        len = sizeof(freq);

        if (sysctlbyname(buf, &freq, &len, NULL, 0))
            continue;

        enna_buffer_appendf(b, " * CPU #%d: %s, running at %dMHz<br>",
                            i, cpu_model, freq);
    }

#else /* __FreeBSD__ */
    FILE *f;
    char buf[256] = { 0 };

    f = fopen("/proc/cpuinfo", "r");
    if (!f)
        return;

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Available CPUs:"));
    enna_buffer_append(b, "</hilight><br>");
    while (fgets(buf, sizeof(buf), f))
    {
        char *x;
        buf[strlen(buf) - 1] = '\0';
        if (!strncmp(buf, STR_CPU, strlen(STR_CPU)))
        {
            x = strchr(buf, ':');
            enna_buffer_appendf(b, " * CPU #%s: ", x + 2);
        }
        else if (!strncmp(buf, STR_MODEL, strlen(STR_MODEL)))
        {
            char *y;
            x = strchr(buf, ':');
            y = x + 2;
            while (*y)
            {
                if (*y != ' ')
                    enna_buffer_appendf(b, "%c", *y);
                else
                {
                    if (*(y + 1) != ' ')
                    enna_buffer_appendf(b, " ");
                }
                (void) *y++;
            }
        }
        else if (!strncmp(buf, STR_MHZ, strlen(STR_MHZ)))
        {
            x = strchr(buf, ':');
            enna_buffer_append(b, _(", running at"));
            enna_buffer_appendf(b, " %d MHz<br>", (int) enna_util_atof(x + 2));
        }
    }

    fclose(f);
#endif /* !__FreeBSD__ */
}
Example #12
0
static void
get_distribution(Enna_Buffer *b)
{
    FILE *f;
    char buffer[BUF_LEN];
    char *id = NULL, *release = NULL;
    static const char *lsb_distrib_id = NULL;
    static const char *lsb_release = NULL;

    if (!lsb_distrib_id || !lsb_release)
    /* FIXME: i'm pretty sure that there's no need to try to read files
     * 'cause the command lsb_release seems to be available anywhere
     * if so, this can be stripped from here (Billy)
     */
    {
        f = fopen(LSB_FILE, "r");
        if (f)
        {
            while (fgets(buffer, BUF_LEN, f))
            {
                if (!strncmp(buffer, DISTRIB_ID, DISTRIB_ID_LEN))
                {
                    id = strdup(buffer + DISTRIB_ID_LEN);
                    id[strlen(id) - 1] = '\0';
                }
                if (!strncmp(buffer, DISTRIB_RELEASE, DISTRIB_RELEASE_LEN))
                {
                    release = strdup(buffer + DISTRIB_RELEASE_LEN);
                    release[strlen(release) - 1] = '\0';
                }
                memset(buffer, '\0', BUF_LEN);
            }
            fclose(f);
        }
        if (!id || !release)
        {
            f = fopen(DEBIAN_VERSION_FILE, "r");
            if (f)
            {
                id = strdup("Debian");
                id[strlen(id)] = '\0';
                while (fgets(buffer, BUF_LEN, f))
                {
                    release = strdup(buffer);
                    release[strlen(release) - 1] = '\0';
                    memset(buffer, '\0', BUF_LEN);
                }
                fclose(f);
            }
        }
    }

    enna_buffer_append(b, "<hilight>");
    enna_buffer_append(b, _("Distribution:"));
    enna_buffer_append(b, "</hilight> ");
    if (lsb_distrib_id && lsb_release)
        enna_buffer_appendf(b, "%s %s", lsb_distrib_id, lsb_release);
    else if (id && release)
        enna_buffer_appendf(b, "%s %s", id, release);
    else
#ifdef __FreeBSD__
        enna_buffer_append(b, "FreeBSD");
#else /* __FreeBSD__ */
        enna_buffer_append(b, BUF_DEFAULT);
#endif /* !__FreeBSD__ */
    enna_buffer_append(b, "<br>");

    if (id)
        free(id);
    if (release)
        free(release);
}
Example #13
0
void
enna_panel_infos_set_text(Evas_Object *obj, Enna_Metadata *m)
{
    Enna_Buffer *buf;
    const char *codec, *value;
    const char *alternative_title, *title, *categories, *year;
    const char *length, *director, *actors, *overview;
    Smart_Data *sd = evas_object_data_get(obj, "sd");
    int len;

    if (!sd)
        return;

    if (!m)
    {
        edje_object_part_text_set(sd->o_edje, "panel.textblock",
                                  _("No such information ..."));
        return;
    }

    buf = enna_buffer_new();

    enna_buffer_append(buf, "<h4><hl><sd><b>");
    alternative_title = enna_metadata_meta_get(m, "alternative_title", 1);
    title = enna_metadata_meta_get(m, "title", 1);
    enna_buffer_append(buf, alternative_title ? alternative_title : title);
    enna_buffer_append(buf, "</b></sd></hl></h4><br>");
    len = buf->len;

    categories = enna_metadata_meta_get(m, "category", 5);
    if (categories)
        enna_buffer_appendf(buf, "<h2>%s</h2><br>", categories);

    year = enna_metadata_meta_get(m, "year", 1);
    if (year)
        enna_buffer_append(buf, year);

    length = enna_metadata_meta_duration_get(m);
    if (length)
    {
        if (year)
            enna_buffer_append(buf, " - ");
        enna_buffer_appendf(buf, "%s", length);
    }

    enna_buffer_append(buf, "<br><br>");
    len += 8;

    director = enna_metadata_meta_get(m, "director", 1);
    if (director) {
        enna_buffer_append(buf, "<ul>");
        enna_buffer_append(buf, _("Director:"));    
        enna_buffer_appendf(buf, " </ul> %s<br>", director);
    }

    actors = enna_metadata_meta_get(m, "actor", 5);
    if (actors) {
        enna_buffer_append(buf, "<ul>");
        enna_buffer_append(buf, _("Cast:"));
        enna_buffer_appendf(buf, " </ul> %s<br>", actors);
    }

    if (director || actors)
        enna_buffer_append(buf, "<br>");

    overview = enna_metadata_meta_get(m, "synopsis", 1);
    if (overview)
        enna_buffer_appendf(buf, "%s", overview);

    enna_buffer_append(buf, "<br><br>");
    len += 8;

    codec = enna_metadata_meta_get(m, "video_codec", 1);
    if (codec)
    {
        const char *width, *height, *aspect;
        width  = enna_metadata_meta_get(m, "width", 1);
        height = enna_metadata_meta_get(m, "height", 1);
        aspect = enna_metadata_meta_get(m, "video_aspect", 1);
        enna_buffer_append(buf, "<hl>");
        enna_buffer_append(buf, _("Video:"));
        enna_buffer_appendf(buf, " </hl> %s", codec);
        if (width && height)
            enna_buffer_appendf(buf, ", %sx%s", width, height);
        if (aspect)
        {
            float ratio = enna_util_atof(aspect) / 10000;
            if (ratio)
                enna_buffer_appendf(buf, ", %.2f", ratio);
        }
        enna_buffer_appendf(buf, "<br>");
        eina_stringshare_del(width);
        eina_stringshare_del(height);
        eina_stringshare_del(aspect);
        eina_stringshare_del(codec);
    }
    codec = enna_metadata_meta_get(m, "audio_codec", 1);
    if (codec)
    {
        const char *channels, *bitrate;
        channels = enna_metadata_meta_get(m, "audio_channels", 1);
        bitrate  = enna_metadata_meta_get(m, "audio_bitrate", 1);
        enna_buffer_append(buf, "<hl>");
        enna_buffer_append(buf, _("Audio:"));
        enna_buffer_appendf(buf, " </hl> %s", codec);
        if (channels)
            enna_buffer_appendf(buf, ", %s ch.", channels);
        if (bitrate)
            enna_buffer_appendf(buf, ", %i kbps", atoi(bitrate) / 1000);
        enna_buffer_appendf(buf, "<br>");
        eina_stringshare_del(channels);
        eina_stringshare_del(bitrate);
        eina_stringshare_del(codec);
    }

    value = enna_metadata_meta_get(m, "filesize", 1);
    if (value) {
        enna_buffer_append(buf, "<hl>");
        enna_buffer_append(buf, _("Size:"));
        enna_buffer_appendf(buf, " </hl> %.2f MB<br>",
                atol(value) / 1024.0 / 1024.0);
    }
    eina_stringshare_del(value);

    /* tell if no more infos are available */
    if (buf->len == len)
      enna_buffer_append(buf, _("No further information can be retrieved"));

    edje_object_part_text_set(sd->o_edje, "panel.textblock", buf->buf);

    enna_buffer_free(buf);
    eina_stringshare_del(alternative_title);
    eina_stringshare_del(title);
    eina_stringshare_del(categories);
    eina_stringshare_del(year);
    eina_stringshare_del(length);
    eina_stringshare_del(director);
    eina_stringshare_del(actors);
    eina_stringshare_del(overview);
}