mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-10-14 11:52:29 +00:00
Add avatar support on OS X
This commit is contained in:
parent
0e4057e95f
commit
7c563465d9
19
configure.ac
19
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
67
libgitg/gitg-platform-support-osx.c
Normal file
67
libgitg/gitg-platform-support-osx.c
Normal 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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue