Add shell_get_file_contents_utf8_sync(), use it instead of gio temporarily
Adding correct annotations to Gio.File.load_contents revealed that gjs doesn't actually support array+length combinations. For 3.0 this would be invasive to fix, so add a method to ShellGlobal which does what we need. https://bugzilla.gnome.org/show_bug.cgi?id=646333
This commit is contained in:
parent
d19f2bb6d2
commit
92f09a60f6
@ -67,7 +67,13 @@ function loadExtension(dir, enabled, type) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let [success, metadataContents, len, etag] = metadataFile.load_contents(null);
|
let metadataContents;
|
||||||
|
try {
|
||||||
|
metadataContents = Shell.get_file_contents_utf8_sync(metadataFile.get_path());
|
||||||
|
} catch (e) {
|
||||||
|
global.logError(baseErrorString + 'Failed to load metadata.json: ' + e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let meta;
|
let meta;
|
||||||
try {
|
try {
|
||||||
meta = JSON.parse(metadataContents);
|
meta = JSON.parse(metadataContents);
|
||||||
|
@ -274,24 +274,18 @@ OpenSearchSystem.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_addProvider: function(fileName) {
|
_addProvider: function(fileName) {
|
||||||
let file = Gio.file_new_for_path(global.datadir + '/search_providers/' + fileName);
|
let path = global.datadir + '/search_providers/' + fileName;
|
||||||
let source = '';
|
let source = Shell.get_file_contents_utf8_sync(path);
|
||||||
|
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
|
||||||
file.load_contents_async(null, Lang.bind(this, function (obj, res) {
|
let provider ={ name: name,
|
||||||
let [success, source] = file.load_contents_finish(res);
|
url: url,
|
||||||
if (source) {
|
id: this._providers.length,
|
||||||
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
|
icon_uri: icon_uri,
|
||||||
let provider ={ name: name,
|
langs: langs };
|
||||||
url: url,
|
if (this._checkSupportedProviderLanguage(provider)) {
|
||||||
id: this._providers.length,
|
this._providers.push(provider);
|
||||||
icon_uri: icon_uri,
|
this.emit('changed');
|
||||||
langs: langs };
|
}
|
||||||
if (this._checkSupportedProviderLanguage(provider)) {
|
|
||||||
this._providers.push(provider);
|
|
||||||
this.emit('changed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_refresh: function() {
|
_refresh: function() {
|
||||||
|
@ -2229,3 +2229,36 @@ shell_get_contact_events (TplLogManager *log_manager,
|
|||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
callback, NULL);
|
callback, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_get_file_contents_utf8_sync:
|
||||||
|
* @path: UTF-8 encoded filename path
|
||||||
|
* @error: a #GError
|
||||||
|
*
|
||||||
|
* Synchronously load the contents of a file as a NUL terminated
|
||||||
|
* string, validating it as UTF-8. Embedded NUL characters count as
|
||||||
|
* invalid content.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): File contents
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
shell_get_file_contents_utf8_sync (const char *path,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
char *contents;
|
||||||
|
gsize len;
|
||||||
|
if (!g_file_get_contents (path, &contents, &len, error))
|
||||||
|
return NULL;
|
||||||
|
if (!g_utf8_validate (contents, len, NULL))
|
||||||
|
{
|
||||||
|
g_free (contents);
|
||||||
|
g_set_error (error,
|
||||||
|
G_IO_ERROR,
|
||||||
|
G_IO_ERROR_FAILED,
|
||||||
|
"File %s contains invalid UTF-8",
|
||||||
|
path);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
@ -185,6 +185,9 @@ void shell_get_contact_events (TplLogManager *log_manager,
|
|||||||
guint num_events,
|
guint num_events,
|
||||||
GAsyncReadyCallback callback);
|
GAsyncReadyCallback callback);
|
||||||
|
|
||||||
|
char *shell_get_file_contents_utf8_sync (const char *path,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_H__ */
|
#endif /* __SHELL_GLOBAL_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user