The main StackSync client is a application that monitors local folders and synchronizes them with a remote repository. The StackSync client interacts with both the synchronization and storage services. The first one handles metadata communication, such as time stamps or file names, and the second one is in charge of raw data.
This decoupling of sync control flows from data flows implies a user-centric design where the client directly controls its digital locker or storage container. The synchronization protocol have been designed to put the load in the client side, whereas the synchronization service just checks if the change is consistent, and then applies all changes proposed by clients.
The desktop client must meet some essential requirements:
- Detect file changes. Every time a user modifies a file inside the synchronized folder, the client must be aware of the event and process it in order to be synchronized with StackSync.
- Handle conflicts. Conflicts may occur on StackSync due to offline or concurrent operations from different locations. For instance, two users sharing a folder may edit the same file at the same time, so the client must be prepared to handle file conflicts.
- Automatic updates. As the application will be on constant improvement, it must be able to transparently upgrade to newer version.
- Error reporting. The application must log every error occurred and report it to the server in order to identify the problem and get it fixed.
- Visual information. The application must be integrated with the operating system shell to show information about the state of files. This information will be displayed to users in the form of an overlay icon that will change from one icon to another depending on the state. In Figure 3 we observe the icons that will be displayed when a file is being synchronized, is already synchronized, or cannot be synchronized due to an exceeded quota or other errors.