add sync config

This commit is contained in:
kekee000
2016-03-19 10:02:53 +08:00
parent d52a7ab907
commit 043533118f
4 changed files with 51 additions and 34 deletions

View File

@@ -18,7 +18,7 @@
* "status": 0
* "data": {
* "fontName": "fonteditor", // 字体名称
* "hasNew": 1, // 如果有新数据则标记为true, 同时设置fontType, timestamp, ttf字段
* "hasNew": 1, // 如果有新数据则标记为1, 同时设置fontType, timestamp, ttf字段
* "timestamp": 12345678, // 新纪录时间戳,unix timestamp 精确到毫秒
* "fontType": "ttf", // 新纪录类型
* "ttf": base64str // 新纪录的base64字体数据
@@ -29,7 +29,7 @@
* GET参数:
* action: 当前动作,默认为`push`推送数据
* POST参数:
* callbackUrl: post回调函数地址,通过302调转到回调地址,通知编辑器
* callbackUrl: post回调函数地址,通过302跳转到回调地址,通知编辑器
* fontName: 字体名称
* fontType: 字体类型,多个类型用`,`隔开
* encode: 编码格式,默认`base64`
@@ -55,7 +55,8 @@
* @author mengke01(kekee000@gmail.com)
*/
define('SYNC_FILE', __DIR__ . '/list.md');
define('SYNC_FILE', __DIR__ . '/list.md'); // 同步的文件
/**
@@ -78,21 +79,6 @@ function jsonp($status, $data = null, $statusInfo = null) {
echo "$callback($json)";
}
/**
* base64字符串转字节后写入到文件
*
* @param string $base64Str base64字符串
* @param string $outputfile 输出文件地址
* @return 写入的字节数或者false
*/
function writeFile($base64Str, $outputfile) {
$ifp = fopen($outputfile, "wb");
$ret = fwrite($ifp, base64_decode( $base64Str));
fclose($ifp);
return $ret;
}
/**
* 获取毫秒计数的unix 时间戳
*
@@ -102,6 +88,33 @@ function getTimestamp() {
return intval(microtime(true) * 1000);
}
/**
* base64字符串转字节后写入到文件
*
* @param string $base64Str base64字符串
* @param string $file 输出文件地址
* @return 写入的字节数或者false
*/
function writeBase64File($base64Str, $file) {
$fileHandle = fopen($file, "wb");
$ret = fwrite($fileHandle, base64_decode($base64Str));
fclose($fileHandle);
return $ret;
}
/**
* 读取文件到base64字符串
*
* @param string $file 输出文件地址
* @return base64字符串
*/
function readBase64File($file) {
$fileHandle = fopen($file, 'rb');
$fontBuffer = fread($fileHandle, filesize($file));
fclose($fileHandle);
return base64_encode($fontBuffer);
}
/**
* 获取同步的记录
*
@@ -111,7 +124,9 @@ function getSyncRecord() {
if (file_exists(SYNC_FILE)) {
$text = file_get_contents(SYNC_FILE);
$json = json_decode($text, true);
return empty($json) ? array() : $json;
if(!empty($json)) {
return $json;
}
}
return array();
}
@@ -119,8 +134,6 @@ function getSyncRecord() {
/**
* 保存同步的记录
*
* @return array
*/
function saveSyncRecord($data) {
file_put_contents(SYNC_FILE, json_encode($data));
@@ -141,7 +154,7 @@ function doPush() {
foreach (explode(',', $fontType) as $type) {
if (!empty($_POST[$type])) {
writeFile($_POST[$type], "${fontName}.${type}");
writeBase64File($_POST[$type], "${fontName}.${type}");
$ret[] = $type;
}
}
@@ -156,7 +169,7 @@ function doPush() {
);
saveSyncRecord($recordList);
// 回调地址
// 根据回调地址进行返回结果
if (!empty($_POST['callbackUrl'])) {
$data = array(
'status' => 0,
@@ -167,7 +180,6 @@ function doPush() {
)
);
$url = $_POST['callbackUrl'] . '&data=' . urlencode(json_encode($data));
echo $url;
header('Location: ' . $url);
}
}
@@ -201,10 +213,7 @@ function doPull() {
'timestamp' => $record['timestamp'],
'fontType' => $fontType,
);
$fileHandle = fopen($fontFile, 'r');
$fontBuffer = fread($fileHandle, filesize($fontFile));
fclose($fileHandle);
$data[$fontType] = base64_encode($fontBuffer);
$data[$fontType] = readBase64File($fontFile);
jsonp(0, $data);
return;
}
@@ -217,6 +226,7 @@ function doPull() {
jsonp(0, $data);
}
// 设置当前操作的帐号
if (empty($_COOKIE['FONT_USER'])) {
$user = md5($_SERVER["REMOTE_ADDR"] . 'FONT_USER');
@@ -224,7 +234,6 @@ if (empty($_COOKIE['FONT_USER'])) {
setcookie('FONT_USER', $user, time() + 315360000); // 10年不过期
}
// 入口
$action = $_GET['action'];
if ($action == 'pull') {

View File

@@ -1 +1 @@
{"cicons":{"user":"4ea8e455b2c68b92496d783039b08f2b","timestamp":1458308116871,"fontType":"ttf"}}
{"cicons":{"user":"3e60a8b0712c80d976fb3e917c658d4f","timestamp":1458308845195,"fontType":"ttf"}}

View File

@@ -130,6 +130,7 @@ define(
'save': function () {
if (program.ttfManager.get()) {
// 已经保存过的项目
var projectId = program.data.projectId;
if (projectId) {
program.project.update(projectId, program.ttfManager.get())
@@ -145,6 +146,7 @@ define(
});
}
// 未保存的项目
else {
var name = program.ttfManager.get().name.fontFamily || '';
if ((name = window.prompt(i18n.lang.msg_input_proj_name, name))) {

View File

@@ -81,7 +81,6 @@ define(
setSyncStatus(syncConfig.url, 0x2);
// 不支持拉取,但有可能支持推送,这里也处理为成功
if (reason.status === 200) {
resolver.resolve({});
}
else {
@@ -165,6 +164,13 @@ define(
});
}
/**
* 更新推送时间戳,在下一次推送的时候发送时间戳
*
* @param {string} projectId 项目编号
* @param {number} timestamp 当前记录时间戳
* @param {Object} syncConfig 同步配置
*/
function updateSyncTimestamp(projectId, timestamp, syncConfig) {
if (!syncConfig) {
syncConfig = project.getConfig(projectId).sync;
@@ -196,7 +202,7 @@ define(
var resolver = new Resolver();
checkSync(syncConfig).then(function (data) {
if (data.hasNew && confirm('字体`' + data.fontName + '`有新版本,是否同步新版本?')) {
if (data.hasNew && window.confirm('字体`' + data.fontName + '`有新版本,是否同步新版本?')) {
if (data.fontType === DEFAULT_FONTTYPE && data[data.fontType]) {
// 解析后台传送过来的ttf字形
var ttfBuffer = new Int8Array(base642bytes(data[data.fontType])).buffer;
@@ -218,7 +224,7 @@ define(
}
return;
}
// 获取当前推送的ttf,如果没有,则从本地存储中获取
if (!ttf) {
project.get(projectId).then(function (data) {
doSync(syncConfig, data, resolver);
@@ -237,7 +243,7 @@ define(
});
var promise = resolver.promise();
// 更新当前的时间戳
// 更新当前的时间戳,这里包含两个来源,拉取新纪录的时间戳和推送成功后的时间戳
promise.then(function (data) {
if (data.timestamp) {
updateSyncTimestamp(projectId, data.timestamp, syncConfig);