庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理

通过观察ditto的表发现, 可以添加触发器进行统计粘贴次数的功能,不需要用源码

Ditto 是一款强大的 Windows 剪贴板增强工具,它支持64位操作系统,而且完全免费,绿色开源,支持中文,而且还有免安装的绿色版本。

开启 Ditto 后,不会有任何程序界面出现,它只是默默地在系统右下角弹出了一个蓝色的托盘图标,这时候你复制任何内容到剪贴板都会被 Ditto 一一记录。如果你什么时候想找到它,就可以按 Ctrl+`,当中的每条内容都可以供你选择性的重新复制。

使用navicat连接数据库

主要使用的表

Types

MainDeletes

Main

Data

CopyBuffers

通过观察Main表发现数据库结构

/*
 Navicat Premium Data Transfer

 Source Server         : ditto
 Source Server Type    : SQLite
 Source Server Version : 3035005 (3.35.5)
 Source Schema         : main

 Target Server Type    : SQLite
 Target Server Version : 3035005 (3.35.5)
 File Encoding         : 65001

 Date: 17/04/2023 10:44:23
*/

PRAGMA foreign_keys = false;

-- ----------------------------
-- Table structure for Main
-- ----------------------------
DROP TABLE IF EXISTS "Main";
CREATE TABLE "Main" (
  "lID" INTEGER PRIMARY KEY AUTOINCREMENT,
  "lDate" INTEGER,
  "mText" TEXT,
  "lShortCut" INTEGER,
  "lDontAutoDelete" INTEGER,
  "CRC" INTEGER,
  "bIsGroup" INTEGER,
  "lParentID" INTEGER,
  "QuickPasteText" TEXT,
  "clipOrder" REAL,
  "clipGroupOrder" REAL,
  "globalShortCut" INTEGER,
  "lastPasteDate" INTEGER,
  "stickyClipOrder" REAL,
  "stickyClipGroupOrder" REAL,
  "MoveToGroupShortCut" INTEGER,
  "GlobalMoveToGroupShortCut" INTEGER
);

-- ----------------------------
-- Auto increment value for Main
-- ----------------------------
UPDATE "sqlite_sequence" SET seq = 50355 WHERE name = 'Main';

-- ----------------------------
-- Indexes structure for table Main
-- ----------------------------
CREATE INDEX "Main_CRC"
ON "Main" (
  "CRC" ASC
);
CREATE INDEX "Main_ClipGroupOrder"
ON "Main" (
  "clipGroupOrder" DESC
);
CREATE INDEX "Main_ClipOrder"
ON "Main" (
  "clipOrder" DESC
);
CREATE UNIQUE INDEX "Main_ID"
ON "Main" (
  "lID" ASC
);
CREATE INDEX "Main_InGroup2"
ON "Main" (
  "lParentId" ASC,
  "stickyClipGroupOrder" DESC,
  "bIsGroup" ASC,
  "clipGroupOrder" DESC
);
CREATE INDEX "Main_IsGroup"
ON "Main" (
  "bIsGroup" DESC
);
CREATE INDEX "Main_MoveToGroup"
ON "Main" (
  "MoveToGroupShortCut" DESC,
  "GlobalMoveToGroupShortCut" DESC
);
CREATE INDEX "Main_ParentId"
ON "Main" (
  "lParentID" DESC
);
CREATE INDEX "Main_ShortCut2"
ON "Main" (
  "lShortCut" DESC,
  "globalShortCut" DESC
);
CREATE INDEX "Main_TopLevel"
ON "Main" (
  "stickyClipOrder" DESC,
  "bIsGroup" ASC,
  "clipOrder" DESC
);
CREATE INDEX "Main_TopLevelParentID"
ON "Main" (
  "lParentId" ASC,
  "stickyClipOrder" DESC,
  "bIsGroup" ASC,
  "clipOrder" DESC
);

-- ----------------------------
-- Triggers structure for table Main
-- ----------------------------
CREATE TRIGGER "delete_data_trigger"
BEFORE DELETE
ON "Main"
FOR EACH ROW
BEGIN
INSERT INTO MainDeletes VALUES(old.lID, datetime('now'));
END;

PRAGMA foreign_keys = true;

通过表结构发现里面是有一个触发器进行记录删除时间的

同理可以增加一个触发器,记录更新时间,就可以记录下粘贴的使用id和时间

添加触发器

-- 添加 ditto 触发器
DROP TRIGGER "main"."update_date_trigger"


CREATE TRIGGER "main"."update_date_trigger"
BEFORE UPDATE
ON "Main"
BEGIN
  -- 这里是因为粘贴一次,会进行两次update, 所以这里删除掉已经记录的时间,避免生成两个一样的记录
  DELETE FROM MainPaste WHERE lastPasteDate=old.lastPasteDate;
	-- 记录一次粘贴记录
  INSERT INTO MainPaste VALUES(old.lID, old.lastPasteDate);
END

COMMIT;

统计粘贴次数

测试结论,通过粘贴四次 “好的”, 可以查询出复制了四次

-- 统计粘贴次数
select t1.*, t2.mText from 
( select clipID, count(clipID) cnt from MainPaste group by clipID order by count(clipID)  desc) t1,
Main t2 
where t1.clipID = t2.lID;

统计的作用

  1. 通过一段时间的使用,可以记录使用次数最高的记录
  2. 使用了如果一年多,则 ditto.db 的文件会特别的大。 则根据使用记录次数, 可以删除一些不常用的数据, 避免空间浪费

posted on 2023-04-17 11:04  qwop  阅读(83)  评论(0编辑  收藏  举报