Blame gio/gportalsupport.c

Packit ae235b
/* GIO - GLib Input, Output and Streaming Library
Packit ae235b
 *
Packit ae235b
 * Copyright 2016 Red Hat, Inc.
Packit ae235b
 *
Packit ae235b
 * This library is free software; you can redistribute it and/or
Packit ae235b
 * modify it under the terms of the GNU Lesser General Public
Packit ae235b
 * License as published by the Free Software Foundation; either
Packit ae235b
 * version 2.1 of the License, or (at your option) any later version.
Packit ae235b
 *
Packit ae235b
 * This library is distributed in the hope that it will be useful,
Packit ae235b
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit ae235b
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit ae235b
 * Lesser General Public License for more details.
Packit ae235b
 *
Packit ae235b
 * You should have received a copy of the GNU Lesser General
Packit ae235b
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit ae235b
 */
Packit ae235b
Packit ae235b
#include "config.h"
Packit ae235b
Packit ae235b
#include "gportalsupport.h"
Packit ae235b
Packit ae235b
static gboolean flatpak_info_read;
Packit ae235b
static gboolean use_portal;
Packit ae235b
static gboolean network_available;
Packit ae235b
Packit ae235b
static void
Packit ae235b
read_flatpak_info (void)
Packit ae235b
{
Packit ae235b
  const gchar *path = "/.flatpak-info";
Packit ae235b
Packit ae235b
  if (flatpak_info_read)
Packit ae235b
    return;
Packit ae235b
Packit ae235b
  flatpak_info_read = TRUE;
Packit ae235b
Packit ae235b
  if (g_file_test (path, G_FILE_TEST_EXISTS))
Packit ae235b
    {
Packit ae235b
      GKeyFile *keyfile;
Packit ae235b
Packit ae235b
      use_portal = TRUE;
Packit ae235b
      network_available = FALSE;
Packit ae235b
Packit ae235b
      keyfile = g_key_file_new ();
Packit ae235b
      if (g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL))
Packit ae235b
        {
Packit ae235b
          char **shared = NULL;
Packit ae235b
Packit ae235b
          shared = g_key_file_get_string_list (keyfile, "Context", "shared", NULL, NULL);
Packit ae235b
          if (shared)
Packit ae235b
            {
Packit ae235b
              network_available = g_strv_contains ((const char * const *)shared, "network");
Packit ae235b
              g_strfreev (shared);
Packit ae235b
            }
Packit ae235b
        }
Packit ae235b
Packit ae235b
      g_key_file_unref (keyfile);
Packit ae235b
    }
Packit ae235b
  else
Packit ae235b
    {
Packit ae235b
      const char *var;
Packit ae235b
Packit ae235b
      var = g_getenv ("GTK_USE_PORTAL");
Packit ae235b
      if (var && var[0] == '1')
Packit ae235b
        use_portal = TRUE;
Packit ae235b
      network_available = TRUE;
Packit ae235b
    }
Packit ae235b
}
Packit ae235b
Packit ae235b
gboolean
Packit ae235b
glib_should_use_portal (void)
Packit ae235b
{
Packit ae235b
  read_flatpak_info ();
Packit ae235b
  return use_portal;
Packit ae235b
}
Packit ae235b
Packit ae235b
gboolean
Packit ae235b
glib_network_available_in_sandbox (void)
Packit ae235b
{
Packit ae235b
  read_flatpak_info ();
Packit ae235b
  return network_available;
Packit ae235b
}
Packit ae235b