Login
1 branch 0 tags
Ben (Desktop/Arch) FIxed opus playback issues and fixed general audio stuttering cc78267 1 month ago 42 Commits
moon / firmware / src / ui.c
#include "ui.h"
#include "lvgl.h"
#include "moon.h"
#include "storage.h"
#include "topbar.h"
#include <stdlib.h>
#include <string.h>

char string_buffer[256];

lv_obj_t *bvs_list_add_button(lv_obj_t *list, const void *icon,
                              const char *txt) {
  lv_obj_t *ret = lv_list_add_button(list, icon, txt);
  lv_obj_set_style_pad_hor(ret, 2, 0);
  lv_obj_set_style_pad_ver(ret, 1, 0);
  return ret;
}

lv_obj_t *bvs_list_create(void) {
  lv_obj_t *list = lv_list_create(lv_screen_active());
  lv_obj_set_style_pad_hor(list, 4, 0);
  lv_obj_set_style_radius(list, 0, 0);
  lv_obj_set_style_border_side(list,0,0);
  lv_obj_set_pos(list, 0, TOPBAR_H);
  lv_obj_set_size(list, SCREEN_WIDTH, SCREEN_HEIGHT - TOPBAR_H);
  return list;
}

void bvs_list_clear(lv_obj_t *list) {
  if (!list)
    return;
  uint32_t count = lv_obj_get_child_count(list);
  for (uint32_t i = 0; i < count; i++)
    lv_group_remove_obj(lv_obj_get_child(list, i));
  lv_obj_delete(list);
}

void path_parent(const char *path, char *parent, size_t parent_size,
                 char *basename, size_t basename_size) {
  strncpy(parent, path, parent_size);
  parent[parent_size - 1] = '\0';

  char *last_slash = strrchr(parent, '/');
  if (!last_slash || last_slash == parent) {
    strncpy(basename, parent + 1, basename_size);
    basename[basename_size - 1] = '\0';
    strcpy(parent, "/");
  } else {
    strncpy(basename, last_slash + 1, basename_size);
    basename[basename_size - 1] = '\0';
    *last_slash = '\0';
  }
}

int entry_name_cmp(const void *a, const void *b) {
  const storage_entry_t *ea = a;
  const storage_entry_t *eb = b;
  return strcmp(ea->name, eb->name);
}

int get_sorted_entries(const char *dir, storage_entry_t *entries,
                       int max_entries) {
  int count = storage_list_dir(dir, entries, max_entries);
  if (count <= 0)
    return 0;

  qsort(entries, (size_t)count, sizeof(storage_entry_t), entry_name_cmp);

  int visible = 0;
  for (int i = 0; i < count; i++) {
    if (entries[i].name[0] != '.')
      entries[visible++] = entries[i];
  }
  return visible;
}