static void gui_download_window_error(struct gui_download_window *dw, const char *error_msg) { amiga_warn_user("Unwritten",""); dw->result = AMINS_DLOAD_ERROR; gui_download_window_done(dw); }
/** * Callback for low-level cache events * * \param handle Low-level cache handle * \param event Event object * \param pw Our context * \return NSERROR_OK on success, appropriate error otherwise */ static nserror download_callback(llcache_handle *handle, const llcache_event *event, void *pw) { download_context *ctx = pw; nserror error = NSERROR_OK; switch (event->type) { case LLCACHE_EVENT_HAD_HEADERS: error = download_context_process_headers(ctx); if (error != NSERROR_OK) { llcache_handle_abort(handle); download_context_destroy(ctx); } break; case LLCACHE_EVENT_HAD_DATA: /* If we didn't know up-front that this fetch was for download, * then we won't receive the HAD_HEADERS event. Catch up now. */ if (ctx->window == NULL) { error = download_context_process_headers(ctx); if (error != NSERROR_OK) { llcache_handle_abort(handle); download_context_destroy(ctx); } } if (error == NSERROR_OK) { /** \todo Lose ugly cast */ error = gui_download_window_data(ctx->window, (char *) event->data.data.buf, event->data.data.len); if (error != NSERROR_OK) llcache_handle_abort(handle); } break; case LLCACHE_EVENT_DONE: assert(ctx->window != NULL); gui_download_window_done(ctx->window); break; case LLCACHE_EVENT_ERROR: if (ctx->window != NULL) gui_download_window_error(ctx->window, event->data.msg); break; case LLCACHE_EVENT_PROGRESS: break; } return error; }
void ami_download_window_abort(struct gui_download_window *dw) { download_context_abort(dw->ctx); dw->result = AMINS_DLOAD_ABORT; gui_download_window_done(dw); }