Make sync - even initial sync - situationally aware of what the user is doing/wants/needs
So let's say the sync client is already moving data. Thing is, I need a specific folder or file NOW.
So, the CLient should support multiple streams - even if stuff doesn't get faster, at least they are downloaded in parallel, so the user does not have to wait that much to see/access his/her stuff.
For example: By default the sync client would work with 3streams: one for folder/file lists (higher priority), one for small files (<1MB or less scaling on network speed) and one for large files (>1MB files, lower priority)
If I need to access some specific file, I could just open up Explorer to Onedrive, and tehe following would happen:
<USER ENGAGED ONEDRIVE: START DYNAMIC SYNC>
<DYNAMIC SYNC ENGAGED: Movethe 3 sync streams to lower priorities, create 3 more for interactive OneDrive Sync>
Onedrive would pick up the folder I am in and start using those 3 new streams to fetch the content from that folder.
As I browse, the file/folder list is updated for the folders I am on only, and starts fetching files as long as I am in that folder.
If I change to another folder, the interactive streams will go as far as finish off what they started, and start syncing stuff from the current folder.
This way, I can just browse away into the OneDrive folder list and idle my Explorer in the folder I want to get those files sooner.