[tick at openmoko.com: patches for repos_ping]

Tick Chen tick at openmoko.com
Wed Jul 16 10:57:17 CEST 2008


----- Forwarded message from Tick Chen <tick at openmoko.com> -----
Since no one complain about the repository patch. 
I patch that on. (version 4528)

Date: Wed, 16 Jul 2008 16:48:18 +0800
From: Tick Chen <tick at openmoko.com>
To: Julian Chu <julian_chu at openmoko.com>
Cc: devel at lists.openmoko.org
Subject: patches for repos_ping

Hi Julian,  
  There are few think I need your help:

  . Please patch the attached patch to packagekit.
  . update the opkg to version 4528
  . update the assassin to version 195
  . remove the libcurl depend from assassin

New updates:
 1. reorder the initial sequence
 2. make libopkg able to check the repository is alive or not
 3. connect the repos_ping with packagekit
 4. Let assassin using the packagekit to query if the reposiroty is
accessiable or not
 5. Get rid of the dirty hack of libcurl 
 

Cheers, 
Tick


diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 5714e9f..162e6ce 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -777,6 +777,16 @@ backend_what_provides (PkBackend *backend, PkFilterEnum filters, PkProvidesEnum
 }
 
 /**
+ * backend_repos_ping:
+ */ 
+static PkNetworkEnum
+backend_repos_ping (PkBackend *backend)
+{
+	pk_backend_finished (backend);
+	return PK_NETWORK_ENUM_UNKNOWN;
+}
+
+/**
  * backend_get_packages:
  */
 static void
@@ -821,6 +831,7 @@ PK_BACKEND_OPTIONS (
 	backend_service_pack,			/* service_pack */
 	backend_update_packages,		/* update_packages */
 	backend_update_system,			/* update_system */
-	backend_what_provides			/* what_provides */
+	backend_what_provides, 			/* what_provides */
+	backend_repos_ping			/* repos_ping */
 );
 
diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c
index 02966c9..a20769f 100644
--- a/backends/opkg/pk-backend-opkg.c
+++ b/backends/opkg/pk-backend-opkg.c
@@ -705,6 +705,16 @@ backend_get_details (PkBackend *backend, const gchar *package_id)
 	pk_backend_thread_create (backend, backend_get_details_thread);
 }
 
+static PkNetworkEnum 
+backend_repos_ping (PkBackend *backend)
+{
+	int opkg_ret = opkg_repository_accessibility_check(opkg);
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+	pk_backend_finished (backend);
+	pk_debug("opkg repos_ping ret = %d\n", opkg_ret);
+	return opkg_ret ? PK_NETWORK_ENUM_OFFLINE : PK_NETWORK_ENUM_ONLINE;
+}
+
 PK_BACKEND_OPTIONS (
 	"opkg",					/* description */
 	"Thomas Wood <thomas at openedhand.com>",	/* author */
@@ -737,6 +747,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	backend_update_packages,		/* update_packages */
 	backend_update_system,			/* update_system */
-	NULL					/* what_provides */
+	NULL, 					/* what_provides */
+	backend_repos_ping			/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-dbus.c b/backends/test/pk-backend-test-dbus.c
index 76686dc..9ef733d 100644
--- a/backends/test/pk-backend-test-dbus.c
+++ b/backends/test/pk-backend-test-dbus.c
@@ -105,6 +105,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	NULL,					/* update_packages */
 	NULL,					/* update_system */
-	NULL					/* what_provides */
+	NULL,					/* what_provides */
+	NULL					/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-fail.c b/backends/test/pk-backend-test-fail.c
index b429c1b..a70564a 100644
--- a/backends/test/pk-backend-test-fail.c
+++ b/backends/test/pk-backend-test-fail.c
@@ -275,6 +275,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	backend_update_packages,		/* update_packages */
 	backend_update_system,			/* update_system */
-	NULL					/* what_provides */
+	NULL, 					/* what_provides */
+	NULL					/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-nop.c b/backends/test/pk-backend-test-nop.c
index 3526fa5..a715b9b 100644
--- a/backends/test/pk-backend-test-nop.c
+++ b/backends/test/pk-backend-test-nop.c
@@ -55,6 +55,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	NULL,					/* update_package */
 	NULL,					/* update_system */
-	NULL					/* what_provides */
+	NULL, 					/* what_provides */
+	NULL					/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c
index 584f44c..424c7d4 100644
--- a/backends/test/pk-backend-test-spawn.c
+++ b/backends/test/pk-backend-test-spawn.c
@@ -96,6 +96,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	NULL,					/* update_package */
 	NULL,					/* update_system */
-	NULL					/* what_provides */
+	NULL,					/* what_provides */
+	NULL					/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c
index c046c1d..116d4fe 100644
--- a/backends/test/pk-backend-test-succeed.c
+++ b/backends/test/pk-backend-test-succeed.c
@@ -304,6 +304,16 @@ backend_what_provides (PkBackend *backend, PkFilterEnum filters, PkProvidesEnum
 }
 
 /**
+ * backend_repos_ping
+ */ 
+static PkNetworkEnum
+backend_repos_ping (PkBackend *backend)
+{
+	pk_backend_finished(backend);
+	return PK_NETWORK_ENUM_UNKNOWN;
+}
+
+/**
  * backend_get_packages:
  */
 static void
@@ -344,6 +354,7 @@ PK_BACKEND_OPTIONS (
 	backend_service_pack,			/* service_pack */
 	backend_update_packages,		/* update_packages */
 	backend_update_system,			/* update_system */
-	backend_what_provides			/* what_provides */
+	backend_what_provides, 			/* what_provides */
+	backend_repos_ping			/* repos_ping */
 );
 
diff --git a/backends/test/pk-backend-test-thread.c b/backends/test/pk-backend-test-thread.c
index 46ee862..a00cd26 100644
--- a/backends/test/pk-backend-test-thread.c
+++ b/backends/test/pk-backend-test-thread.c
@@ -168,6 +168,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* service_pack */
 	NULL,					/* update_package */
 	NULL,					/* update_system */
-	NULL					/* what_provides */
+	NULL, 					/* what_provides */
+	NULL					/* repos_ping */
 );
 
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index 2bffaff..f46159c 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -71,6 +71,8 @@ PkGroupEnum	 pk_backend_get_groups			(PkBackend	*backend);
 PkFilterEnum	 pk_backend_get_filters			(PkBackend	*backend);
 PkRoleEnum	 pk_backend_get_actions			(PkBackend	*backend);
 
+PkNetworkEnum    pk_backend_repos_ping			(PkBackend      *backend);
+
 G_END_DECLS
 
 #endif /* __PK_BACKEND_INTERNAL_H */
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 6efa55e..32ff276 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -165,6 +165,23 @@ pk_backend_get_filters (PkBackend *backend)
 }
 
 /**
+ */
+PkNetworkEnum    
+pk_backend_repos_ping (PkBackend      *backend) 
+{
+	g_return_val_if_fail (PK_IS_BACKEND (backend), PK_NETWORK_ENUM_UNKNOWN);
+	g_return_val_if_fail (backend->priv->locked != FALSE, PK_NETWORK_ENUM_UNKNOWN);
+
+	/* not compulsory */
+	if (backend->desc->repos_ping == NULL) {
+		return PK_NETWORK_ENUM_UNKNOWN;
+	}
+
+	pk_debug("Runing backend's repos_ping\n");
+	return backend->desc->repos_ping (backend);
+}
+
+/**
  * pk_backend_get_actions:
  **/
 PkRoleEnum
diff --git a/src/pk-backend.h b/src/pk-backend.h
index a7ba754..1f41c6c 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -258,6 +258,7 @@ typedef struct {
 							 PkFilterEnum	 filters,
 							 PkProvidesEnum	 provides,
 							 const gchar	*search);
+	PkNetworkEnum	(*repos_ping) 			(PkBackend 	*backend);
 	gpointer	padding[10];
 } PkBackendDesc;
 
@@ -266,7 +267,7 @@ typedef struct {
 			   get_update_detail, get_updates, install_files, install_packages,		\
 			   install_signature, refresh_cache, remove_packages, repo_enable,		\
 			   repo_set_data, resolve, rollback, search_details, search_file, search_group,	\
-			   search_name, service_pack, update_packages, update_system, what_provides)	\
+			   search_name, service_pack, update_packages, update_system, what_provides, repos_ping)	\
 	G_MODULE_EXPORT const PkBackendDesc pk_backend_desc = { 					\
 		description,		\
 		author,			\
@@ -300,6 +301,7 @@ typedef struct {
 		update_packages,	\
 		update_system,		\
 		what_provides,		\
+		repos_ping, 		\
 		{0} 			\
 	}
 
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 14ecf41..f9359f2 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -279,8 +279,11 @@ pk_engine_get_network_state (PkEngine *engine, gchar **state, GError **error)
 {
 	PkNetworkEnum network;
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
-	/* get the network state */
-	network = pk_network_get_network_state (engine->priv->network);
+	network = pk_backend_repos_ping(engine->priv->backend);
+	if (network == PK_NETWORK_ENUM_UNKNOWN)  {
+		/* get the network state */
+		network = pk_network_get_network_state (engine->priv->network);
+	}
 	*state = g_strdup (pk_network_enum_to_text (network));
 	return TRUE;
 }




_______________________________________________
devel mailing list
devel at lists.openmoko.org
https://lists.openmoko.org/mailman/listinfo/devel


----- End forwarded message -----
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.openmoko.org/pipermail/opkg-devel/attachments/20080716/09891a6d/attachment.pgp 


More information about the opkg-devel mailing list