1 | 'use strict';
|
2 |
|
3 | var
|
4 | fs = require('fs'),
|
5 | path = require('path');
|
6 |
|
7 | module.exports = {
|
8 |
|
9 | detectSync: function(dir, callback) {
|
10 | var self = this;
|
11 |
|
12 | fs.readdirSync(dir).forEach(function(file) {
|
13 | var pathname = path.join(dir, file);
|
14 | if (fs.statSync(pathname).isDirectory()) {
|
15 | self.detectSync(pathname, callback);
|
16 | } else {
|
17 | if (callback) {
|
18 | callback(pathname);
|
19 | }
|
20 | }
|
21 | });
|
22 | },
|
23 |
|
24 | detectAllSync: function(directory, filter, callback) {
|
25 | var self = this;
|
26 |
|
27 | var dirs = {
|
28 | children: []
|
29 | };
|
30 |
|
31 | fs.readdirSync(directory).forEach(function(file) {
|
32 | var dir = null;
|
33 | var pathname = path.join(directory, file);
|
34 | var stat = fs.statSync(pathname);
|
35 | if (stat.isDirectory()) {
|
36 | dir = self.detectAllSync(pathname, filter, callback);
|
37 | dir.id = stat.ino;
|
38 | dir.name = file;
|
39 | dir.title = pathname;
|
40 | dir.mtime = stat.mtime;
|
41 | if (callback) {
|
42 | callback(dir, true);
|
43 | }
|
44 | dirs.children.push(dir);
|
45 | } else {
|
46 | dir = {
|
47 | id: stat.ino,
|
48 | name: file,
|
49 | title: pathname,
|
50 | mtime: stat.mtime
|
51 | };
|
52 | if (!filter || filter(file)) {
|
53 | dirs.children.push(dir);
|
54 | if (callback) {
|
55 | callback(dir, false);
|
56 | }
|
57 | }
|
58 | }
|
59 | });
|
60 | return dirs;
|
61 | },
|
62 | getSync: function(id, directory, filter) {
|
63 | var self = this;
|
64 | var dir = null;
|
65 | var dirs = fs.readdirSync(directory);
|
66 |
|
67 | for (var i = 0, len = dirs.length; i < len; i++) {
|
68 | var file = dirs[i];
|
69 | var pathname = path.join(directory, file);
|
70 | var stat = fs.statSync(pathname);
|
71 | if (stat.isDirectory()) {
|
72 | dir = self.getSync(id, pathname, filter);
|
73 | if (dir) {
|
74 | break;
|
75 | }
|
76 | } else {
|
77 | if ((!filter || filter(file)) && id == stat.ino) {
|
78 | dir = pathname;
|
79 | break;
|
80 | }
|
81 | }
|
82 | }
|
83 | return dir;
|
84 | },
|
85 |
|
86 | detect: function(dir, callback, finish) {
|
87 | var self = this;
|
88 | fs.readdir(dir, function(err, files) {
|
89 | (function next(i) {
|
90 | if (i < files.length) {
|
91 | var pathname = path.join(dir, files[i]);
|
92 | fs.stat(pathname, function(err, stats) {
|
93 | if (stats.isDirectory()) {
|
94 | self.detect(pathname, callback, function() {
|
95 | next(i + 1);
|
96 | });
|
97 | } else {
|
98 | if (callback) {
|
99 | callback(pathname);
|
100 | }
|
101 | next(i + 1);
|
102 | }
|
103 | });
|
104 | } else {
|
105 | if (finish) {
|
106 | finish();
|
107 | }
|
108 | }
|
109 | })(0);
|
110 | });
|
111 | }
|
112 | }; |
\ | No newline at end of file |