preference.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * @fileOverview
  3. *
  4. * 配置面板
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('ui/menu/preference/preference', function (minder) {
  10. var $menu = minder.getUI('menu/menu');
  11. var ret = minder.getUI('eve').setup({});
  12. var $panel = $menu.createSub('preference');
  13. // 同步用户配置文件
  14. function syncPreference() {
  15. // 配置文件在网盘的路径
  16. var remotePreferencesPath = '/apps/kityminder/app.preferences';
  17. // 记录远端配置的和本地配置的版本
  18. // - 远端配置保存在 json 内容的 version 字段中
  19. // - 本地配置用 localStorage 来记录
  20. var remoteVersion = 0,
  21. localVersion = localStorage.preferencesVersion || 0;
  22. // 远端配置和本地配置的内容
  23. var remotePreferences, localPreferences;
  24. downloadPreferences();
  25. // 绑定实例上配置改变的事件,配置有变需要上传
  26. minder.on('preferenceschange', function() {
  27. localStorage.preferencesVersion = ++localVersion;
  28. uploadPreferences();
  29. });
  30. // 下载远端配置
  31. function downloadPreferences() {
  32. // 比较远端和本地版本
  33. // - 远端版本较新则设置本地版本为远端版本
  34. // - 本地版本较新则上传本地版本
  35. function merge(remote) {
  36. if (!remote) return;
  37. remote = JSON.parse(remote.data.content);
  38. remoteVersion = remote.version;
  39. remotePreferences = remote.preferences;
  40. localPreferences = minder.getPreferences();
  41. if (localVersion < remoteVersion) {
  42. minder.resetPreferences(remotePreferences);
  43. } else if (localVersion > remoteVersion) {
  44. uploadPreferences();
  45. }
  46. }
  47. // 下载配置的过程
  48. // 需要先获得下载的 URL 再使用 ajax 请求内容
  49. fio.file.read({
  50. path: remotePreferencesPath,
  51. dataType: 'text'
  52. }).then(merge);
  53. }
  54. // 上传本地配置
  55. function uploadPreferences() {
  56. localPreferences = minder.getPreferences();
  57. // 上传的数据需要附带版本信息
  58. var data = {
  59. version: localVersion,
  60. preferences: localPreferences
  61. };
  62. fio.file.write({
  63. path: remotePreferencesPath,
  64. content: JSON.stringify(data),
  65. ondup: fio.file.DUP_OVERWRITE
  66. });
  67. }
  68. }
  69. });