Vuo  2.3.2
VuoFileType.c
Go to the documentation of this file.
1 
10 #include <string.h>
11 #include "type.h"
12 #include "VuoFileType.h"
13 #include "VuoList_VuoFileType.h"
14 
16 #ifdef VUO_COMPILER
18  "title" : "File Type",
19  "description" : "The type of information in a file.",
20  "keywords" : [ ],
21  "version" : "1.0.0",
22  "dependencies" : [
23  "VuoList_VuoFileType"
24  ]
25  });
26 #endif
28 
33  "audio": ["wav", "aif", "aiff", "mp3", "mp2", "aac", "m4a", "ac3", "3gp", "amr"],
34  "image": ["png", "jpeg", "jpg", "gif", "bmp", "exr", "hdr", "psd", "raw", "cr2",
35  "dng", "dcr", "nef", "raf", "mos", "kdc", "tif", "tiff", "tga", "targa", "webp", "pct"],
36  "mesh": ["data"], // PBMesh projection mesh
37  "movie": ["mov", "avi", "dv", "mpeg", "mpg", "mp2", "m4v", "mp4", "ogv", "gif", "qt"],
38  "scene": ["3ds", "dae", "obj", "dxf", "ply", "lwo", "lxo", "ac3d", "ms3d", "cob", "scn",
39  "irr", "irrmesh", "mdl", "md2", "md3", "pk3", "mdc", "md5", "m3", "smd", "ter",
40  "raw", "b3d", "q3d", "q3s", "nff", "off", "3dgs", "hmp", "ndo", "fbx", "blend", "stl"],
41  "feed": ["rss", "rdf"],
42  "app": ["app", "app/"],
43  "data": ["icc", "txt"],
44  "json": ["json"],
45  "table": ["csv", "tsv"],
46  "xml": ["xml"],
47 });
48 
50 static dispatch_once_t VuoFileType_extensionsInitialized = 0;
51 
57 {
58  const char *valueAsString = "";
59  if (json_object_get_type(js) == json_type_string)
60  valueAsString = json_object_get_string(js);
61 
62  if (strcmp(valueAsString, "any") == 0)
63  return VuoFileType_AnyFile;
64  else if (strcmp(valueAsString, "audio") == 0)
65  return VuoFileType_Audio;
66  else if (strcmp(valueAsString, "image") == 0)
67  return VuoFileType_Image;
68  else if (strcmp(valueAsString, "mesh") == 0)
69  return VuoFileType_Mesh;
70  else if (strcmp(valueAsString, "movie") == 0)
71  return VuoFileType_Movie;
72  else if (strcmp(valueAsString, "scene") == 0)
73  return VuoFileType_Scene;
74  else if (strcmp(valueAsString, "folder") == 0)
75  return VuoFileType_Folder;
76  else if (strcmp(valueAsString, "feed") == 0)
77  return VuoFileType_Feed;
78  else if (strcmp(valueAsString, "app") == 0)
79  return VuoFileType_App;
80  else if (strcmp(valueAsString, "data") == 0)
81  return VuoFileType_Data;
82  else if (strcmp(valueAsString, "json") == 0)
83  return VuoFileType_JSON;
84  else if (strcmp(valueAsString, "table") == 0)
85  return VuoFileType_Table;
86  else if (strcmp(valueAsString, "xml") == 0)
87  return VuoFileType_XML;
88 
89  return VuoFileType_AnyFile;
90 }
91 
97 {
98  char *valueAsString = "any";
99 
100  if (value == VuoFileType_Audio)
101  valueAsString = "audio";
102  else if (value == VuoFileType_Image)
103  valueAsString = "image";
104  else if (value == VuoFileType_Mesh)
105  valueAsString = "mesh";
106  else if (value == VuoFileType_Movie)
107  valueAsString = "movie";
108  else if (value == VuoFileType_Scene)
109  valueAsString = "scene";
110  else if (value == VuoFileType_Folder)
111  valueAsString = "folder";
112  else if (value == VuoFileType_Feed)
113  valueAsString = "feed";
114  else if (value == VuoFileType_App)
115  valueAsString = "app";
116  else if (value == VuoFileType_Data)
117  valueAsString = "data";
118  else if (value == VuoFileType_JSON)
119  valueAsString = "json";
120  else if (value == VuoFileType_Table)
121  valueAsString = "table";
122  else if (value == VuoFileType_XML)
123  valueAsString = "xml";
124 
125  return json_object_new_string(valueAsString);
126 }
127 
132 {
134  VuoListAppendValue_VuoFileType(l, VuoFileType_AnyFile);
135  VuoListAppendValue_VuoFileType(l, VuoFileType_Folder);
136 
137  VuoListAppendValue_VuoFileType(l, VuoFileType_App);
138  VuoListAppendValue_VuoFileType(l, VuoFileType_Audio);
139 // VuoListAppendValue_VuoFileType(l, VuoFileType_Data); // Omitted since it isn't useful to use `List Files` on this assortment of file types.
140  VuoListAppendValue_VuoFileType(l, VuoFileType_Feed);
141  VuoListAppendValue_VuoFileType(l, VuoFileType_Image);
142  VuoListAppendValue_VuoFileType(l, VuoFileType_JSON);
143  VuoListAppendValue_VuoFileType(l, VuoFileType_Mesh);
144  VuoListAppendValue_VuoFileType(l, VuoFileType_Movie);
145  VuoListAppendValue_VuoFileType(l, VuoFileType_Scene);
146  VuoListAppendValue_VuoFileType(l, VuoFileType_Table);
147  VuoListAppendValue_VuoFileType(l, VuoFileType_XML);
148  return l;
149 }
150 
156 {
157  char *valueAsString = "Any File";
158 
159  if (value == VuoFileType_Audio)
160  valueAsString = "Audio";
161  else if (value == VuoFileType_Image)
162  valueAsString = "Image";
163  else if (value == VuoFileType_Mesh)
164  valueAsString = "Projection Mesh";
165  else if (value == VuoFileType_Movie)
166  valueAsString = "Movie";
167  else if (value == VuoFileType_Scene)
168  valueAsString = "Scene";
169  else if (value == VuoFileType_Folder)
170  valueAsString = "Folder";
171  else if (value == VuoFileType_Feed)
172  valueAsString = "Feed";
173  else if (value == VuoFileType_App)
174  valueAsString = "App";
175  else if (value == VuoFileType_Data)
176  valueAsString = "Data";
177  else if (value == VuoFileType_JSON)
178  valueAsString = "JSON";
179  else if (value == VuoFileType_Table)
180  valueAsString = "Table";
181  else if (value == VuoFileType_XML)
182  valueAsString = "XML";
183 
184  return strdup(valueAsString);
185 }
186 
190 static void VuoFileType_initExtensions(void)
191 {
192  dispatch_once(&VuoFileType_extensionsInitialized, ^{
194  });
195 }
196 
202 bool VuoFileType_isFileOfType(const VuoText path, VuoFileType fileType)
203 {
204  if (fileType == VuoFileType_AnyFile)
205  return true;
206 
207  const char *dot = strrchr(path, '.');
208  if (!dot)
209  return false;
210 
211  const char *actualExtension = dot + 1;
212 
214  json_object *extensions = VuoFileType_getExtensions(fileType);
215  if (!extensions)
216  return false;
217 
218  int extensionCount = json_object_array_length(extensions);
219  for (int i = 0; i < extensionCount; ++i)
220  if (strcasecmp(actualExtension, json_object_get_string(json_object_array_get_idx(extensions, i))) == 0)
221  return true;
222 
223  return false;
224 }
225 
232 {
234  json_object *fileTypeJson = VuoFileType_getJson(fileType);
235  json_object *extensions = NULL;
236  json_object_object_get_ex(VuoFileType_extensions, json_object_get_string(fileTypeJson), &extensions);
237  json_object_put(fileTypeJson);
238  return extensions;
239 }