hexo-abbrlink icon indicating copy to clipboard operation
hexo-abbrlink copied to clipboard

这个cache是不是应该放在if的外面,不然有可能和历史的文章重复?

Open Asutorufa opened this issue 1 year ago • 8 comments

https://github.com/ohroy/hexo-abbrlink/blob/70f112b4caa16f956935534c3ffb4231ee5a30ed/lib/logic.js#L61

感觉是需要old_cache和new_cache分开,然后在写入文件前再判断下old_cache中有没有。

Asutorufa avatar Dec 04 '24 02:12 Asutorufa

没太看明白😂,大佬可以举个例子吗

yqs112358 avatar Dec 08 '24 11:12 yqs112358

没太看明白😂,大佬可以举个例子吗

@yqs112358 大概这个意思,写的可能不太准确,但意思差不多


let generateAbbrlink = function (data) {
                ...
                ...
        // calc abbrlinks
        if (!abbrlink || abbrlink == '0' || config.force) {
                ...
                ...
            model.cacheNewPostAbbrlink(data.source, abbrlink) // 如果是新文章,缓存到new_cache
        } else {
            model.cacheOldPostAbbrlink(data.source, abbrlink) // 旧文档,缓存到old_cache
        }
}


let writebackToFiles = function (data) {
        ...
        ...
        
    // avoid rewrite front-matter if the same abbrlink exists
    let abbrlink = model.getNewPostAbbrlink(data.source)
    if(!abbrlink)
        return data;
        
    // 新文章时,判断旧文档中是否已经有相同的link,如果有就再生成直到不重复
    abbrlink = model.uniqueAbbrlinkByOldCache(abbrlink); 
    
        ...
        ...
}

Asutorufa avatar Dec 08 '24 12:12 Asutorufa

喔,这边确实疏忽了,我看着改一下,感谢兄弟👍

yqs112358 avatar Dec 08 '24 12:12 yqs112358

https://github.com/hexojs/hexo/issues/5583 发了帖子问遍历posts,几天都没人鸟🫠话说哥们这方面有思路没 @Asutorufa

我的想法是,尽量在post_permalink里面就确定好abbrlink,避免到后面的before_post_render阶段再更新,这样应该比较符合语义。 但是这样的话需要在post_permalink及以前先遍历所有的posts来统计已存在的abbrlinks,目前还没找到合适的方法。。。hexo这API设计的也有点一言难尽

yqs112358 avatar Dec 12 '24 12:12 yqs112358

@yqs112358

我也不太熟悉这个流程,看了filter的文档,感觉写的模棱两可。 不过也许可以像这位兄弟一样直接操作db.json,反而更直观一点。 也不需要对db.json进行写操作,只需要拿到里面的历史文章的内容。

スクリーンショット 2024-12-13 11 28 08

Asutorufa avatar Dec 13 '24 03:12 Asutorufa

确实哈,我看一下 应该还可以。唯一的缺点是hexo clean之后第一次generate扫描不到这个db,如果这时候新增文章的话就可能碰到冲突。另外如果front-matter和DB里面不一致也会出现问题 都怪hexo这接口设计的。。。。唉

yqs112358 avatar Dec 23 '24 13:12 yqs112358

@Asutorufa 哥们试一下?现在应该没问题了 https://github.com/ohroy/hexo-abbrlink/pull/77

yqs112358 avatar Dec 23 '24 14:12 yqs112358

merged

yqs112358 avatar Dec 31 '24 02:12 yqs112358