Ditto剪切板云同步工具 - DittoSync
著名剪切板增强Ditto 的云同步工具
功能
- 本地存储有限,历史剪切板丢失
家庭、办公多台电脑,剪切板不同步
主要参数
因为免费,云存储使用unicloud的免费数据库(私有部署)
- 从云端下载仅限最新500条(云端太多,没必要)
- 上传服务器不限条数,全部存储
- 没有窗口,后台运行,进程可见
- 配置文件:
config.json
- 运行记录及提示都在日志文件
ditto-sync-2022-01-27.log
私有云端部署
1. 注册unicloud
2. 上传云函数
云函数代码
'use strict';
process.env.TZ =
exports.main = async (event, context) => {
let date = new Date()
date.setHours(date.getHours() + 8)
let currentTime = date.toLocaleString('zh-CN')
const db = uniCloud.database();
const dbCmd = db.command
const ditto = db.collection('ditto');
const dittoUser = db.collection('dittoUser');
let httpMethod = event.httpMethod
let path = event.path
let getDittoList = async function(topCount = 500) {
let dittoCRC = await ditto.field({"_id":1}).limit(topCount).orderBy("time","desc").get()
return dittoCRC["data"].map(e=>e._id)
}
let getUserList = async function(pcID,topCount=500) {
let userCRC = await dittoUser.where({pcID:pcID}).field({"CRC" : 1,"_id":0}).limit(topCount).orderBy("time","desc").get()
return userCRC["data"].map(e=>e.CRC)
}
let removeUserList = async function(pcID) {
let dittoCRC = await getDittoList()
return await dittoUser.where(
{
"pcID" : pcID,
"CRC": {$nin: dittoCRC}
}
).remove()
}
if (httpMethod == "POST") {
let body = JSON.parse(event.body)
let method = body.method
if (method == "addOne") {
let cnt = await ditto.where({
_id: body.CRC
}).count()
if(cnt.total==0){
await ditto.add({time:new Date(),_id:body.CRC,CRC: body.CRC,Main:body.Main,Data:body.Data})
}
cnt = await dittoUser.where({
CRC: body.CRC,
pcID: body.pcID
}).count()
if(cnt.total==0){
await dittoUser.add(
{
time:new Date(),
CRC: body.CRC,
pcID: body.pcID,
}
)
await removeUserList(body.pcID)
}
return {success: true}
}
if (method == "addUser") {
let body = JSON.parse(event.body)
let cnt = await dittoUser.where({
CRC: body.CRC,
pcID: body.pcID
}).count()
if(cnt.total==0){
await dittoUser.add(
{
CRC: body.CRC,
pcID: body.pcID,
}
)
await removeUserList(body.pcID)
}
return {success: true}
}
} else {
let {pcID} = event.queryStringParameters
let dittoCRC = await getDittoList(500)
let userCRC = await getUserList(pcID)
let rst = await ditto.where(
{"_id": { $in: dittoCRC, $nin: userCRC }}
).limit(1).orderBy("time","desc").get()
return rst["data"]
}
};
3.创建数据库 ditto dittoUser
4. 设置云函数-http-访问地址
获取类似这样的api地址https://xxxxxxx-xxxx-xxxxxx-xxxxxxx-xxxxxxxxx.bspapp.com/mydittoxxxxx
客户端下载及配置
- 下载客户端并解压 阿里云盘下载
配置config.json
{ "pcID" : "dell", #客户端标记,每台电脑不一样 "dbPath" : "C:\Users\shuaige\AppData\Roaming\Ditto\Ditto.db", #数据库路径 "exePath" : "C:\Program Files\Ditto\Ditto.exe", #Ditto主程序路径 "baseURL" : "https://xx.bspapp.com/XXX", #云端api,见【私有云端部署】 "maxSize" : 20000, #单条剪切板上传阈值,建议2万字以下,太大服务端受不了 "delay" : 3, #api请求频率,不宜太频繁 "donateCode" : "" #捐赠码,标准用户留空即可 }
设置开机启动:教程
- 运行记录及提示都在日志文件
ditto-sync-2022-01-27.log
TODO(Maybe)
- mysql支持
- 云端独立搜索网页
版本差异
为了感谢捐赠者,版本略有差异,标准版已经足够用
功能 | 标准版 | 捐赠版 |
---|---|---|
私有部署 | √ | √ |
电脑台数 | 无限 | 无限 |
上传条数 | 无限 | 无限 |
下载条数 | 最近500条 | 最近500条 |
私有部署 | √ | √ |
单条最大字节 | 20000字 | 512000字 |
同步延迟 | >1s | >0s |
雇佣作者部署 | × | √ |
送二级备案域名 | × | √ |
列入捐赠列表 | × | √ |
联系方式
QQ群:767642647
官方发布页