示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
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);
}