/** \file aft.c Audio file table functions. */
+#include <dirent.h> /* readdir() */
#include "para.h"
#include "error.h"
#include "string.h"
#include "afs.h"
#include "net.h"
#include "vss.h"
+#include "fd.h"
static struct osl_table *audio_file_table;
AFSI_LYRICS_ID_OFFSET = 24,
/** Storage position of the .audio_format_id field. */
AFSI_AUDIO_FORMAT_ID_OFFSET = 28,
+ /** 3 bytes reserved space for future usage. */
+ AFSI_AUDIO_FORMAT_UNUSED_OFFSET = 29,
/** On-disk storage space needed. */
- AFSI_SIZE = 29
+ AFSI_SIZE = 32
};
/**
write_u32(buf + AFSI_LYRICS_ID_OFFSET, afsi->lyrics_id);
write_u8(buf + AFSI_AUDIO_FORMAT_ID_OFFSET,
afsi->audio_format_id);
+ memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 3);
}
/**
struct osl_object afsi_obj;
struct afs_info new_afsi;
int ret = get_hash_of_row(aft_row, &aft_hash);
+ struct afsi_change_event_data aced;
if (ret < 0)
return ret;
ret = get_chunk_table_of_row(aft_row, &afd->afhi);
if (ret < 0)
return ret;
- ret = mmap_full_file(afd->path, O_RDONLY, &afd->map);
+ ret = mmap_full_file(afd->path, O_RDONLY, &afd->map.data,
+ &afd->map.size, NULL);
if (ret < 0)
goto err;
hash_function(afd->map.data, afd->map.size, file_hash);
new_afsi.num_played++;
new_afsi.last_played = time(NULL);
save_afsi(&new_afsi, &afsi_obj); /* in-place update */
- if (afd->current_play_mode == PLAY_MODE_PLAYLIST)
- ret = playlist_update_audio_file(aft_row);
- else {
- struct afsi_change_event_data aced = {.aft_row = aft_row,
- .old_afsi = &afd->afsi};
- afs_event(AFSI_CHANGE, NULL, &aced);
- }
+
+ aced.aft_row = aft_row;
+ aced.old_afsi = &afd->afsi;
+ afs_event(AFSI_CHANGE, NULL, &aced);
+
return ret;
err:
free(afd->afhi.chunk_table);
return 0;
result->data = msg.buf;
result->size = msg.size;
+ afs_event(AUDIO_FILE_ADD, &msg, aft_row);
return 1;
- // mood_update_audio_file(aft_row, NULL);
}
struct private_add_data {
goto out_free;
}
/* We still want to add this file. Compute its hash. */
- ret = mmap_full_file(path, O_RDONLY, &map);
+ ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, NULL);
if (ret < 0)
goto out_free;
hash_function(map.data, map.size, hash);
if (ret > 0) {
send_buffer(fd, (char *)result.data);
free(result.data);
- } else
+ } else if (ret < 0)
send_va_buffer(fd, "%s\n", PARA_STRERROR(-ret));
return ret;
}