caniadd/src/cache.h

75 lines
1.5 KiB
C

#ifndef _CACHE_H
#define _CACHE_H
#include <stdint.h>
#include <stdbool.h>
#include "error.h"
#include "ed2k.h"
#include "api.h"
enum cache_select {
CACHE_S_ALL = 0,
CACHE_S_LID = 1 << 0,
CACHE_S_FNAME = 1 << 1,
CACHE_S_FSIZE = 1 << 2,
CACHE_S_ED2K = 1 << 3,
CACHE_S_WATCHDATE = 1 << 4,
CACHE_S_STATE = 1 << 5,
CACHE_S_MODDATE = 1 << 6,
};
struct cache_entry {
uint64_t lid, fsize, wdate, moddate;
/* free() if requested */
char *fname;
uint8_t ed2k[ED2K_HASH_SIZE];
uint16_t state;
};
/*
* Init tha cache
*/
enum error cache_init();
/*
* Is the cache already setup or not?
*/
bool cache_is_init();
/*
* Free tha cache
*/
void cache_free();
/*
* Add a new mylist entry to the cache
*/
enum error cache_add(uint64_t lid, const char *fname,
uint64_t fsize, const uint8_t *ed2k, uint64_t watchdate,
enum mylist_state state);
/*
* Update an already existing cache entry by lid
*/
enum error cache_update(uint64_t lid, const struct api_mylistadd_opts *mods);
/*
* Get a cache entry
*
* sel is the columns to select
* If 0, everything is selected and returned.
* Can be ORed together
*
* out_ce can be NULL. Useful, if we only want
* to check if the entry exists or not.
*/
enum error cache_get(const char *fname, uint64_t fsize, enum cache_select sel,
struct cache_entry *out_ce);
/*
* Does an entry exists?
*/
bool cache_exists(const char *fname, uint64_t size);
#endif /* _CACHE_H */