Improve code, first working version
This commit is contained in:
parent
2ff13c0508
commit
539f6d173b
2
bliss
2
bliss
@ -1 +1 @@
|
|||||||
Subproject commit 75db3a83356615bcc5c00c269a5a0356b20fb676
|
Subproject commit 0b289b9be7c9bbabef61c6131b629fc707b564e7
|
43
src/main.c
43
src/main.c
@ -233,6 +233,18 @@ void update_database(
|
|||||||
// Store latest mtime seen
|
// Store latest mtime seen
|
||||||
time_t latest_mtime = initial_mtime;
|
time_t latest_mtime = initial_mtime;
|
||||||
|
|
||||||
|
// Get number of songs in db
|
||||||
|
struct mpd_stats* stats = mpd_run_stats(conn);
|
||||||
|
if (NULL == stats) {
|
||||||
|
fprintf(stderr, "Unable to fetch number of songs in the db.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
unsigned int n_songs = mpd_stats_get_number_of_songs(stats);
|
||||||
|
if (0 == n_songs) {
|
||||||
|
fprintf(stderr, "Unable to fetch number of songs in the db.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the list of all the files to process
|
// Get the list of all the files to process
|
||||||
if (!mpd_send_list_all_meta(conn, NULL)) {
|
if (!mpd_send_list_all_meta(conn, NULL)) {
|
||||||
fprintf(stderr, "Unable to get a full list of items in the db.\n");
|
fprintf(stderr, "Unable to get a full list of items in the db.\n");
|
||||||
@ -246,26 +258,35 @@ void update_database(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the received list
|
// Retrieve the received list in memory, to prevent timeout
|
||||||
|
struct mpd_entity **entities = malloc(sizeof(struct mpd_entity *) * n_songs);
|
||||||
struct mpd_entity *entity;
|
struct mpd_entity *entity;
|
||||||
|
int i = 0;
|
||||||
while ((entity = mpd_recv_entity(conn)) != NULL) {
|
while ((entity = mpd_recv_entity(conn)) != NULL) {
|
||||||
const struct mpd_song *song;
|
|
||||||
|
|
||||||
switch (mpd_entity_get_type(entity)) {
|
switch (mpd_entity_get_type(entity)) {
|
||||||
case MPD_ENTITY_TYPE_SONG:
|
case MPD_ENTITY_TYPE_SONG:
|
||||||
song = mpd_entity_get_song(entity);
|
entities[i] = entity;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MPD_ENTITY_TYPE_UNKNOWN:
|
case MPD_ENTITY_TYPE_UNKNOWN:
|
||||||
case MPD_ENTITY_TYPE_DIRECTORY:
|
case MPD_ENTITY_TYPE_DIRECTORY:
|
||||||
case MPD_ENTITY_TYPE_PLAYLIST:
|
case MPD_ENTITY_TYPE_PLAYLIST:
|
||||||
// Pass such types
|
// Pass such types
|
||||||
|
mpd_entity_free(entity);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process all the entities
|
||||||
|
for (int i = 0; i < n_songs; ++i) {
|
||||||
|
struct mpd_entity *entity = entities[i];
|
||||||
|
const struct mpd_song *song = mpd_entity_get_song(entity);
|
||||||
|
|
||||||
// Pass song if already seen
|
// Pass song if already seen
|
||||||
time_t song_mtime = mpd_song_get_last_modified(song);
|
time_t song_mtime = mpd_song_get_last_modified(song);
|
||||||
if (difftime(song_mtime, initial_mtime) <= 0) {
|
if (difftime(song_mtime, initial_mtime) <= 0) {
|
||||||
|
mpd_entity_free(entity);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,7 +310,13 @@ void update_database(
|
|||||||
// Close SQLite connection
|
// Close SQLite connection
|
||||||
sqlite3_close(dbh);
|
sqlite3_close(dbh);
|
||||||
|
|
||||||
// Update last_mtime
|
// Check if exit was due to an error
|
||||||
|
if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) {
|
||||||
|
printf("MPD Error: %s\n", mpd_connection_get_error_message(conn));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update last_mtime, if no error occured.
|
||||||
FILE *fp = fopen(mpdbliss_data_file, "w+");
|
FILE *fp = fopen(mpdbliss_data_file, "w+");
|
||||||
if (NULL != fp) {
|
if (NULL != fp) {
|
||||||
fprintf(fp, "%d\n", latest_mtime);
|
fprintf(fp, "%d\n", latest_mtime);
|
||||||
@ -299,6 +326,9 @@ void update_database(
|
|||||||
fprintf(stderr, "Unable to store latest mtime seen.\n");
|
fprintf(stderr, "Unable to store latest mtime seen.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(entities);
|
||||||
|
printf("Done! :)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -306,7 +336,6 @@ void update_database(
|
|||||||
* Rescan errored files
|
* Rescan errored files
|
||||||
*
|
*
|
||||||
* @param mpd_base_path Root directory of the MPD library.
|
* @param mpd_base_path Root directory of the MPD library.
|
||||||
* @return 0 on success, non zero otherwise.
|
|
||||||
*/
|
*/
|
||||||
void rescan_errored(const char *mpd_base_path)
|
void rescan_errored(const char *mpd_base_path)
|
||||||
{
|
{
|
||||||
@ -351,6 +380,8 @@ void rescan_errored(const char *mpd_base_path)
|
|||||||
|
|
||||||
// Close SQLite connection
|
// Close SQLite connection
|
||||||
sqlite3_close(dbh);
|
sqlite3_close(dbh);
|
||||||
|
|
||||||
|
printf("Done! :)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user