check_for_updates: fixes update check macos #7325
This was not working due to a missing port in glib. Potentially could be contributed upstream to GLib.
This commit is contained in:
@ -24,6 +24,10 @@
|
|||||||
#include <json-glib/json-glib.h>
|
#include <json-glib/json-glib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef PLATFORM_OSX
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#endif /* PLATFORM_OSX */
|
||||||
|
|
||||||
#ifndef GIMP_CONSOLE_COMPILATION
|
#ifndef GIMP_CONSOLE_COMPILATION
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#endif
|
#endif
|
||||||
@ -51,12 +55,19 @@ static gboolean gimp_version_break (const gchar *v,
|
|||||||
gint *major,
|
gint *major,
|
||||||
gint *minor,
|
gint *minor,
|
||||||
gint *micro);
|
gint *micro);
|
||||||
|
static void gimp_check_updates_process (const gchar *source,
|
||||||
|
gchar *file_contents,
|
||||||
|
gsize file_length,
|
||||||
|
GimpCoreConfig *config);
|
||||||
|
#ifndef PLATFORM_OSX
|
||||||
static void gimp_check_updates_callback (GObject *source,
|
static void gimp_check_updates_callback (GObject *source,
|
||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
#endif /* PLATFORM_OSX */
|
||||||
static void gimp_update_about_dialog (GimpCoreConfig *config,
|
static void gimp_update_about_dialog (GimpCoreConfig *config,
|
||||||
const GParamSpec *pspec,
|
const GParamSpec *pspec,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
static const gchar * gimp_get_version_url (void);
|
||||||
|
|
||||||
/* Private Functions */
|
/* Private Functions */
|
||||||
|
|
||||||
@ -202,23 +213,16 @@ gimp_version_break (const gchar *v,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_check_updates_callback (GObject *source,
|
gimp_check_updates_process (const gchar *source,
|
||||||
GAsyncResult *result,
|
gchar *file_contents,
|
||||||
gpointer user_data)
|
gsize file_length,
|
||||||
|
GimpCoreConfig *config)
|
||||||
{
|
{
|
||||||
GimpCoreConfig *config = user_data;
|
|
||||||
char *file_contents = NULL;
|
|
||||||
gsize file_length = 0;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
if (g_file_load_contents_finish (G_FILE (source), result,
|
|
||||||
&file_contents, &file_length,
|
|
||||||
NULL, &error))
|
|
||||||
{
|
|
||||||
const gchar *platform;
|
const gchar *platform;
|
||||||
const gchar *last_version = NULL;
|
const gchar *last_version = NULL;
|
||||||
const gchar *release_date = NULL;
|
const gchar *release_date = NULL;
|
||||||
const gchar *build_comment = NULL;
|
const gchar *build_comment = NULL;
|
||||||
|
GError *error = NULL;
|
||||||
gint64 release_timestamp = 0;
|
gint64 release_timestamp = 0;
|
||||||
gint build_revision = 0;
|
gint build_revision = 0;
|
||||||
JsonParser *parser;
|
JsonParser *parser;
|
||||||
@ -240,7 +244,7 @@ gimp_check_updates_callback (GObject *source,
|
|||||||
if (! json_parser_load_from_data (parser, file_contents, file_length, &error))
|
if (! json_parser_load_from_data (parser, file_contents, file_length, &error))
|
||||||
{
|
{
|
||||||
g_printerr ("%s: parsing of %s failed: %s\n", G_STRFUNC,
|
g_printerr ("%s: parsing of %s failed: %s\n", G_STRFUNC,
|
||||||
g_file_get_uri (G_FILE (source)), error->message);
|
source, error->message);
|
||||||
g_free (file_contents);
|
g_free (file_contents);
|
||||||
g_clear_object (&parser);
|
g_clear_object (&parser);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
@ -359,6 +363,24 @@ gimp_check_updates_callback (GObject *source,
|
|||||||
g_object_unref (path);
|
g_object_unref (path);
|
||||||
g_object_unref (parser);
|
g_object_unref (parser);
|
||||||
g_free (file_contents);
|
g_free (file_contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef PLATFORM_OSX
|
||||||
|
static void
|
||||||
|
gimp_check_updates_callback (GObject *source,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GimpCoreConfig *config = user_data;
|
||||||
|
char *file_contents = NULL;
|
||||||
|
gsize file_length = 0;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
if (g_file_load_contents_finish (G_FILE (source), result,
|
||||||
|
&file_contents, &file_length,
|
||||||
|
NULL, &error))
|
||||||
|
{
|
||||||
|
gimp_check_updates_process (g_file_get_uri (G_FILE (source)), file_contents, file_length, config);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -367,6 +389,7 @@ gimp_check_updates_callback (GObject *source,
|
|||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* PLATFORM_OSX */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_update_about_dialog (GimpCoreConfig *config,
|
gimp_update_about_dialog (GimpCoreConfig *config,
|
||||||
@ -389,6 +412,19 @@ gimp_update_about_dialog (GimpCoreConfig *config,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const gchar *
|
||||||
|
gimp_get_version_url ()
|
||||||
|
{
|
||||||
|
#ifdef GIMP_UNSTABLE
|
||||||
|
if (g_getenv ("GIMP_DEV_VERSIONS_JSON"))
|
||||||
|
return g_getenv ("GIMP_DEV_VERSIONS_JSON");
|
||||||
|
else
|
||||||
|
return "https://testing.gimp.org/gimp_versions.json";
|
||||||
|
#else
|
||||||
|
return "https://www.gimp.org/gimp_versions.json";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* Public Functions */
|
/* Public Functions */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -451,18 +487,59 @@ gimp_update_auto_check (GimpCoreConfig *config)
|
|||||||
void
|
void
|
||||||
gimp_update_check (GimpCoreConfig *config)
|
gimp_update_check (GimpCoreConfig *config)
|
||||||
{
|
{
|
||||||
|
#ifdef PLATFORM_OSX
|
||||||
|
const gchar *gimp_versions;
|
||||||
|
|
||||||
|
gimp_versions = gimp_get_version_url ();
|
||||||
|
|
||||||
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
|
||||||
|
[request setURL:[NSURL URLWithString:@(gimp_versions)]];
|
||||||
|
[request setHTTPMethod:@"GET"];
|
||||||
|
|
||||||
|
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
|
||||||
|
/* completionHandler is called on a background thread */
|
||||||
|
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||||
|
NSString *reply;
|
||||||
|
gchar *json_result;
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
g_printerr ("%s: gimp_update_check failed to get update from %s, with error: %s\n",
|
||||||
|
G_STRFUNC,
|
||||||
|
gimp_versions,
|
||||||
|
[error.localizedDescription UTF8String]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
|
||||||
|
NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
|
||||||
|
|
||||||
|
if (statusCode != 200)
|
||||||
|
{
|
||||||
|
g_printerr ("%s: gimp_update_check failed to get update from %s, with status code: %d\n",
|
||||||
|
G_STRFUNC,
|
||||||
|
gimp_versions,
|
||||||
|
(int)statusCode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reply = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||||
|
json_result = g_strdup ([reply UTF8String]); /* will be freed by gimp_check_updates_process */
|
||||||
|
|
||||||
|
gimp_check_updates_process (gimp_versions,
|
||||||
|
json_result,
|
||||||
|
[reply lengthOfBytesUsingEncoding:NSUTF8StringEncoding],
|
||||||
|
config);
|
||||||
|
}] resume];
|
||||||
|
#else
|
||||||
GFile *gimp_versions;
|
GFile *gimp_versions;
|
||||||
|
|
||||||
#ifdef GIMP_UNSTABLE
|
gimp_versions = g_file_new_for_uri (gimp_get_version_url ());
|
||||||
if (g_getenv ("GIMP_DEV_VERSIONS_JSON"))
|
|
||||||
gimp_versions = g_file_new_for_path (g_getenv ("GIMP_DEV_VERSIONS_JSON"));
|
|
||||||
else
|
|
||||||
gimp_versions = g_file_new_for_uri ("https://testing.gimp.org/gimp_versions.json");
|
|
||||||
#else
|
|
||||||
gimp_versions = g_file_new_for_uri ("https://www.gimp.org/gimp_versions.json");
|
|
||||||
#endif
|
|
||||||
g_file_load_contents_async (gimp_versions, NULL, gimp_check_updates_callback, config);
|
g_file_load_contents_async (gimp_versions, NULL, gimp_check_updates_callback, config);
|
||||||
g_object_unref (gimp_versions);
|
g_object_unref (gimp_versions);
|
||||||
|
#endif /* PLATFORM_OSX */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user