Vuo 2.4.4
Loading...
Searching...
No Matches
VuoFileType.c
Go to the documentation of this file.
1
10#include <string.h>
11#include "VuoFileType.h"
12
14#ifdef VUO_COMPILER
16 "title" : "File Type",
17 "description" : "The type of information in a file.",
18 "keywords" : [ ],
19 "version" : "1.0.0",
20 "dependencies" : [
21 "VuoList_VuoFileType"
22 ]
23 });
24#endif
26
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", "heic"],
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
49static json_object *VuoFileType_extensions = NULL;
50static 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
96json_object * VuoFileType_getJson(const VuoFileType value)
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
191{
192 dispatch_once(&VuoFileType_extensionsInitialized, ^{
194 });
195}
196
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}