From d0bdb783a17217f7140b83c25642a7dc93f3d0b1 Mon Sep 17 00:00:00 2001 From: Mike Irving <79252299+mikeirvingweb@users.noreply.github.com> Date: Thu, 23 May 2024 12:37:29 +0100 Subject: [PATCH] fix: date modified now better --- .../src/models/storage/localDiskStorage.ts | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Composer/packages/server/src/models/storage/localDiskStorage.ts b/Composer/packages/server/src/models/storage/localDiskStorage.ts index 79880acbf1..6fe6781729 100644 --- a/Composer/packages/server/src/models/storage/localDiskStorage.ts +++ b/Composer/packages/server/src/models/storage/localDiskStorage.ts @@ -6,6 +6,7 @@ import { promisify } from 'util'; import path from 'path'; import glob from 'globby'; +import globBasic from 'glob'; import archiver from 'archiver'; import rimraf from 'rimraf'; import { FileExtensions } from '@botframework-composer/types'; @@ -34,6 +35,25 @@ const rename = promisify(fs.rename); export class LocalDiskStorage implements IFileStorage { async stat(path: string): Promise { const fstat = await stat(path); + + let lastModified = fstat.mtime.toString(); + + // if a folder, get the last modified date/time from the last modified file + if(fstat.isDirectory()) { + try { + const lastModifiedFiles = globBasic.sync( path + '/**/*.*' ) + .map(name => ({name, mtime: fs.statSync(name).mtime})) + .sort((a, b) => b.mtime.getTime() - a.mtime.getTime()); + + if (lastModifiedFiles != null && lastModifiedFiles.length > 0) { + const fstatFile = await stat(lastModifiedFiles[0].name); + lastModified = fstatFile.mtime.toString(); + } + } catch(e) { + // proceed with original date, from stat(path) + } + } + // test to see if this file is writable let writable = true; try { @@ -41,11 +61,12 @@ export class LocalDiskStorage implements IFileStorage { } catch (err) { writable = false; } + return { isDir: fstat.isDirectory(), isFile: fstat.isFile(), isWritable: writable, - lastModified: fstat.mtime.toString(), + lastModified: lastModified, size: fstat.isFile() ? fstat.size.toString() : '', }; }