Files
Archived/mpvd/src/dir.c
2025-02-24 15:18:44 -05:00

50 lines
1.4 KiB
C

#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
#include "dir.h"
char* get_music_directory() {
struct passwd *pw = getpwuid(getuid());
const char *homedir = pw->pw_dir;
char *music_dir = malloc(strlen(homedir) + strlen("/Music/mpvd") + 1);
strcpy(music_dir, homedir);
strcat(music_dir, "/Music/mpvd");
return music_dir;
}
char** load_songs(int *count, const char *music_dir) {
DIR *d;
struct dirent *dir;
d = opendir(music_dir);
if (!d) {
perror("Failed to open music directory");
exit(1);
}
char **songs = malloc(sizeof(char*) * 100);
int index = 0;
while ((dir = readdir(d)) != NULL) {
if (dir->d_type == DT_REG) {
songs[index] = strdup(dir->d_name);
index++;
} else if (dir->d_type == DT_DIR && strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0) {
char dir_name[512];
snprintf(dir_name, sizeof(dir_name), "%s/", dir->d_name);
songs[index] = strdup(dir_name); // Append '/' to indicate a directory
index++;
}
}
closedir(d);
*count = index;
return songs;
}
void navigate_directory(const char *dir, char **songs, int *song_count) {
free(songs); // Free old song list
songs = load_songs(song_count, dir); // Load new song list
}