> We sync all the changes to `downloadList` from `datastore`.

Yep, that's right.

>And then we apply the result back to the datastore. Not sure why we need this.

No, we don't write the results back to the `datastore`. What we're doing is getting the *values* from the `datastore`. The `downloadList` only contains the keys. When we do the sync, we only store the keys.

> downloadListDB seems not be involved in all the process...

Oops, I forgot to write the results back to `downloadListDB`. I'll fix that.