Add avatar support on OS X

This commit is contained in:
Jesse van den Kieboom 2015-12-19 21:03:51 +01:00
parent 0e4057e95f
commit 7c563465d9
7 changed files with 123 additions and 17 deletions

View file

@ -323,6 +323,25 @@ fi
AM_CONDITIONAL(ENABLE_PYTHON, test x"$enable_python" = "xyes")
dnl check for native osx
gdk_targets=`$PKG_CONFIG --variable=targets gdk-3.0`
PLATFORM_NAME="other"
for target in $gdk_targets;
do
case "$target" in
quartz)
PLATFORM_NAME=osx
;;
win32)
PLATFORM_NAME=win32
;;
esac
done
AC_SUBST(PLATFORM_NAME)
AM_CONDITIONAL(PLATFORM_OSX, test x"$PLATFORM_NAME" = "xosx")
dnl libgd
LIBGD_INIT([
tagged-entry

View file

@ -24,6 +24,7 @@ libgitg_libgitg_1_0_la_LIBADD = \
if GDK_WINDOWING_QUARTZ
libgitg_libgitg_1_0_la_LIBADD += -lobjc
libgitg_libgitg_1_0_la_CFLAGS += -xobjective-c
libgitg_libgitg_1_0_la_LDFLAGS += -framework Foundation
endif
libgitg_libgitg_1_0_la_VALAFLAGS = \
@ -36,6 +37,7 @@ libgitg_libgitg_1_0_la_VALAFLAGS = \
--pkg gdesktop-enums-3.0 \
--pkg libsoup-2.4 \
--pkg gtksourceview-3.0 \
--pkg gitg-platform-support \
$(GITG_VALAFLAGS) \
--vapidir $(top_srcdir)/vapi \
--includedir libgitg \
@ -84,11 +86,17 @@ libgitg_libgitg_1_0_la_VALASOURCES = \
libgitg/gitg-utils.vala \
libgitg/gitg-when-mapped.vala
libgitg_libgitg_1_0_la_SOURCES = \
$(libgitg_libgitg_1_0_la_VALASOURCES) \
libgitg/gitg-platform-support.c \
libgitg_libgitg_1_0_la_SOURCES = \
$(libgitg_libgitg_1_0_la_VALASOURCES) \
libgitg/gitg-resources.c
if PLATFORM_OSX
libgitg_libgitg_1_0_la_SOURCES += libgitg/gitg-platform-support-osx.c
else
libgitg_libgitg_1_0_la_SOURCES += libgitg/gitg-platform-support.c
endif
libgitg_libgitg_1_0_la_headerdir = $(prefix)/include/libgitg-1.0/libgitg
libgitg_libgitg_1_0_la_header_HEADERS = libgitg/libgitg.h

View file

@ -71,7 +71,7 @@ public class Gitg.AvatarCache : Object
try
{
stream = yield file.read_async(Priority.LOW, cancellable);
stream = yield Gitg.PlatformSupport.http_get(file, cancellable);
}
catch
{

View file

@ -0,0 +1,67 @@
#include "gitg-platform-support.h"
#include <gdk/gdkquartz.h>
gboolean
gitg_platform_support_use_native_window_controls (GdkDisplay *display)
{
if (display == NULL)
{
display = gdk_display_get_default ();
}
return GDK_IS_QUARTZ_DISPLAY (display);
}
void
gitg_platform_support_http_get (GFile *file,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
NSURLSessionDataTask *downloadTask;
NSString *dataUrl;
NSURL *url;
GTask *task;
dataUrl = [NSString stringWithUTF8String:g_file_get_uri (file)];
url = [NSURL URLWithString:dataUrl];
task = g_task_new (file, cancellable, callback, user_data);
downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (g_task_return_error_if_cancelled (task))
{
}
else if (error)
{
const gchar *message;
message = [[error localizedDescription] UTF8String];
g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED, "%s", message);
}
else
{
GInputStream *stream;
GBytes *bytes;
bytes = g_bytes_new ([data bytes], [data length]);
stream = g_memory_input_stream_new_from_bytes (bytes);
g_bytes_unref (bytes);
g_task_return_pointer (task, stream, NULL);
}
g_object_unref (task);
}];
[downloadTask resume];
}
GInputStream *
gitg_platform_support_http_get_finish (GAsyncResult *result,
GError **error)
{
return g_task_propagate_pointer (G_TASK (result), error);
}

View file

@ -1,20 +1,23 @@
#include "gitg-platform-support.h"
#ifdef GDK_WINDOWING_QUARTZ
#include <gdk/gdkquartz.h>
#endif
gboolean
gitg_platform_support_use_native_window_controls (GdkDisplay *display)
{
#ifdef GDK_WINDOWING_QUARTZ
if (display == NULL)
{
display = gdk_display_get_default ();
}
return GDK_IS_QUARTZ_DISPLAY (display);
#else
return FALSE;
#endif
}
void
gitg_platform_support_http_get (GFile *file,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
g_file_read_async (file, G_PRIORITY_DEFAULT, cancellable, callback, user_data);
}
GInputStream *
gitg_platform_support_http_get_finish (GAsyncResult *result,
GError **error)
{
return G_INPUT_STREAM (g_file_read_async_finish (g_async_result_get_source_object (result), result, error);
}

View file

@ -5,5 +5,13 @@
gboolean gitg_platform_support_use_native_window_controls (GdkDisplay *display);
void gitg_platform_support_http_get (GFile *file,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
GInputStream *gitg_platform_support_http_get_finish (GAsyncResult *result,
GError **error);
#endif /* __GITG_PLATFORM_SUPPORT_H__ */

View file

@ -4,5 +4,6 @@ namespace Gitg
public class PlatformSupport
{
public static bool use_native_window_controls(Gdk.Display? display = null);
public static async GLib.InputStream http_get(GLib.File url, GLib.Cancellable? cancellable = null) throws GLib.IOError;
}
}