struct afs_info {
/** Seconds since the epoch. */
uint64_t last_played;
- /** Bitfield of set attributes. */
+ /** Bit field of set attributes. */
uint64_t attributes;
/** Counts how many times the file was selected. */
uint32_t num_played;
struct osl_object map;
};
+enum pattern_match_flags {
+ PM_REVERSE_LOOP = 1,
+ PM_NO_PATTERN_MATCHES_EVERYTHING = 2,
+ PM_SKIP_EMPTY_NAME = 4,
+};
+
+struct pattern_match_data {
+ struct osl_table *table;
+ unsigned loop_col_num;
+ unsigned match_col_num;
+ unsigned pm_flags;
+ int fnmatch_flags;
+ struct osl_object patterns;
+ void *data;
+ int (*action)(struct osl_table *table, struct osl_row *row, const char *name, void *data);
+};
+
/* afs */
typedef int callback_function(const struct osl_object *, struct osl_object *);
__noreturn int afs_init(uint32_t cookie, int socket_fd);
int stdin_command(int fd, struct osl_object *arg_obj, callback_function *f,
unsigned max_len, struct osl_object *result);
int string_compare(const struct osl_object *obj1, const struct osl_object *obj2);
-int para_atol(const char *str, long *result);
int open_next_audio_file(struct audio_file_data *afd);
int close_audio_file(struct audio_file_data *afd);
+int for_each_matching_row(struct pattern_match_data *pmd);
/* score */
int score_init(struct table_info *ti, const char *db);
/* aft */
int aft_init(struct table_info *ti, const char *db);
void aft_shutdown(enum osl_close_flags flags);
-int aft_get_row_of_path(char *path, struct osl_row **row);
+int aft_get_row_of_path(const char *path, struct osl_row **row);
int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data *afd);
int load_afsi(struct afs_info *afsi, struct osl_object *obj);
void save_afsi(struct afs_info *afsi, struct osl_object *obj);
int get_afsi_of_row(const struct osl_row *row, struct afs_info *afsi);
+int get_afhi_of_row(const struct osl_row *row, struct audio_format_info *afhi);
+int get_afsi_of_path(const char *path, struct afs_info *afsi);
int get_audio_file_path_of_row(const struct osl_row *row, char **path);
int get_afsi_object_of_row(const struct osl_row *row, struct osl_object *obj);
int audio_file_loop(void *private_data, osl_rbtree_loop_func *func);
int table_name ## _init(struct table_info *ti, const char *db); \
void table_name ## _shutdown(enum osl_close_flags flags); \
int cmd_prefix ## _get_name_by_id(uint32_t id, char **name); \
+ int cmd_prefix ## _get_def_by_id(uint32_t id, struct osl_object *def); \
int cmd_prefix ## _get_name_and_def_by_row(const struct osl_row *row, \
char **name, struct osl_object *def); \
extern struct osl_table *table_name ## _table;