mirror of
https://gitlab.com/virt-viewer/virt-viewer.git
synced 2025-02-02 09:47:04 +03:00
Move libvirt reconnect polling to VirtViewer
This is libvirt specific, no need to share it in the VirtViewerApp base class.
This commit is contained in:
parent
dbbd72676a
commit
5a444f106d
@ -127,7 +127,6 @@ struct _VirtViewerAppPrivate {
|
||||
gboolean active;
|
||||
gboolean connected;
|
||||
gboolean cancelled;
|
||||
guint reconnect_poll; /* source id */
|
||||
char *unixsock;
|
||||
char *guri; /* prefered over ghost:gport */
|
||||
char *ghost;
|
||||
@ -1325,40 +1324,6 @@ virt_viewer_app_retryauth(gpointer opaque)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
virt_viewer_app_connect_timer(void *opaque)
|
||||
{
|
||||
VirtViewerApp *self = opaque;
|
||||
VirtViewerAppPrivate *priv = self->priv;
|
||||
|
||||
g_debug("Connect timer fired");
|
||||
|
||||
if (!priv->active &&
|
||||
!virt_viewer_app_initial_connect(self, NULL))
|
||||
gtk_main_quit();
|
||||
|
||||
if (priv->active) {
|
||||
priv->reconnect_poll = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
virt_viewer_app_start_reconnect_poll(VirtViewerApp *self)
|
||||
{
|
||||
g_return_if_fail(VIRT_VIEWER_IS_APP(self));
|
||||
VirtViewerAppPrivate *priv = self->priv;
|
||||
|
||||
g_debug("reconnect_poll: %d", priv->reconnect_poll);
|
||||
|
||||
if (priv->reconnect_poll != 0)
|
||||
return;
|
||||
|
||||
priv->reconnect_poll = g_timeout_add(500, virt_viewer_app_connect_timer, self);
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_app_default_deactivated(VirtViewerApp *self, gboolean connect_error)
|
||||
{
|
||||
|
@ -71,7 +71,6 @@ void virt_viewer_app_free_connect_info(VirtViewerApp *self);
|
||||
int virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type);
|
||||
gboolean virt_viewer_app_activate(VirtViewerApp *self, GError **error);
|
||||
gboolean virt_viewer_app_initial_connect(VirtViewerApp *self, GError **error);
|
||||
void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self);
|
||||
void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level);
|
||||
gboolean virt_viewer_app_get_direct(VirtViewerApp *self);
|
||||
void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct);
|
||||
|
@ -59,6 +59,7 @@ struct _VirtViewerPrivate {
|
||||
gboolean reconnect;
|
||||
gboolean auth_cancelled;
|
||||
gint domain_event;
|
||||
guint reconnect_poll; /* source id */
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP)
|
||||
@ -116,6 +117,39 @@ virt_viewer_init(VirtViewer *self)
|
||||
self->priv->domain_event = -1;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
virt_viewer_connect_timer(void *opaque)
|
||||
{
|
||||
VirtViewer *self = VIRT_VIEWER(opaque);
|
||||
VirtViewerApp *app = VIRT_VIEWER_APP(self);
|
||||
|
||||
g_debug("Connect timer fired");
|
||||
|
||||
if (!virt_viewer_app_is_active(app) &&
|
||||
!virt_viewer_app_initial_connect(app, NULL))
|
||||
gtk_main_quit();
|
||||
|
||||
if (virt_viewer_app_is_active(app)) {
|
||||
self->priv->reconnect_poll = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_start_reconnect_poll(VirtViewer *self)
|
||||
{
|
||||
VirtViewerPrivate *priv = self->priv;
|
||||
|
||||
g_debug("reconnect_poll: %d", priv->reconnect_poll);
|
||||
|
||||
if (priv->reconnect_poll != 0)
|
||||
return;
|
||||
|
||||
priv->reconnect_poll = g_timeout_add(500, virt_viewer_connect_timer, self);
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
|
||||
{
|
||||
@ -130,7 +164,7 @@ virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
|
||||
if (priv->reconnect) {
|
||||
if (priv->domain_event < 0) {
|
||||
g_debug("No domain events, falling back to polling");
|
||||
virt_viewer_app_start_reconnect_poll(app);
|
||||
virt_viewer_start_reconnect_poll(self);
|
||||
}
|
||||
|
||||
virt_viewer_app_show_status(app, _("Waiting for guest domain to re-start"));
|
||||
@ -513,7 +547,6 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED,
|
||||
void *opaque)
|
||||
{
|
||||
VirtViewer *self = opaque;
|
||||
VirtViewerApp *app = VIRT_VIEWER_APP(self);
|
||||
VirtViewerPrivate *priv = self->priv;
|
||||
|
||||
g_debug("Got connection event %d", reason);
|
||||
@ -521,7 +554,7 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED,
|
||||
virConnectClose(priv->conn);
|
||||
priv->conn = NULL;
|
||||
|
||||
virt_viewer_app_start_reconnect_poll(app);
|
||||
virt_viewer_start_reconnect_poll(self);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -836,7 +869,7 @@ virt_viewer_connect(VirtViewerApp *app)
|
||||
if (priv->domain_event < 0 &&
|
||||
!virt_viewer_app_is_active(app)) {
|
||||
g_debug("No domain events, falling back to polling");
|
||||
virt_viewer_app_start_reconnect_poll(app);
|
||||
virt_viewer_start_reconnect_poll(self);
|
||||
}
|
||||
|
||||
if (virConnectRegisterCloseCallback(priv->conn,
|
||||
|
Loading…
x
Reference in New Issue
Block a user