Vuo  2.4.0
VuoNodeSet.cc
Go to the documentation of this file.
1
10#include "VuoModule.hh"
11#include "VuoNodeSet.hh"
12
16VuoNodeSet::VuoNodeSet(string archivePath) :
17 archivePath(archivePath)
18{
19}
20
27{
28 if (moduleFile->isInArchive())
29 return new VuoNodeSet(moduleFile->getArchivePath());
30 else
31 return NULL;
32}
33
38{
39 return archivePath;
40}
41
46{
47 string dir, file, ext;
48 VuoFileUtilities::splitPath(archivePath, dir, file, ext);
49 return file;
50}
51
58string VuoNodeSet::getDescriptionFromFile(string fileName)
59{
60 string description;
61 map<string, string>::iterator cachedIter = cachedDescriptions.find(fileName);
62 if (cachedIter == cachedDescriptions.end())
63 {
64 description = VuoFileUtilities::getArchiveFileContentsAsString(archivePath, "descriptions/" + fileName);
65 cachedDescriptions[fileName] = description;
66 }
67 else
68 {
69 description = cachedIter->second;
70 }
71 return description;
72}
73
80{
81 return getDescriptionFromFile(getName() + ".md");
82}
83
90{
91 return getDescriptionFromFile(module->getModuleKey() + ".md");
92}
93
98{
99 set<string> extensions;
100 extensions.insert("vuonode");
101 extensions.insert("vuonode+");
102 set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "", extensions);
103
104 vector<string> classNames;
105 for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
106 {
108 string dir, file, ext;
109 VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
110 classNames.push_back(file);
111 delete f;
112 }
113
114 std::sort(classNames.begin(), classNames.end());
115
116 return classNames;
117}
118
123{
124 set<string> extensions;
125 extensions.insert("h");
126 set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "", extensions);
127
128 vector<string> headerFileNames;
129 for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
130 {
132 string dir, file, ext;
133 VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
134 headerFileNames.push_back(file + "." + ext);
135 delete f;
136 }
137
138 return headerFileNames;
139}
140
145{
146 set<string> extensions;
147 extensions.insert("vuo");
148 set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "examples", extensions);
149
150 vector<string> fileNames;
151 for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
152 {
154 string dir, file, ext;
155 VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
156 fileNames.push_back(file + "." + ext);
157 delete f;
158 }
159
160 std::sort(fileNames.begin(), fileNames.end());
161
162 return fileNames;
163}
164
170string VuoNodeSet::getNodeClassContents(string nodeClassName)
171{
172 return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, nodeClassName + ".c");
173}
174
180string VuoNodeSet::getHeaderContents(string headerName)
181{
182 return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, headerName);
183}
184
190string VuoNodeSet::getExampleCompositionContents(string exampleCompositionFileName)
191{
192 return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, "examples/" + exampleCompositionFileName);
193}
194
199{
200 extractResourcesFromSubdirectory("examples", destinationDir);
201}
202
207{
208 extractResourcesFromSubdirectory("descriptions", destinationDir);
209}
210
218void VuoNodeSet::extractResourcesFromSubdirectory(string archiveSubdir, string destinationDir)
219{
220 set<string> extensions;
221 extensions.insert("png");
222 extensions.insert("jpg");
223 extensions.insert("mov");
224 extensions.insert("mp3");
225 extensions.insert("data");
226 extensions.insert("3ds");
227 extensions.insert("dae");
228 extensions.insert("csv");
229 set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, archiveSubdir, extensions);
230
231 for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
232 {
234
235 string dir, file, ext;
236 VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
237 string destinationFile = destinationDir + "/" + file + "." + ext;
238
239 if (! VuoFileUtilities::fileExists(destinationFile))
240 {
241 size_t numBytes = 0;
242 char *data = f->getContentsAsRawData(numBytes);
243 VuoFileUtilities::writeRawDataToFile(data, numBytes, destinationFile);
244 free(data);
245 }
246
247 delete f;
248 }
249}