static int get_format(JNIEnv* env, InputStream* stream) { unsigned char temp[2]; int read = read_input_stream(env, stream, temp, 0, 2); if (read == 2) { #ifdef IMAGE_SUPPORT_JPEG if (temp[0] == IMAGE_JPEG_MAGIC_NUMBER_0 && temp[1] == IMAGE_JPEG_MAGIC_NUMBER_1) { return IMAGE_FORMAT_JPEG; } #endif #ifdef IMAGE_SUPPORT_PNG if (temp[0] == IMAGE_PNG_MAGIC_NUMBER_0 && temp[1] == IMAGE_PNG_MAGIC_NUMBER_1) { return IMAGE_FORMAT_PNG; } #endif #ifdef IMAGE_SUPPORT_GIF if (temp[0] == IMAGE_GIF_MAGIC_NUMBER_0 && temp[1] == IMAGE_GIF_MAGIC_NUMBER_1) { return IMAGE_FORMAT_GIF; } #endif } return IMAGE_FORMAT_UNKNOWN; }
static void on_file_replace_ready (GObject *object, GAsyncResult *res, gpointer data) { GError *error = NULL; GDownloadable *download = G_DOWNLOADABLE (data); GioDownload *gio_download = GIO_DOWNLOAD (data); g_assert (download != NULL); gio_download->priv->output = g_file_replace_finish (G_FILE(object), res, &error); // GFileOutputStream *out_stream = g_file_replace_finish (G_FILE(object), res, &error); // gio_download->priv->output = g_buffered_output_stream_new_sized (G_OUTPUT_STREAM(out_stream), // CHUNK_BUFF_SIZE); handle_critical_error (error); read_input_stream (download); }
static void on_input_stream_read_ready (GObject * object, GAsyncResult * res, gpointer data) { GError * error = NULL; GDownloadable *download = G_DOWNLOADABLE (data); GioDownload *gio_download = GIO_DOWNLOAD (data); g_assert (download != NULL); gssize size = g_input_stream_read_finish (G_INPUT_STREAM(object), res, &error); handle_critical_error (error); if (size < 0) { g_downloadable_set_status (download, G_DOWNLOADABLE_NETWORK_ERROR); return; } if (size == 0 && download->priv->size == download->priv->downloaded_size) { /* Download Completed */ write_chunks_to_output_stream (gio_download); g_input_stream_close_async (G_INPUT_STREAM(gio_download->priv->input), G_PRIORITY_DEFAULT, NULL, on_input_stream_close_ready, NULL); g_output_stream_close_async (G_OUTPUT_STREAM(gio_download->priv->output), G_PRIORITY_DEFAULT, NULL, on_output_stream_close_ready, NULL); g_downloadable_set_status (download, G_DOWNLOADABLE_COMPLETED); g_signal_emit_by_name (download, "download-completed"); return; } if (gio_download->priv->num_chunks == NUM_OF_CHUNKS) { write_chunks_to_output_stream (gio_download); gio_download->priv->num_chunks = 0; } MemChunk *chunk = mem_chunk_new_from_buffer (size, gio_download->priv->chunk_buff); gio_download->priv->chunks = g_slist_prepend (gio_download->priv->chunks, chunk); gio_download->priv->num_chunks++; g_signal_emit_by_name (data, "download-progressed", size); read_input_stream (download); }
static void on_file_append_to_ready (GObject * object, GAsyncResult * res, gpointer data) { GError *error = NULL; GDownloadable *download = G_DOWNLOADABLE (data); GioDownload *gio_download = GIO_DOWNLOAD (data); g_assert (download != NULL); GFileOutputStream *out_stream = g_file_append_to_finish (G_FILE(object), res, &error); handle_error (error); if (out_stream != NULL) { gio_download->priv->output = out_stream; if (g_seekable_seek (G_SEEKABLE(gio_download->priv->input), download->priv->downloaded_size, G_SEEK_SET, NULL, NULL)) { read_input_stream (download); return; } } g_file_replace_async (download->priv->local_file, NULL, FALSE, 0, G_PRIORITY_DEFAULT, NULL, on_file_replace_ready, download); }