void MCS_geturl(MCObject *p_target, const char *p_url) { MCSGetUrlState t_state; t_state . url = p_url; t_state . status = kMCSystemUrlStatusNone; t_state . object = p_target -> gethandle(); t_state . data . assign_empty(); if (!MCSystemLoadUrl(p_url, MCS_geturl_callback, &t_state)) { t_state . object -> Release(); return; } MCurlresult -> clear(); while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); MCurlresult -> getvalue() . exchange(t_state . data); if (t_state . status == kMCSystemUrlStatusFinished) { MCresult -> clear(); } else { MCresult -> getvalue() . exchange(t_state . error); } t_state . object -> Release(); }
void MCS_loadurl(MCObject *p_object, const char *p_url, const char *p_message) { bool t_success = true; MCSLoadUrlState *t_state = nil; char *t_processed = nil; MCNameRef t_message = nil; t_success = MCMemoryNew(t_state) && MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed) && MCNameCreateWithCString(p_message, t_message); if (t_success) { t_state->url = t_processed; t_state->message = t_message; t_state->status = kMCSystemUrlStatusNone; t_state->object = p_object -> gethandle(); t_state->data . bytes = nil; t_state->data . size = 0; t_success = MCSystemLoadUrl(t_processed, MCS_loadurl_callback, t_state); } if (t_success) MCresult->clear(); else { MCCStringFree(t_processed); MCNameDelete(t_message); MCMemoryDelete(t_state); MCurlresult -> clear(); MCresult->sets("error: load URL failed"); } }
void MCS_downloadurl(MCObject *p_target, const char *p_url, const char *p_file) { bool t_success = true; char *t_processed = nil; MCObjectHandle *t_obj = nil; IO_handle t_output = nil; MCSDownloadUrlState t_state; t_output = MCS_open(p_file, IO_WRITE_MODE, False, False, 0); if (t_output == nil) { MCresult -> sets("can't open that file"); return; } t_success = MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed); if (t_success) t_success = nil != (t_obj = p_target->gethandle()); if (t_success) { t_state . url = t_processed; t_state . status = kMCSystemUrlStatusNone; t_state . object = t_obj; t_state . output = t_output; t_state . length = 0; t_state . total = 0; t_success = MCSystemLoadUrl(t_processed, MCS_downloadurl_callback, &t_state); } if (t_success) { while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); if (t_state . status == kMCSystemUrlStatusFinished) MCresult -> clear(); } MCCStringFree(t_processed); if (t_output != nil) MCS_close(t_output); if (t_obj != nil) t_obj->Release(); }
void MCS_geturl(MCObject *p_target, const char *p_url) { char *t_processed_url; t_processed_url = nil; // IM-2013-07-30: [[ Bug 10800 ]] strip whitespace chars from url before attempting to fetch if (!MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed_url)) return; MCSGetUrlState t_state; t_state . url = t_processed_url; t_state . status = kMCSystemUrlStatusNone; t_state . object = p_target -> gethandle(); t_state . data . assign_empty(); if (!MCSystemLoadUrl(t_processed_url, MCS_geturl_callback, &t_state)) { t_state . object -> Release(); return; } MCurlresult -> clear(); while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); MCurlresult -> getvalue() . exchange(t_state . data); if (t_state . status == kMCSystemUrlStatusFinished) { MCresult -> clear(); } else { MCresult -> getvalue() . exchange(t_state . error); } MCCStringFree(t_processed_url); t_state . object -> Release(); }