[gnome-builder] transfer: fail transfer stages when on metered connections
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] transfer: fail transfer stages when on metered connections
- Date: Tue, 25 Apr 2017 03:29:43 +0000 (UTC)
commit db9568fd86907068e16996032a32fd61b888692a
Author: Christian Hergert <chergert redhat com>
Date: Mon Apr 24 20:13:39 2017 -0700
transfer: fail transfer stages when on metered connections
If we are on a metered connection, then we don't want to be downloading
things like SDKs and such. Default to setting disable-when-metered to
TRUE. Note that if the ::query() phase of the build stage marks the
transfer as completed, then the stage will not fail.
A followup commit will contain the ability to configure if you want to
download on metered connections.
https://bugzilla.gnome.org/show_bug.cgi?id=781450
libide/Makefile.am | 1 +
libide/buildsystem/ide-build-stage-transfer.c | 41 ++++++++++++++++++++++++-
libide/ide-enums.c.in | 1 +
libide/transfers/ide-transfer.c | 6 ++++
libide/transfers/ide-transfer.h | 10 +++++-
po/POTFILES.in | 1 +
6 files changed, 58 insertions(+), 2 deletions(-)
---
diff --git a/libide/Makefile.am b/libide/Makefile.am
index 76e3bac..47e8d88 100644
--- a/libide/Makefile.am
+++ b/libide/Makefile.am
@@ -666,6 +666,7 @@ glib_enum_headers = \
sourceview/ide-source-view.h \
symbols/ide-symbol.h \
threading/ide-thread-pool.h \
+ transfers/ide-transfer.h \
vcs/ide-vcs-config.h \
workbench/ide-layout-stack-split.h \
$(NULL)
diff --git a/libide/buildsystem/ide-build-stage-transfer.c b/libide/buildsystem/ide-build-stage-transfer.c
index a71346e..5722aa0 100644
--- a/libide/buildsystem/ide-build-stage-transfer.c
+++ b/libide/buildsystem/ide-build-stage-transfer.c
@@ -18,7 +18,10 @@
#define G_LOG_DOMAIN "ide-build-stage-transfer"
+#include <glib/gi18n.h>
+
#include "ide-context.h"
+#include "ide-debug.h"
#include "buildsystem/ide-build-stage-transfer.h"
#include "buildsystem/ide-build-pipeline.h"
@@ -29,11 +32,13 @@ struct _IdeBuildStageTransfer
{
IdeBuildStage parent_instnace;
IdeTransfer *transfer;
+ guint disable_when_metered : 1;
};
enum {
PROP_0,
PROP_TRANSFER,
+ PROP_DISABLE_WHEN_METERED,
N_PROPS
};
@@ -72,6 +77,8 @@ ide_build_stage_transfer_execute_async (IdeBuildStage *stage,
IdeTransferManager *transfer_manager;
IdeContext *context;
+ IDE_ENTRY;
+
g_assert (IDE_IS_BUILD_STAGE_TRANSFER (self));
g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
@@ -82,7 +89,21 @@ ide_build_stage_transfer_execute_async (IdeBuildStage *stage,
if (ide_transfer_get_completed (self->transfer))
{
g_task_return_boolean (task, TRUE);
- return;
+ IDE_EXIT;
+ }
+
+ if (self->disable_when_metered)
+ {
+ GNetworkMonitor *monitor = g_network_monitor_get_default ();
+
+ if (g_network_monitor_get_network_metered (monitor))
+ {
+ g_task_return_new_error (task,
+ IDE_TRANSFER_ERROR,
+ IDE_TRANSFER_ERROR_CONNECTION_IS_METERED,
+ _("Cannot execute transfer while on metered connection"));
+ IDE_EXIT;
+ }
}
context = ide_object_get_context (IDE_OBJECT (self));
@@ -93,6 +114,8 @@ ide_build_stage_transfer_execute_async (IdeBuildStage *stage,
cancellable,
ide_build_stage_transfer_execute_cb,
g_steal_pointer (&task));
+
+ IDE_EXIT;
}
static gboolean
@@ -126,6 +149,10 @@ ide_build_stage_transfer_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_DISABLE_WHEN_METERED:
+ g_value_set_boolean (value, self->disable_when_metered);
+ break;
+
case PROP_TRANSFER:
g_value_set_object (value, self->transfer);
break;
@@ -145,6 +172,10 @@ ide_build_stage_transfer_set_property (GObject *object,
switch (prop_id)
{
+ case PROP_DISABLE_WHEN_METERED:
+ self->disable_when_metered = g_value_get_boolean (value);
+ break;
+
case PROP_TRANSFER:
self->transfer = g_value_dup_object (value);
break;
@@ -167,6 +198,13 @@ ide_build_stage_transfer_class_init (IdeBuildStageTransferClass *klass)
build_stage_class->execute_async = ide_build_stage_transfer_execute_async;
build_stage_class->execute_finish = ide_build_stage_transfer_execute_finish;
+ properties [PROP_DISABLE_WHEN_METERED] =
+ g_param_spec_boolean ("disable-when-metered",
+ "Disable when Metered",
+ "If the transfer should fail when on a metered connection",
+ TRUE,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
properties [PROP_TRANSFER] =
g_param_spec_object ("transfer",
"Transfer",
@@ -180,4 +218,5 @@ ide_build_stage_transfer_class_init (IdeBuildStageTransferClass *klass)
static void
ide_build_stage_transfer_init (IdeBuildStageTransfer *self)
{
+ self->disable_when_metered = TRUE;
}
diff --git a/libide/ide-enums.c.in b/libide/ide-enums.c.in
index 5013750..069de62 100644
--- a/libide/ide-enums.c.in
+++ b/libide/ide-enums.c.in
@@ -16,6 +16,7 @@
#include "sourceview/ide-source-view.h"
#include "symbols/ide-symbol.h"
#include "threading/ide-thread-pool.h"
+#include "transfers/ide-transfer.h"
#include "vcs/ide-vcs-config.h"
#include "workbench/ide-layout-stack-split.h"
diff --git a/libide/transfers/ide-transfer.c b/libide/transfers/ide-transfer.c
index 82d1a6b..af8350f 100644
--- a/libide/transfers/ide-transfer.c
+++ b/libide/transfers/ide-transfer.c
@@ -457,3 +457,9 @@ ide_transfer_get_active (IdeTransfer *self)
return priv->active;
}
+
+GQuark
+ide_transfer_error_quark (void)
+{
+ return g_quark_from_static_string ("ide-transfer-error-quark");
+}
diff --git a/libide/transfers/ide-transfer.h b/libide/transfers/ide-transfer.h
index ec989f6..7c26b3d 100644
--- a/libide/transfers/ide-transfer.h
+++ b/libide/transfers/ide-transfer.h
@@ -23,7 +23,8 @@
G_BEGIN_DECLS
-#define IDE_TYPE_TRANSFER (ide_transfer_get_type())
+#define IDE_TYPE_TRANSFER (ide_transfer_get_type())
+#define IDE_TRANSFER_ERROR (ide_transfer_error_quark())
G_DECLARE_DERIVABLE_TYPE (IdeTransfer, ide_transfer, IDE, TRANSFER, GObject)
@@ -49,6 +50,13 @@ struct _IdeTransferClass
gpointer _reserved8;
};
+typedef enum
+{
+ IDE_TRANSFER_ERROR_UNKNOWN = 0,
+ IDE_TRANSFER_ERROR_CONNECTION_IS_METERED = 1,
+} IdeTransferError;
+
+GQuark ide_transfer_error_quark (void);
void ide_transfer_cancel (IdeTransfer *self);
gboolean ide_transfer_get_completed (IdeTransfer *self);
gboolean ide_transfer_get_active (IdeTransfer *self);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index f1ede2c..3f9399b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -95,6 +95,7 @@ libide/snippets/ide-source-snippet-completion-provider.c
libide/snippets/ide-source-snippets-manager.c
libide/sourceview/ide-source-view.c
libide/transfers/ide-pkcon-transfer.c
+libide/transfers/ide-transfer.c
libide/transfers/ide-transfers-button.ui
libide/util/ide-file-manager.c
libide/util/ide-uri.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]