Skip to content

Commit bda6e6c

Browse files
committed
Implemented the method 'addResourceTree' in the server class to make the resource tree creation easier
1 parent 1bf0c47 commit bda6e6c

File tree

3 files changed

+186
-0
lines changed

3 files changed

+186
-0
lines changed

lib/server/WebDAVServer.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import { FSManager, FSPath } from '../manager/FSManager';
99
import { IUserManager } from '../user/IUserManager';
1010
import * as http from 'http';
1111
export { WebDAVServerOptions } from './WebDAVServerOptions';
12+
export interface IResourceTreeNode {
13+
r?: IResource;
14+
resource?: IResource;
15+
c?: ResourceTreeNode[];
16+
children?: ResourceTreeNode[];
17+
}
18+
export declare type ResourceTreeNode = IResourceTreeNode | IResource | IResourceTreeNode[] | IResource[];
1219
export declare class WebDAVServer {
1320
httpAuthentication: HTTPAuthentication;
1421
privilegeManager: IPrivilegeManager;
@@ -23,6 +30,8 @@ export declare class WebDAVServer {
2330
constructor(options?: WebDAVServerOptions);
2431
getResourceFromPath(path: FSPath | string[] | string, callback: ReturnCallback<IResource>): any;
2532
getResourceFromPath(path: FSPath | string[] | string, rootResource: IResource, callback: ReturnCallback<IResource>): any;
33+
addResourceTree(resoureceTree: ResourceTreeNode, callback: (e: Error) => void): any;
34+
addResourceTree(rootResource: IResource, resoureceTree: ResourceTreeNode, callback: (e: Error) => void): any;
2635
onUnknownMethod(unknownMethod: WebDAVRequest): void;
2736
start(port?: number): void;
2837
stop(callback: () => void): void;

lib/server/WebDAVServer.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,78 @@ var WebDAVServer = (function () {
7474
}
7575
});
7676
};
77+
WebDAVServer.prototype.addResourceTree = function (_rootResource, _resoureceTree, _callback) {
78+
var _this = this;
79+
var rootResource;
80+
var resoureceTree;
81+
var callback = _callback;
82+
if (!callback) {
83+
resoureceTree = _rootResource;
84+
rootResource = this.rootResource;
85+
callback = _resoureceTree;
86+
}
87+
else {
88+
resoureceTree = _resoureceTree;
89+
rootResource = _rootResource;
90+
}
91+
if (resoureceTree.constructor === Array) {
92+
var array = resoureceTree;
93+
if (array.length === 0) {
94+
callback(null);
95+
return;
96+
}
97+
var nb_1 = array.length;
98+
var doneArray_1 = function (e) {
99+
if (nb_1 <= 0)
100+
return;
101+
if (e) {
102+
nb_1 = -1;
103+
callback(e);
104+
return;
105+
}
106+
--nb_1;
107+
if (nb_1 === 0)
108+
callback(null);
109+
};
110+
array.forEach(function (r) { return _this.addResourceTree(rootResource, r, doneArray_1); });
111+
}
112+
else if (resoureceTree.fsManager) {
113+
rootResource.addChild(resoureceTree, callback);
114+
}
115+
else {
116+
var irtn = resoureceTree;
117+
var resource_1 = irtn.r ? irtn.r : irtn.resource;
118+
var children_1 = irtn.c ? irtn.c : irtn.children;
119+
rootResource.addChild(resource_1, function (e) {
120+
if (e) {
121+
callback(e);
122+
return;
123+
}
124+
if (children_1 && children_1.constructor !== Array) {
125+
_this.addResourceTree(resource_1, children_1, callback);
126+
return;
127+
}
128+
if (!children_1 || children_1.length === 0) {
129+
callback(null);
130+
return;
131+
}
132+
var nb = children_1.length;
133+
function done(e) {
134+
if (nb <= 0)
135+
return;
136+
if (e) {
137+
nb = -1;
138+
callback(e);
139+
return;
140+
}
141+
--nb;
142+
if (nb === 0)
143+
callback(null);
144+
}
145+
children_1.forEach(function (c) { return _this.addResourceTree(resource_1, c, done); });
146+
});
147+
}
148+
};
77149
WebDAVServer.prototype.onUnknownMethod = function (unknownMethod) {
78150
this.unknownMethod = unknownMethod;
79151
};

src/server/WebDAVServer.ts

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ import * as http from 'http'
1515

1616
export { WebDAVServerOptions } from './WebDAVServerOptions'
1717

18+
export interface IResourceTreeNode
19+
{
20+
r ?: IResource
21+
resource ?: IResource
22+
c ?: ResourceTreeNode[]
23+
children ?: ResourceTreeNode[]
24+
}
25+
export type ResourceTreeNode = IResourceTreeNode | IResource | IResourceTreeNode[] | IResource[];
26+
1827
export class WebDAVServer
1928
{
2029
public httpAuthentication : HTTPAuthentication
@@ -115,6 +124,102 @@ export class WebDAVServer
115124
})
116125
}
117126

127+
addResourceTree(resoureceTree : ResourceTreeNode, callback : (e : Error) => void)
128+
addResourceTree(rootResource : IResource, resoureceTree : ResourceTreeNode, callback : (e : Error) => void)
129+
addResourceTree(_rootResource : IResource | ResourceTreeNode, _resoureceTree : ResourceTreeNode | (() => void), _callback ?: (e : Error) => void)
130+
{
131+
let rootResource : IResource
132+
let resoureceTree : ResourceTreeNode
133+
let callback = _callback;
134+
135+
if(!callback)
136+
{
137+
resoureceTree = _rootResource;
138+
rootResource = this.rootResource;
139+
callback = _resoureceTree as (e : Error) => void;
140+
}
141+
else
142+
{
143+
resoureceTree = _resoureceTree;
144+
rootResource = _rootResource as IResource;
145+
}
146+
147+
if(resoureceTree.constructor === Array)
148+
{
149+
const array = resoureceTree as any[];
150+
if(array.length === 0)
151+
{
152+
callback(null);
153+
return;
154+
}
155+
156+
let nb = array.length;
157+
const doneArray = function(e)
158+
{
159+
if(nb <= 0)
160+
return;
161+
if(e)
162+
{
163+
nb = -1;
164+
callback(e);
165+
return;
166+
}
167+
--nb;
168+
if(nb === 0)
169+
callback(null);
170+
}
171+
172+
array.forEach((r) => this.addResourceTree(rootResource, r, doneArray));
173+
}
174+
else if((resoureceTree as IResource).fsManager)
175+
{ // resoureceTree is IResource
176+
rootResource.addChild(resoureceTree as IResource, callback);
177+
}
178+
else
179+
{ // resoureceTree is IResourceTreeNode
180+
const irtn = resoureceTree as IResourceTreeNode;
181+
const resource = irtn.r ? irtn.r : irtn.resource;
182+
const children = irtn.c ? irtn.c : irtn.children;
183+
rootResource.addChild(resource, (e) => {
184+
if(e)
185+
{
186+
callback(e);
187+
return;
188+
}
189+
190+
if(children && children.constructor !== Array)
191+
{
192+
this.addResourceTree(resource, children, callback)
193+
return;
194+
}
195+
196+
if(!children || children.length === 0)
197+
{
198+
callback(null);
199+
return;
200+
}
201+
202+
let nb = children.length;
203+
function done(e)
204+
{
205+
if(nb <= 0)
206+
return;
207+
if(e)
208+
{
209+
nb = -1;
210+
callback(e);
211+
return;
212+
}
213+
--nb;
214+
if(nb === 0)
215+
callback(null);
216+
}
217+
218+
children.forEach((c) => this.addResourceTree(resource, c, done));
219+
})
220+
}
221+
}
222+
118223
onUnknownMethod(unknownMethod : WebDAVRequest)
119224
{
120225
this.unknownMethod = unknownMethod;

0 commit comments

Comments
 (0)