[gitg] Add avatar support on OS X



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]