mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-28 08:05:56 -05:00
[library] New functions to support scan metadata for arbitrary path and
adding a mfi as a queue item
This commit is contained in:
parent
cc899651c7
commit
e6f49b721f
@ -346,14 +346,14 @@ fixup_tags(struct media_file_info *mfi)
|
|||||||
void
|
void
|
||||||
library_add_media(struct media_file_info *mfi)
|
library_add_media(struct media_file_info *mfi)
|
||||||
{
|
{
|
||||||
if (!mfi->path || !mfi->fname || !mfi->data_kind)
|
if (!mfi->path || !mfi->fname)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_LIB, "Ignoring media file with missing values (path='%s', fname='%s', data_kind='%d')\n",
|
DPRINTF(E_LOG, L_LIB, "Ignoring media file with missing values (path='%s', fname='%s', data_kind='%d')\n",
|
||||||
mfi->path, mfi->fname, mfi->data_kind);
|
mfi->path, mfi->fname, mfi->data_kind);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mfi->directory_id || mfi->virtual_path)
|
if (!mfi->directory_id || !mfi->virtual_path)
|
||||||
{
|
{
|
||||||
// Missing informations for virtual_path and directory_id (may) lead to misplaced appearance in mpd clients
|
// Missing informations for virtual_path and directory_id (may) lead to misplaced appearance in mpd clients
|
||||||
DPRINTF(E_WARN, L_LIB, "Media file with missing values (path='%s', directory='%d', virtual_path='%s')\n",
|
DPRINTF(E_WARN, L_LIB, "Media file with missing values (path='%s', directory='%d', virtual_path='%s')\n",
|
||||||
@ -375,6 +375,50 @@ library_add_media(struct media_file_info *mfi)
|
|||||||
db_file_update(mfi);
|
db_file_update(mfi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
library_scan_media(const char *path, struct media_file_info *mfi)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
DPRINTF(E_DBG, L_LIB, "Scan metadata for path '%s'\n", path);
|
||||||
|
|
||||||
|
ret = METADATA_PATH_INVALID;
|
||||||
|
for (i = 0; sources[i] && ret == METADATA_PATH_INVALID; i++)
|
||||||
|
{
|
||||||
|
if (sources[i]->disabled || !sources[i]->scan_metadata)
|
||||||
|
{
|
||||||
|
DPRINTF(E_DBG, L_LIB, "Library source '%s' is disabled or does not support scan_metadata\n", sources[i]->name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = sources[i]->scan_metadata(path, mfi);
|
||||||
|
|
||||||
|
if (ret == METADATA_OK)
|
||||||
|
DPRINTF(E_DBG, L_LIB, "Got metadata for path '%s' from library source '%s'\n", path, sources[i]->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == METADATA_OK)
|
||||||
|
{
|
||||||
|
if (!mfi->virtual_path)
|
||||||
|
mfi->virtual_path = strdup(mfi->path);
|
||||||
|
if (!mfi->item_kind)
|
||||||
|
mfi->item_kind = 2; /* music */
|
||||||
|
if (!mfi->media_kind)
|
||||||
|
mfi->media_kind = MEDIA_KIND_MUSIC; /* music */
|
||||||
|
|
||||||
|
unicode_fixup_mfi(mfi);
|
||||||
|
|
||||||
|
fixup_tags(mfi);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINTF(E_LOG, L_LIB, "Failed to read metadata for path '%s' (ret=%d)\n", path, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
library_add_playlist_info(const char *path, const char *title, const char *virtual_path, enum pl_type type, int parent_pl_id, int dir_id)
|
library_add_playlist_info(const char *path, const char *title, const char *virtual_path, enum pl_type type, int parent_pl_id, int dir_id)
|
||||||
{
|
{
|
||||||
@ -443,6 +487,34 @@ library_add_playlist_info(const char *path, const char *title, const char *virtu
|
|||||||
return plid;
|
return plid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
library_add_queue_item(struct media_file_info *mfi)
|
||||||
|
{
|
||||||
|
struct db_queue_item queue_item;
|
||||||
|
|
||||||
|
memset(&queue_item, 0, sizeof(struct db_queue_item));
|
||||||
|
|
||||||
|
if (mfi->id)
|
||||||
|
queue_item.file_id = mfi->id;
|
||||||
|
else
|
||||||
|
queue_item.file_id = 9999999;
|
||||||
|
|
||||||
|
queue_item.title = mfi->title;
|
||||||
|
queue_item.artist = mfi->artist;
|
||||||
|
queue_item.album_artist = mfi->album_artist;
|
||||||
|
queue_item.album = mfi->album;
|
||||||
|
queue_item.genre = mfi->genre;
|
||||||
|
queue_item.artist_sort = mfi->artist_sort;
|
||||||
|
queue_item.album_artist_sort = mfi->album_artist_sort;
|
||||||
|
queue_item.album_sort = mfi->album_sort;
|
||||||
|
queue_item.path = mfi->path;
|
||||||
|
queue_item.virtual_path = mfi->virtual_path;
|
||||||
|
queue_item.data_kind = mfi->data_kind;
|
||||||
|
queue_item.media_kind = mfi->media_kind;
|
||||||
|
|
||||||
|
return db_queue_add_item(&queue_item, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
purge_cruft(time_t start)
|
purge_cruft(time_t start)
|
||||||
{
|
{
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
#include "commands.h"
|
#include "commands.h"
|
||||||
#include "db.h"
|
#include "db.h"
|
||||||
|
|
||||||
|
#define METADATA_OK 0
|
||||||
|
#define METADATA_ERROR -1
|
||||||
|
#define METADATA_PATH_INVALID -2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definition of a library source
|
* Definition of a library source
|
||||||
*
|
*
|
||||||
@ -62,6 +66,10 @@ struct library_source
|
|||||||
*/
|
*/
|
||||||
int (*fullrescan)(void);
|
int (*fullrescan)(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scans metadata for the media file with the given path into the given mfi
|
||||||
|
*/
|
||||||
|
int (*scan_metadata)(const char *path, struct media_file_info *mfi);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -71,6 +79,12 @@ library_add_media(struct media_file_info *mfi);
|
|||||||
int
|
int
|
||||||
library_add_playlist_info(const char *path, const char *title, const char *virtual_path, enum pl_type type, int parent_pl_id, int dir_id);
|
library_add_playlist_info(const char *path, const char *title, const char *virtual_path, enum pl_type type, int parent_pl_id, int dir_id);
|
||||||
|
|
||||||
|
int
|
||||||
|
library_scan_media(const char *path, struct media_file_info *mfi);
|
||||||
|
|
||||||
|
int
|
||||||
|
library_add_queue_item(struct media_file_info* mfi);
|
||||||
|
|
||||||
void
|
void
|
||||||
library_rescan();
|
library_rescan();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user