Vuo  2.3.2
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 
38 {
39  return archivePath;
40 }
41 
45 string VuoNodeSet::getName(void)
46 {
47  string dir, file, ext;
48  VuoFileUtilities::splitPath(archivePath, dir, file, ext);
49  return file;
50 }
51 
58 string 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 
97 vector<string> VuoNodeSet::getNodeClassNames(void)
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  {
107  VuoFileUtilities::File *f = *i;
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 
122 vector<string> VuoNodeSet::getHeaderFileNames(void)
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  {
131  VuoFileUtilities::File *f = *i;
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  {
153  VuoFileUtilities::File *f = *i;
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 
170 string VuoNodeSet::getNodeClassContents(string nodeClassName)
171 {
172  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, nodeClassName + ".c");
173 }
174 
180 string VuoNodeSet::getHeaderContents(string headerName)
181 {
182  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, headerName);
183 }
184 
190 string VuoNodeSet::getExampleCompositionContents(string exampleCompositionFileName)
191 {
192  return VuoFileUtilities::getArchiveFileContentsAsString(archivePath, "examples/" + exampleCompositionFileName);
193 }
194 
199 {
200  extractResourcesFromSubdirectory("examples", destinationDir);
201 }
202 
206 void VuoNodeSet::extractDocumentationResources(string destinationDir)
207 {
208  extractResourcesFromSubdirectory("descriptions", destinationDir);
209 }
210 
218 void 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  {
233  VuoFileUtilities::File *f = *i;
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 }