kityminder
Version:
89 lines (69 loc) • 2.69 kB
JavaScript
/**
* @fileOverview
*
* 配置面板
*
* @author: techird
* @copyright: Baidu FEX, 2014
*/
KityMinder.registerUI('ui/menu/preference/preference', function (minder) {
var $menu = minder.getUI('menu/menu');
var ret = minder.getUI('eve').setup({});
var $panel = $menu.createSub('preference');
// 同步用户配置文件
function syncPreference() {
// 配置文件在网盘的路径
var remotePreferencesPath = '/apps/kityminder/app.preferences';
// 记录远端配置的和本地配置的版本
// - 远端配置保存在 json 内容的 version 字段中
// - 本地配置用 localStorage 来记录
var remoteVersion = 0,
localVersion = localStorage.preferencesVersion || 0;
// 远端配置和本地配置的内容
var remotePreferences, localPreferences;
downloadPreferences();
// 绑定实例上配置改变的事件,配置有变需要上传
minder.on('preferenceschange', function() {
localStorage.preferencesVersion = ++localVersion;
uploadPreferences();
});
// 下载远端配置
function downloadPreferences() {
// 比较远端和本地版本
// - 远端版本较新则设置本地版本为远端版本
// - 本地版本较新则上传本地版本
function merge(remote) {
if (!remote) return;
remote = JSON.parse(remote.data.content);
remoteVersion = remote.version;
remotePreferences = remote.preferences;
localPreferences = minder.getPreferences();
if (localVersion < remoteVersion) {
minder.resetPreferences(remotePreferences);
} else if (localVersion > remoteVersion) {
uploadPreferences();
}
}
// 下载配置的过程
// 需要先获得下载的 URL 再使用 ajax 请求内容
fio.file.read({
path: remotePreferencesPath,
dataType: 'text'
}).then(merge);
}
// 上传本地配置
function uploadPreferences() {
localPreferences = minder.getPreferences();
// 上传的数据需要附带版本信息
var data = {
version: localVersion,
preferences: localPreferences
};
fio.file.write({
path: remotePreferencesPath,
content: JSON.stringify(data),
ondup: fio.file.DUP_OVERWRITE
});
}
}
});