思源笔记创建 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 ()=>{
window.addEventListener('keydown', function(event) {
// 检查是否按下了 Alt 键和数字 5 键
if (event.altKey && event.key === '5') {
// 模拟按钮点击
console.log('Alt + 5 被按下了!');
dailynoteAddDatabase();
}
});
async function dailynoteAddDatabase() {
//设置日记自动存放的数据库块id
dbBlockId = '20240911002857-lgav146';
// 获取当前选择笔记本
boxid = window.siyuan.storage["local-dailynoteid"]
// 获取日记id
const create_dailynote_result =await fetchSyncPost('/api/filetree/createDailyNote', {notebook: boxid, app: siyuan.ws.app.appId})
const dailynote_ids = [create_dailynote_result.data.id];
//console.log(dailynote_ids);
// 添加日记到数据库中
const db = await getDataBySql(`SELECT * FROM blocks where type ='av' and id='${dbBlockId}'`);
if (db.length === 0) error("未找到数据库文档块,请检查数据库文档块id是否正确");
const avId = db.map(av => getDataAvIdFromHtml(av.markdown))[0];
// 组装文档数据参数
const srcs = dailynote_ids.map(docId => ({
"id": docId,
"isDetached": false,
}));
// 获取当前时间
const nowTime = formatDate(new Date());
// 插入文档数据到数据库
// see https://github.com/siyuan-note/siyuan/blob/b244f8aed18e7a41d4b27889d870442154ba1462/app/src/protyle/util/editorCommonEvent.ts#L1043
const result = await fetchSyncPost('/api/transactions', {
"session": siyuan.ws.app.appId,
"app": siyuan.ws.app.appId,
"transactions": [{
"doOperations": [{
"action": "insertAttrViewBlock",
"avID": avId,
"previousID": "",
"srcs": srcs,
"blockID": dbBlockId
},
{
"action": "doUpdateUpdated",
"id": dbBlockId,
"data": nowTime
}
],
"undoOperations": [{
"action": "removeAttrViewBlock",
"srcIDs": dailynote_ids,
"avID": avId
},
{
"action": "doUpdateUpdated",
"id": dbBlockId,
"data": nowTime
}
]
}],
"reqId": new Date().getTime()
});
// 错误返回
if (result.code !== 0) {
await fetchSyncPost('/api/notification/pushErrMsg', { "msg": `日记自动添加数据库失败,错误信息:${result.msg}`, "timeout": 7000 })
}
//成功返回结果
//await fetchSyncPost('/api/notification/pushMsg', { "msg": `日记自动添加数据库成功:${dailynote_path}`, "timeout": 7000 })
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 } : "";
}
}
function formatDate(date) {
var yy = date.getFullYear().toString();
var mm = (date.getMonth() + 1).toString(); // 注意月份是从0开始的
var dd = date.getDate().toString();
var hh = date.getHours().toString();
var ii = date.getMinutes().toString();
var ss = date.getSeconds().toString();
return yy + (mm[1] ? mm : '0' + mm[0]) + (dd[1] ? dd : '0' + dd[0]) +
(hh[1] ? hh : '0' + hh[0]) + (ii[1] ? ii : '0' + ii[0]) +
(ss[1] ? ss : '0' + ss[0]);
}
}
})();
最近对数据库的功能改进期待
之前用 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)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于