Vuo  2.0.0
VuoNodeSet.cc
Go to the documentation of this file.
1 
10 #include "VuoModule.hh"
11 #include "VuoNodeSet.hh"
12 
16 VuoNodeSet::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 
37 string VuoNodeSet::getName(void)
38 {
39  string dir, file, ext;
40  VuoFileUtilities::splitPath(archivePath, dir, file, ext);
41  return file;
42 }
43 
50 string VuoNodeSet::getDescriptionFromFile(string fileName)
51 {
52  string description;
53  map<string, string>::iterator cachedIter = cachedDescriptions.find(fileName);
54  if (cachedIter == cachedDescriptions.end())
55  {
56  description = VuoFileUtilities::getArchiveFileContentsAsString(archivePath, "descriptions/" + fileName);
57  cachedDescriptions[fileName] = description;
58  }
59  else
60  {
61  description = cachedIter->second;
62  }
63  return description;
64 }
65 
72 {
73  return getDescriptionFromFile(getName() + ".md");
74 }
75 
82 {
83  return getDescriptionFromFile(module->getModuleKey() + ".md");
84 }
85 
89 vector<string> VuoNodeSet::getNodeClassNames(void)
90 {
91  set<string> extensions;
92  extensions.insert("vuonode");
93  extensions.insert("vuonode+");
94  set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "", extensions);
95 
96  vector<string> classNames;
97  for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
98  {
99  VuoFileUtilities::File *f = *i;
100  string dir, file, ext;
101  VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
102  classNames.push_back(file);
103  delete f;
104  }
105 
106  std::sort(classNames.begin(), classNames.end());
107 
108  return classNames;
109 }
110 
114 vector<string> VuoNodeSet::getHeaderFileNames(void)
115 {
116  set<string> extensions;
117  extensions.insert("h");
118  set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "", extensions);
119 
120  vector<string> headerFileNames;
121  for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
122  {
123  VuoFileUtilities::File *f = *i;
124  string dir, file, ext;
125  VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
126  headerFileNames.push_back(file + "." + ext);
127  delete f;
128  }
129 
130  return headerFileNames;
131 }
132 
137 {
138  set<string> extensions;
139  extensions.insert("vuo");
140  set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, "examples", extensions);
141 
142  vector<string> fileNames;
143  for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
144  {
145  VuoFileUtilities::File *f = *i;
146  string dir, file, ext;
147  VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
148  fileNames.push_back(file + "." + ext);
149  delete f;
150  }
151 
152  std::sort(fileNames.begin(), fileNames.end());
153 
154  return fileNames;
155 }
156 
162 string VuoNodeSet::getNodeClassContents(string nodeClassName)
163 {
164  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, nodeClassName + ".c");
165 }
166 
172 string VuoNodeSet::getHeaderContents(string headerName)
173 {
174  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, headerName);
175 }
176 
182 string VuoNodeSet::getExampleCompositionContents(string exampleCompositionFileName)
183 {
184  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, "examples/" + exampleCompositionFileName);
185 }
186 
191 {
192  extractResourcesFromSubdirectory("examples", destinationDir);
193 }
194 
198 void VuoNodeSet::extractDocumentationResources(string destinationDir)
199 {
200  extractResourcesFromSubdirectory("descriptions", destinationDir);
201 }
202 
210 void VuoNodeSet::extractResourcesFromSubdirectory(string archiveSubdir, string destinationDir)
211 {
212  set<string> extensions;
213  extensions.insert("png");
214  extensions.insert("jpg");
215  extensions.insert("mov");
216  extensions.insert("mp3");
217  extensions.insert("data");
218  extensions.insert("3ds");
219  extensions.insert("dae");
220  extensions.insert("csv");
221  set<VuoFileUtilities::File *> files = VuoFileUtilities::findFilesInArchive(archivePath, archiveSubdir, extensions);
222 
223  for (set<VuoFileUtilities::File *>::iterator i = files.begin(); i != files.end(); ++i)
224  {
225  VuoFileUtilities::File *f = *i;
226 
227  string dir, file, ext;
228  VuoFileUtilities::splitPath(f->getRelativePath(), dir, file, ext);
229  string destinationFile = destinationDir + "/" + file + "." + ext;
230 
231  if (! VuoFileUtilities::fileExists(destinationFile))
232  {
233  size_t numBytes = 0;
234  char *data = f->getContentsAsRawData(numBytes);
235  VuoFileUtilities::writeRawDataToFile(data, numBytes, destinationFile);
236  free(data);
237  }
238 
239  delete f;
240  }
241 }