[gitg] Add avatar support on OS X
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Add avatar support on OS X
- Date: Sat, 19 Dec 2015 20:04:17 +0000 (UTC)
commit 7c563465d9fbce67b2b3a2e8e435bf4d9194c4a6
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Sat Dec 19 21:03:51 2015 +0100
Add avatar support on OS X
configure.ac | 19 ++++++++++
libgitg/Makefile.am | 14 ++++++--
libgitg/gitg-avatar-cache.vala | 2 +-
libgitg/gitg-platform-support-osx.c | 67 +++++++++++++++++++++++++++++++++++
libgitg/gitg-platform-support.c | 29 ++++++++-------
libgitg/gitg-platform-support.h | 8 ++++
vapi/gitg-platform-support.vapi | 1 +
7 files changed, 123 insertions(+), 17 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 3419ee8..3e4cee3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/libgitg/Makefile.am b/libgitg/Makefile.am
index 0dc0830..a1f8e9c 100644
--- a/libgitg/Makefile.am
+++ b/libgitg/Makefile.am
@@ -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
diff --git a/libgitg/gitg-avatar-cache.vala b/libgitg/gitg-avatar-cache.vala
index 9134e6b..bc38d89 100644
--- a/libgitg/gitg-avatar-cache.vala
+++ b/libgitg/gitg-avatar-cache.vala
@@ -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
{
diff --git a/libgitg/gitg-platform-support-osx.c b/libgitg/gitg-platform-support-osx.c
new file mode 100644
index 0000000..5774461
--- /dev/null
+++ b/libgitg/gitg-platform-support-osx.c
@@ -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);
+}
diff --git a/libgitg/gitg-platform-support.c b/libgitg/gitg-platform-support.c
index bd043d2..5cbc659 100644
--- a/libgitg/gitg-platform-support.c
+++ b/libgitg/gitg-platform-support.c
@@ -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);
}
diff --git a/libgitg/gitg-platform-support.h b/libgitg/gitg-platform-support.h
index a58c814..ec6f70d 100644
--- a/libgitg/gitg-platform-support.h
+++ b/libgitg/gitg-platform-support.h
@@ -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__ */
diff --git a/vapi/gitg-platform-support.vapi b/vapi/gitg-platform-support.vapi
index 22a6100..7f99103 100644
--- a/vapi/gitg-platform-support.vapi
+++ b/vapi/gitg-platform-support.vapi
@@ -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;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]