summaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/data.c b/src/data.c
index a37c6da..1fbc3e8 100644
--- a/src/data.c
+++ b/src/data.c
@@ -6,6 +6,7 @@
#include "ref.h"
#include "track.h"
#include "tag.h"
+#include "tui.h"
#include <fts.h>
#include <dirent.h>
@@ -319,6 +320,44 @@ tracks_save(struct tag *tag)
}
bool
+track_rm(struct track *track)
+{
+ struct link *link;
+ struct ref *ref;
+ struct tag *tag;
+ bool found;
+
+ if (!rm_file(track->fpath)) {
+ CMD_SET_STATUS("Failed to remove track");
+ return false;
+ }
+
+ found = false;
+ for (LIST_ITER(&tracks, link)) {
+ ref = UPCAST(link, struct ref);
+ if (ref->data == track) {
+ link_pop(link);
+ ref_free(ref);
+ found = true;
+ break;
+ }
+ }
+
+ for (LIST_ITER(&track->tags, link)) {
+ ref = UPCAST(link, struct ref);
+ tag = ref->data;
+ refs_rm(&tag->tracks, track);
+ }
+
+ if (player.track == track)
+ player.track = NULL;
+
+ track_free(track);
+
+ return true;
+}
+
+bool
make_dir(const char *path)
{
return mkdir(path, S_IRWXU | S_IRWXG) == 0;