Ditto剪切板云同步工具 - DittoSync

著名剪切板增强Ditto 的云同步工具

功能

  1. 上传到云服务器
  2. 从云服务器下载
  3. 多台电脑同步
  4. 仅支持私有部署(隐私起见)
  5. 存储所有历史剪切板

    安全性

    自己抓包,大众监督,多说无益

    解决的场景

  • 本地存储有限,历史剪切板丢失
  • 家庭、办公多台电脑,剪切板不同步

    主要参数

  • 因为免费,云存储使用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

客户端下载及配置

  1. 下载客户端并解压 阿里云盘下载
  2. 配置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" : ""     #捐赠码,标准用户留空即可
    }
    
  3. 设置开机启动:教程

  4. 运行记录及提示都在日志文件 ditto-sync-2022-01-27.log

    TODO(Maybe)

  • mysql支持
  • 云端独立搜索网页

版本差异

为了感谢捐赠者,版本略有差异,标准版已经足够用

功能 标准版 捐赠版
私有部署
电脑台数 无限 无限
上传条数 无限 无限
下载条数 最近500条 最近500条
私有部署
单条最大字节 20000字 512000字
同步延迟 >1s >0s
雇佣作者部署 ×
送二级备案域名 ×
列入捐赠列表 ×

联系方式

QQ群:767642647
官方发布页