81
81
currentHandle = NULL;
82
82
currentObjectID = INVALID_OBJECT_ID;
83
83
currentLine = NULL;
85
defineFunction(_("readln"), js_readln, 0);
87
String scriptPath = ConfigManager::getInstance()->getOption(CFG_IMPORT_SCRIPTING_PLAYLIST_SCRIPT);
86
JS_SetContextThread(cx);
92
defineFunction(_("readln"), js_readln, 0);
94
String scriptPath = ConfigManager::getInstance()->getOption(CFG_IMPORT_SCRIPTING_PLAYLIST_SCRIPT);
96
root = JS_NewScriptObject(cx, script);
97
JS_AddNamedRoot(cx, &root, "PlaylistScript");
103
JS_ClearContextThread(cx);
110
JS_ClearContextThread(cx);
91
114
String PlaylistParserScript::readln()
93
117
if (!currentHandle)
94
118
throw _Exception(_("Readline not yet setup for use"));
96
120
if ((currentTask == nil) || (!currentTask->isValid()))
99
if (fgets(currentLine, ONE_TEXTLINE_BYTES, currentHandle) == NULL)
102
return trim_string(String(currentLine));
125
if(fgets(currentLine, ONE_TEXTLINE_BYTES, currentHandle) == NULL)
128
ret = trim_string(String(currentLine));
105
134
void PlaylistParserScript::processPlaylistObject(zmm::Ref<CdsObject> obj, Ref<CMTask> task)
108
if ((currentObjectID != INVALID_OBJECT_ID) || (currentHandle != NULL) ||
109
(currentLine != NULL))
110
throw _Exception(_("recursion not allowed!"));
112
if (!IS_CDS_PURE_ITEM(obj->getObjectType()))
114
throw _Exception(_("only allowed for pure items"));
118
currentObjectID = obj->getID();
119
currentLine = (char *)MALLOC(ONE_TEXTLINE_BYTES);
122
currentObjectID = INVALID_OBJECT_ID;
124
throw _Exception(_("failed to allocate memory for playlist parsing!"));
126
currentLine[0] = '\0';
128
currentHandle = fopen(obj->getLocation().c_str(), "r");
131
currentObjectID = INVALID_OBJECT_ID;
134
throw _Exception(_("failed to open file: ") + obj->getLocation());
137
JSObject *playlist = JS_NewObject(cx, NULL, NULL, glob);
141
setObjectProperty(glob, _("playlist"), playlist);
142
cdsObject2jsObject(obj, playlist);
149
fclose(currentHandle);
150
currentHandle = NULL;
155
currentObjectID = INVALID_OBJECT_ID;
161
fclose(currentHandle);
162
currentHandle = NULL;
167
currentObjectID = INVALID_OBJECT_ID;
137
JS_SetContextThread(cx);
140
if ((currentObjectID != INVALID_OBJECT_ID) || (currentHandle != NULL) ||
141
(currentLine != NULL))
145
JS_ClearContextThread(cx);
147
throw _Exception(_("recursion not allowed!"));
150
if (!IS_CDS_PURE_ITEM(obj->getObjectType()))
154
JS_ClearContextThread(cx);
156
throw _Exception(_("only allowed for pure items"));
160
currentObjectID = obj->getID();
161
currentLine = (char *)MALLOC(ONE_TEXTLINE_BYTES);
164
currentObjectID = INVALID_OBJECT_ID;
168
JS_ClearContextThread(cx);
170
throw _Exception(_("failed to allocate memory for playlist parsing!"));
173
currentLine[0] = '\0';
175
currentHandle = fopen(obj->getLocation().c_str(), "r");
178
currentObjectID = INVALID_OBJECT_ID;
183
JS_ClearContextThread(cx);
185
throw _Exception(_("failed to open file: ") + obj->getLocation());
188
JSObject *playlist = JS_NewObject(cx, NULL, NULL, glob);
192
setObjectProperty(glob, _("playlist"), playlist);
193
cdsObject2jsObject(obj, playlist);
200
fclose(currentHandle);
201
currentHandle = NULL;
206
currentObjectID = INVALID_OBJECT_ID;
211
JS_ClearContextThread(cx);
216
fclose(currentHandle);
217
currentHandle = NULL;
222
currentObjectID = INVALID_OBJECT_ID;
226
if (gc_counter > JS_CALL_GC_AFTER_NUM)
234
JS_ClearContextThread(cx);
240
PlaylistParserScript::~PlaylistParserScript()
243
JS_SetContextThread(cx);
248
JS_RemoveRoot(cx, &root);
252
JS_ClearContextThread(cx);
171
256
#endif // HAVE_JS