-
-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
创建 dailynote 支持自动添加到数据库 #12587
Comments
我觉得可以在 Database Automations #10863 支持添加一个 |
notion 的Database Automations只是用于数据库里的条目和属性增删改吧,没有全局的触发器 |
在这一点上没必要完全照抄 Notion,我觉得只要思源能实现就行 |
dailynote、新建文档添加到指定数据库,只需要2-3个数据库就好了,过多反而没必要 |
https://ld246.com/article/1725515886241#comments |
貌似还是要刷新,做不到子文档添加后,自动添加到数据库,不过这个代码我可以抄一抄,改为监听日记创建事件,自动添加到数据库里 |
可以的,里面配置把自动更新那一项改成true打开就行了,就是下面这句 // 加载时是否执行,默认false,加载时不执行,true为加载时执行 可以实现打开这个sql所在的笔记就自动刷新添加子文档到数据库,如果是要完全后台自动刷新那还做不到 |
我指的是要打开文档,才会运行代码 |
用js片段简单实现了按alt+5创建或者打开日记,就可以自动添加到指定数据库 (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]);
}
}
})();
|
似乎只有alt+5能识别到,其他方式创建没识别到,不过也够用了,除了手机上,电脑上一般都是alt 5创建 |
这个考虑通过插件实现吧,如果需要新增参数请告诉我们,谢谢。 |
好的,那请问剪藏添加到数据库有计划嘛? |
还在考虑
…---原始邮件---
发件人: "Jixiong ***@***.***>
发送时间: 2024年9月29日(周日) 晚上6:47
收件人: ***@***.***>;
抄送: ***@***.***>;"State ***@***.***>;
主题: Re: [siyuan-note/siyuan] 创建 dailynote 支持自动添加到数据库 (Issue #12587)
好的,那请问剪藏添加到数据库有计划嘛?
#10824
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you modified the open/close state.Message ID: ***@***.***>
|
In what scenarios do you need this feature?
思源笔记创建dailynote很方便,但是我觉得思源笔记还一直欠缺对dailynote的全局管理和浏览

不方便从全局的角度来看这几天、这几周、这几个月每天在干什么
我最近几个月开始尝试用数据库来管理dailynote,存放全年的dailynote,发现这种方式可以很方便地快速回顾每日日记,可以通过建立视图,设置筛选条件来建立每月日记视图,还可以在数据库中添加打分、状态(灵感来源:微信状态)、总结、反思等列
不过目前我只能创建dailynote后,再将其手动拖到数据库中,要是新建日记的时候,能自动化添加到指定的数据库,就会省心很多
Describe the optimal solution
创建 dailynote 支持自动添加到数据库

笔记本设置添加「自动添加到数据库」功能
Describe the candidate solution
No response
Other information
No response
The text was updated successfully, but these errors were encountered: