I have found it! Look at the following lines from rb-metadata-dbus-service.c:
#define ATTENTION_SPAN 30
...
electromagnetic_shotgun (gpointer data)
{
ServiceData *c = (ServiceData *)data;
GTime now = time(NULL);
int idle = now - c->last_active;
/* quit if we haven't done anything for a while */
if (idle > ATTENTION_SPAN) { rb_debug ("shutting down (%ds idle)", idle); g_main_loop_quit (c->loop);
}
No wonder all lengthy operations are cut off after 15 seconds!
Another observation: It seems that metadata-change operations are quicker and thus less error-prone when only a small collection is loaded. This suggests that the metadata-change background operation is hindered by Rhythmbox rescanning the collection while the operation is in progress.
I have found it! Look at the following lines from rb-metadata- dbus-service. c:
#define ATTENTION_SPAN 30 _shotgun (gpointer data)
...
electromagnetic
{
ServiceData *c = (ServiceData *)data;
GTime now = time(NULL);
int idle = now - c->last_active;
/* quit if we haven't done anything for a while */
rb_debug ("shutting down (%ds idle)", idle);
g_main_ loop_quit (c->loop);
if (idle > ATTENTION_SPAN) {
}
return TRUE;
g_timeout_ add_seconds (ATTENTION_SPAN / 2, (GSourceFunc) electromagnetic _shotgun, &svc);
}
...
if (!svc.external)
No wonder all lengthy operations are cut off after 15 seconds!
Another observation: It seems that metadata-change operations are quicker and thus less error-prone when only a small collection is loaded. This suggests that the metadata-change background operation is hindered by Rhythmbox rescanning the collection while the operation is in progress.