Example #1
0
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();
}
Example #2
0
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");
    }
}
Example #3
0
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();
}
Example #4
0
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();
}