예제 #1
0
파일: servlist.c 프로젝트: HextorIRC/hextor
int
servlist_cycle (server *serv)
{
    ircnet *net;
    int max, del;

    net = serv->network;
    if (net)
    {
        max = g_slist_length (net->servlist);
        if (max > 0)
        {
            /* try the next server, if that option is on */
            if (net->flags & FLAG_CYCLE)
            {
                net->selected++;
                if (net->selected >= max)
                    net->selected = 0;
            }

            del = prefs.hex_net_reconnect_delay * 1000;
            if (del < 1000)
                del = 500;                                /* so it doesn't block the gui */

            if (del)
                serv->recondelay_tag = fe_timeout_add (del, servlist_cycle_cb, serv);
            else
                servlist_connect (serv->server_session, net, TRUE);

            return TRUE;
        }
    }

    return FALSE;
}
예제 #2
0
파일: servlist.cpp 프로젝트: leeter/hexchat
bool servlist_cycle (server *serv)
{
	auto net = serv->network;
	if (!net)
	{
		return false;
	}

	int max = g_slist_length(net->servlist);
	if (max <= 0)
	{
		return false;
	}

	/* try the next server, if that option is on */
	if (net->flags & FLAG_CYCLE)
	{
		net->selected++;
		if (net->selected >= max)
			net->selected = 0;
	}

	int del = prefs.hex_net_reconnect_delay * 1000;
	if (del < 1000)
		del = 500;				  /* so it doesn't block the gui */

	if (del)
		serv->recondelay_tag = fe_timeout_add(del, (GSourceFunc)servlist_cycle_cb, serv);
	else
		servlist_connect(serv->server_session, *net, true);

	return true;
}
예제 #3
0
static void
dialog_response (ConnectDialog *dialog, gint response, gpointer data)
{
    if (response != GTK_RESPONSE_OK) {
        gtk_widget_destroy (GTK_WIDGET (dialog));
        return;
    }

    GtkTreeModel *model;
    GtkTreeIter iter;

    GtkTreeSelection *select = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->server_list));
    if (gtk_tree_selection_get_selected (select, &model, &iter)) {
        session *s = NULL;
        ircnet *net;

        // If the currently selected server is not connected, use it
        // for the new session.
        if (gui.current_session &&
                (gui.current_session->server == NULL ||
                 gui.current_session->server->connected == FALSE)) {
            s = gui.current_session;
        }

        // Make sure that this network isn't already connected.
        gtk_tree_model_get (model, &iter, 1, &net, -1);
        gboolean found = FALSE;
        for (GSList *i = sess_list; i; i = g_slist_next (i)) {
            session *sess = (session *)(i->data);
            if (sess->type == SESS_SERVER &&
                    sess->server != NULL &&
                    sess->server->network == net &&
                    (sess->server->connected || sess->server->connecting)) {
                found = TRUE;
                break;
            }
        }

        gtk_widget_destroy (GTK_WIDGET (dialog));

        if(net->servlist == NULL) {
            GtkWidget *warning_dialog =
                gtk_message_dialog_new (NULL,
                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                        GTK_MESSAGE_WARNING,
                                        GTK_BUTTONS_CLOSE,
                                        _("This network doesn't have a server defined."));
            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (warning_dialog),
                    _("Please add at least one server to the %s network."),
                    net->name);
            gtk_dialog_run (GTK_DIALOG (warning_dialog));
            gtk_widget_destroy (warning_dialog);

        } else if (!found) {
            servlist_connect (s, net, TRUE);
        }
    }
}
예제 #4
0
static gint servlist_cycle_cb(server *serv)
{
        if (serv->network) {
                PrintTextf(serv->server_session,
                           _("Cycling to next server in %s...\n"),
                           ((ircnet *)serv->network)->name);
                servlist_connect(serv->server_session, serv->network, TRUE);
        }

        return 0;
}
예제 #5
0
파일: servlist.cpp 프로젝트: leeter/hexchat
static gint
servlist_cycle_cb (server *serv)
{
	if (serv->network)
	{
		PrintTextf (serv->server_session,
			_("Cycling to next server in %s...\n"), serv->network->name.c_str());
		servlist_connect(serv->server_session, *serv->network, true);
	}

	return 0;
}
예제 #6
0
파일: servlist.cpp 프로젝트: leeter/hexchat
bool servlist_connect_by_netname (session *sess, char *network, bool join)
{
	for(auto & net : glib_helper::glist_iterable<ircnet>(network_list))
	{
		if (g_ascii_strcasecmp (net.name.c_str(), network) == 0)
		{
			servlist_connect (sess, net, join);
			return true;
		}
	}

	return false;
}
예제 #7
0
파일: servlist.cpp 프로젝트: leeter/hexchat
bool servlist_auto_connect (session *sess)
{
	bool ret = false;

	for (auto & net : glib_helper::glist_iterable<ircnet>(network_list))
	{
		if (net.flags & FLAG_AUTO_CONNECT)
		{
			servlist_connect (sess, net, true);
			ret = true;
		}
	}

	return ret;
}
예제 #8
0
int servlist_connect_by_netname(session *sess, char *network, gboolean join)
{
        ircnet *net;
        GSList *list = network_list;

        while (list) {
                net = list->data;

                if (strcasecmp(net->name, network) == 0) {
                        servlist_connect(sess, net, join);
                        return 1;
                }

                list = list->next;
        }

        return 0;
}
예제 #9
0
int servlist_auto_connect(session *sess)
{
        GSList *list = network_list;
        ircnet *net;
        int ret = 0;

        while (list) {
                net = list->data;

                if (net->flags & FLAG_AUTO_CONNECT) {
                        servlist_connect(sess, net, TRUE);
                        ret = 1;
                }

                list = list->next;
        }

        return ret;
}
예제 #10
0
static void
servlist_connect_cb (GtkWidget *button, gpointer userdata)
{
	if (!selected_net)
		return;

	if (servlist_savegui () != 0)
	{
		fe_message (_("User name and Real name cannot be left blank."), FE_MSG_ERROR);
		return;
	}

	if (!is_session (servlist_sess))
		servlist_sess = NULL;
	else if (servlist_sess->server->connected)
		servlist_sess = NULL;

	servlist_connect (servlist_sess, selected_net, TRUE);

	mg_close_gen(NULL, serverlist_win);
}