思源笔记创建 dailynote 很方便,但是我觉得思源笔记还一直欠缺对 dailynote 的全局管理和浏览
不方便从全局的角度来看这几天、这几周、这几个月每天在干什么
我最近几个月开始尝试用数据库来管理 dailynote,存放全年的 dailynote,发现这种方式可以很方便地快速回顾每日日记,可以通过建立视图,设置筛选条件来建立每月日记视图,还可以在数据库中添加打分、状态(灵感来源:微信状态)、总结、反思等列
这个数据库的位置,我会在年、每月的复盘笔记里
不过目前我只能创建 dailynote 后,再将其手动拖到数据库中,要是新建日记的时候,能自动化添加到指定的数据库,就会省心很多
于是提了一个 issue:创建 dailynote 支持自动添加到数据库 · Issue #12587 · siyuan-note/siyuan (github.com)
但暂时还没有回应,不知道官方会不会做
代码片段
看到有大佬写了自动把子文档添加到数据库的功能,见批量导入文档到数据库 0.0.6 版全新发布 - 链滴 (ld246.com)
参考了下,简单写了一个 js 代码片段,对 alt+5 快捷键进行监控(没有对左上方的创建日记按钮进行监控,因为不会),这样创建或打开日记时,就将 dailynote 放进指定的数据库
使用时,只需要配置数据库块 id 即可,变量为 dbBlockId
。
注意:本代码只会把所有笔记本创建的 dailynote 统统放进一个数据库里,有些人可能有多个笔记本,每个笔记本的 dailynote 如果需要放在不同的数据库,或者只有某个笔记本的 dailynote 才要放进数据库。本代码暂时没对这两种场景做优化,因为个人只用一个笔记本,暂时没有改进需求(代码能用就行哈哈哈)。
(async () => {
// 标志变量,用于防止重复触发
let isCreatingDailyNote = false;
const originalFetch = window.fetch;
// 重写 fetch 函数
window.fetch = async function (...args) {
// 检查是否是我们要监听的API调用
if (args[0] === '/api/filetree/createDailyNote' && args[1]?.method === 'POST' && !isCreatingDailyNote) {
console.log('创建每日笔记的API被调用了!');
// 设置标志位,防止重复进入
isCreatingDailyNote = true;
// 执行创建日记后的逻辑
await dailynoteAddDatabase();
// 重置标志位
isCreatingDailyNote = false;
}
// 调用原始的 fetch 函数并返回结果
return originalFetch.apply(this, args);
};
// 创建日记的逻辑,监听创建每日笔记的事件时触发
async function dailynoteAddDatabase() {
//设置日记自动存放的数据库块id
const dbBlockId = '20240911002857-lgav146';
// 设置哪个笔记本创建日记才添加到数据库,其他笔记本创建日记代码不作用
const notebookID = '20241028223345-d9ifjv0';
// 获取当前选择笔记本
const boxid = window.siyuan.storage["local-dailynoteid"];
if (boxid === notebookID) {
// 调用 /api/filetree/createDailyNote 获得日记 ID
const create_dailynote_result = await fetchSyncPost('/api/filetree/createDailyNote', { notebook: boxid, app: siyuan.ws.app.appId });
const docID = create_dailynote_result.data.id;
// 添加日记到数据库中
const db = await getDataBySql(`SELECT * FROM blocks where type ='av' and id='${dbBlockId}'`);
if (db.length === 0) {
console.error("未找到数据库文档块,请检查数据库文档块id是否正确");
return;
}
const avID = db.map(av => getDataAvIdFromHtml(av.markdown))[0];
// 检测 dailynote 是否已经在数据库里
let isInResult = await fetchSyncPost("/api/av/getAttributeViewKeys", { id: docID });
let foundItem = isInResult.data.find(item => item.avID === avID);
if (foundItem && foundItem.keyValues) {
console.log(docID + " 已经在数据库");
return;
}
// ------------添加日记到数据库 ------------ //
// 组装文档数据参数
const srcs = [{
"id": docID,
"isDetached": false,
}];
const input = {
"avID": avID,
'srcs': srcs
};
await fetchSyncPost('/api/av/addAttributeViewBlocks', input);
console.log(docID + " 添加到数据库"+avID);
function getDataAvIdFromHtml(htmlString) {
// 使用正则表达式匹配data-av-id的值
const match = htmlString.match(/data-av-id="([^"]+)"/);
if (match && match[1]) {
return match[1]; // 返回匹配的值
}
return ""; // 如果没有找到匹配项,则返回空
}
async function getDataBySql(sql) {
const result = await fetchSyncPost('/api/query/sql', { "stmt": sql });
if (result.code !== 0) {
console.error("查询数据库出错", result.msg);
return [];
}
return result.data;
}
async function fetchSyncPost(url, data, returnType = 'json') {
const init = {
method: "POST",
};
if (data) {
if (data instanceof FormData) {
init.body = data;
} else {
init.body = JSON.stringify(data);
}
}
try {
const res = await fetch(url, init);
const res2 = returnType === 'json' ? await res.json() : await res.text();
return res2;
} catch (e) {
console.log(e);
return returnType === 'json' ? { code: e.code || 1, msg: e.message || "", data: null } : "";
}
}
}
}
})();
最近对数据库的功能改进期待
之前用 notion,只觉得数据库折腾
现在用思源,才发现数据库,真好用呀真好用
期待下面的 issue,能早日推进
- 剪藏插件功能优化提议:绑定数据库 · Issue #10824 · siyuan-note/siyuan (github.com)
- 创建 dailynote 支持自动添加到数据库 · Issue #12587 · siyuan-note/siyuan (github.com)
- 新建文档和块引新建文档支持自动添加到指定数据库 · Issue #12588 · siyuan-note/siyuan (github.com)
- 数据库条目多选后右键支持复制块引用 · Issue #11520 · siyuan-note/siyuan (github.com)
- 数据库模板列获取其他列变量的优化 · Issue #11237 · siyuan-note/siyuan (github.com)
- 「添加到数据库」支持创建不存在的数据库 · Issue #11012 · siyuan-note/siyuan (github.com)
- 数据库支持隐藏视图 & 支持创建仅包含新视图的镜像数据库(即新建一个视图并隐藏其他视图) · Issue #10734 · siyuan-note/siyuan (github.com)
- 数据库支持设置新建文档存放位置和文档内容模板 The database supports setting create doc save path and template · Issue #11479 · siyuan-note/siyuan (github.com)
- 编辑器顶部添加数据库属性面板 · Issue #11371 · siyuan-note/siyuan (github.com)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于