Skip to content

Commit

Permalink
import from upstream/master
Browse files Browse the repository at this point in the history
  • Loading branch information
dimaslanjaka committed Oct 3, 2024
1 parent bab293c commit 679ec46
Showing 1 changed file with 26 additions and 13 deletions.
39 changes: 26 additions & 13 deletions lib/plugins/processor/post.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import Promise from 'bluebird';
import type { Stats } from 'fs';
import { parse as yfm } from 'hexo-front-matter';
import { listDir, stat } from 'hexo-fs';
import { Pattern, Permalink, slugize } from 'hexo-util';
import { extname, join } from 'path';
import { extname, join, posix, sep } from 'path';
import { magenta } from 'picocolors';
import { isExcludedFile, isHiddenFile, isMatch, isTmpFile, timezone, toDate } from './common';
import type { _File } from '../../box';
import type Hexo from '../../hexo';
import type { Stats } from 'fs';
import { PostSchema } from '../../types';
import { isExcludedFile, isHiddenFile, isMatch, isTmpFile, timezone, toDate } from './common';

const postDir = '_posts/';
const draftDir = '_drafts/';
Expand Down Expand Up @@ -268,29 +269,41 @@ function processAsset(ctx: Hexo, file: _File) {
const PostAsset = ctx.model('PostAsset');
const Post = ctx.model('Post');
const id = file.source.substring(ctx.base_dir.length);
const doc = PostAsset.findById(id);
const postAsset = PostAsset.findById(id);

if (file.type === 'delete') {
if (doc) {
return doc.remove();
if (file.type === 'delete' || Post.length === 0) {
if (postAsset) {
return postAsset.remove();
}

return;
}

// TODO: Better post searching
const post = Post.toArray().find(post => file.source.startsWith(post.asset_dir));
if (post != null && (post.published || ctx._showDrafts())) {
const savePostAsset = (post: PostSchema) => {
return PostAsset.save({
_id: id,
slug: file.source.substring(post.asset_dir.length),
post: post._id,
modified: file.type !== 'skip',
renderable: file.params.renderable
});
};

if (postAsset) {
// `postAsset.post` is `Post.id`.
const post = Post.findById(postAsset.post);
if (post != null && (post.published || ctx._showDrafts())) {
return savePostAsset(post);
}
}

const assetDir = id.slice(0, id.lastIndexOf(sep));
const post = Post.findOne(p => p.asset_dir.endsWith(posix.join(assetDir, '/')));
if (post != null && (post.published || ctx._showDrafts())) {
return savePostAsset(post);
}

if (doc) {
return doc.remove();
// NOTE: Probably, unreachable.
if (postAsset) {
return postAsset.remove();
}
}

0 comments on commit 679ec46

Please sign in to comment.