Skip to content

Commit 0944a39

Browse files
authored
Merge pull request #48 from singerla/feature-cache
Feature cache
2 parents 5c4a8f1 + a1362aa commit 0944a39

File tree

14 files changed

+440
-146
lines changed

14 files changed

+440
-146
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ workspace.code-workspace
1010
### Testing
1111
__tests__/images
1212
coverage/
13+
__tests__/pptx-output/
14+
__tests__/pptx-cache/
1315

1416
### Customer related files
1517
__customer__/
16-
__tests__/pptx-output/
1718
src/dev-customer.ts
19+

src/automizer.ts

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Slide } from './classes/slide';
2-
import { FileHelper } from './helper/file-helper';
32
import {
43
AutomizerParams,
54
AutomizerSummary,
5+
ArchiveParams,
66
SourceSlideIdentifier,
77
StatusTracker,
88
} from './types/types';
@@ -17,9 +17,7 @@ import path from 'path';
1717
import * as fs from 'fs';
1818
import { XmlHelper } from './helper/xml-helper';
1919
import ModifyPresentationHelper from './helper/modify-presentation-helper';
20-
import { contentTracker, ContentTracker } from './helper/content-tracker';
21-
import JSZip from 'jszip';
22-
import { CacheHelper } from './helper/cache-helper';
20+
import { ContentTracker } from './helper/content-tracker';
2321

2422
/**
2523
* Automizer
@@ -37,7 +35,7 @@ export default class Automizer implements IPresentationProps {
3735
templateDir: string;
3836
templateFallbackDir: string;
3937
outputDir: string;
40-
cacheDir: string;
38+
archiveParams: ArchiveParams;
4139
/**
4240
* Timer of automizer
4341
* @internal
@@ -62,10 +60,13 @@ export default class Automizer implements IPresentationProps {
6260
? params.templateFallbackDir + '/'
6361
: '';
6462
this.outputDir = params?.outputDir ? params.outputDir + '/' : '';
65-
this.cacheDir = params?.cacheDir
66-
? params.cacheDir
67-
: __dirname + '/../cache';
68-
CacheHelper.setDir(this.cacheDir);
63+
64+
this.archiveParams = <ArchiveParams>{
65+
mode: params?.archiveType?.mode || 'jszip',
66+
baseDir: params?.archiveType?.baseDir || __dirname + '/../cache',
67+
workDir: params?.archiveType?.workDir || 'tmp',
68+
cleanupWorkDir: params?.archiveType?.cleanupWorkDir,
69+
};
6970

7071
this.timer = Date.now();
7172
this.setStatusTracker(params?.statusTracker);
@@ -74,13 +75,24 @@ export default class Automizer implements IPresentationProps {
7475

7576
if (params.rootTemplate) {
7677
const location = this.getLocation(params.rootTemplate, 'template');
77-
this.rootTemplate = Template.import(location) as RootPresTemplate;
78+
this.rootTemplate = Template.import(
79+
location,
80+
this.archiveParams,
81+
) as RootPresTemplate;
7882
}
7983

8084
if (params.presTemplates) {
8185
this.params.presTemplates.forEach((file) => {
8286
const location = this.getLocation(file, 'template');
83-
const newTemplate = Template.import(location, file) as PresTemplate;
87+
const archiveParams = {
88+
...this.archiveParams,
89+
name: file,
90+
};
91+
const newTemplate = Template.import(
92+
location,
93+
archiveParams,
94+
) as PresTemplate;
95+
8496
this.templates.push(newTemplate);
8597
});
8698
}
@@ -158,7 +170,12 @@ export default class Automizer implements IPresentationProps {
158170
return this;
159171
}
160172

161-
const newTemplate = Template.import(location, name);
173+
const importParams = {
174+
...this.archiveParams,
175+
name,
176+
};
177+
178+
const newTemplate = Template.import(location, importParams);
162179

163180
if (!this.isPresTemplate(newTemplate)) {
164181
this.rootTemplate = newTemplate;

src/classes/template.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { SlideInfo } from '../types/xml-types';
1010
import { XmlHelper } from '../helper/xml-helper';
1111
import { ContentTracker } from '../helper/content-tracker';
1212
import IArchive from '../interfaces/iarchive';
13+
import { ArchiveParams } from '../types/types';
1314

1415
export class Template implements ITemplate {
1516
/**
@@ -51,22 +52,22 @@ export class Template implements ITemplate {
5152
creationIds: SlideInfo[];
5253
existingSlides: number;
5354

54-
constructor(location: string) {
55+
constructor(location: string, params: ArchiveParams) {
5556
this.location = location;
56-
const archive = FileHelper.importArchive(location);
57+
const archive = FileHelper.importArchive(location, params);
5758
this.archive = archive;
5859
}
5960

6061
static import(
6162
location: string,
62-
name?: string,
63+
params: ArchiveParams,
6364
): PresTemplate | RootPresTemplate {
6465
let newTemplate: PresTemplate | RootPresTemplate;
65-
if (name) {
66-
newTemplate = new Template(location) as PresTemplate;
67-
newTemplate.name = name;
66+
if (params.name) {
67+
newTemplate = new Template(location, params) as PresTemplate;
68+
newTemplate.name = params.name;
6869
} else {
69-
newTemplate = new Template(location) as RootPresTemplate;
70+
newTemplate = new Template(location, params) as RootPresTemplate;
7071
newTemplate.slides = [];
7172
newTemplate.counter = [
7273
new CountHelper('slides', newTemplate),

src/dev.ts

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
import { vd } from './helper/general-helper';
22
import Automizer, { modify } from './index';
33

4+
const outputName = 'create-presentation-file-proxy.test.pptx';
45
const automizer = new Automizer({
56
templateDir: `${__dirname}/../__tests__/pptx-templates`,
67
outputDir: `${__dirname}/../__tests__/pptx-output`,
7-
// cacheDir: `${__dirname}/../__tests__/pptx-cache`,
8+
archiveType: {
9+
mode: 'fs',
10+
baseDir: `${__dirname}/../__tests__/pptx-cache`,
11+
workDir: outputName,
12+
cleanupWorkDir: true,
13+
},
14+
rootTemplate: 'RootTemplateWithImages.pptx',
15+
presTemplates: [
16+
`RootTemplate.pptx`,
17+
`SlideWithImages.pptx`,
18+
`ChartBarsStacked.pptx`,
19+
],
820
removeExistingSlides: true,
921
cleanup: true,
10-
compression: 5,
22+
compression: 0,
1123
});
1224

1325
const run = async () => {
14-
const pres = automizer
15-
.loadRoot(`RootTemplateWithImages.pptx`)
16-
.load(`RootTemplate.pptx`, 'root')
17-
.load(`SlideWithImages.pptx`, 'images')
18-
.load(`ChartBarsStacked.pptx`, 'charts');
26+
// const pres = automizer
27+
// .loadRoot(`RootTemplateWithImages.pptx`)
28+
// .load(`RootTemplate.pptx`, 'root')
29+
// .load(`SlideWithImages.pptx`, 'images')
30+
// .load(`ChartBarsStacked.pptx`, 'charts');
1931

2032
const dataSmaller = {
2133
series: [{ label: 'series s1' }, { label: 'series s2' }],
@@ -25,24 +37,28 @@ const run = async () => {
2537
],
2638
};
2739

28-
const result = await pres
29-
.addSlide('charts', 1, (slide) => {
40+
const result = await automizer
41+
.addSlide('ChartBarsStacked.pptx', 1, (slide) => {
3042
slide.modifyElement('BarsStacked', [modify.setChartData(dataSmaller)]);
31-
slide.addElement('charts', 1, 'BarsStacked', [
43+
slide.addElement('ChartBarsStacked.pptx', 1, 'BarsStacked', [
3244
modify.setChartData(dataSmaller),
3345
]);
3446
})
35-
.addSlide('images', 1)
36-
.addSlide('root', 1, (slide) => {
37-
slide.addElement('charts', 1, 'BarsStacked', [
47+
.addSlide('SlideWithImages.pptx', 1)
48+
.addSlide('RootTemplate.pptx', 1, (slide) => {
49+
slide.addElement('ChartBarsStacked.pptx', 1, 'BarsStacked', [
3850
modify.setChartData(dataSmaller),
3951
]);
4052
})
41-
.addSlide('charts', 1, (slide) => {
42-
slide.addElement('images', 2, 'imageJPG');
43-
// slide.modifyElement('BarsStacked', [modify.setChartData(dataSmaller)]);
53+
.addSlide('ChartBarsStacked.pptx', 1, (slide) => {
54+
slide.addElement('SlideWithImages.pptx', 2, 'imageJPG');
55+
slide.modifyElement('BarsStacked', [modify.setChartData(dataSmaller)]);
56+
})
57+
.addSlide('ChartBarsStacked.pptx', 1, (slide) => {
58+
slide.addElement('SlideWithImages.pptx', 2, 'imageJPG');
59+
slide.modifyElement('BarsStacked', [modify.setChartData(dataSmaller)]);
4460
})
45-
.write(`create-presentation-file-proxy.test.pptx`);
61+
.write(outputName);
4662

4763
vd(result.duration);
4864
// vd(pres.rootTemplate.content);

0 commit comments

Comments
 (0)