Beispiel #1
0
silent_updater::silent_updater(int major, int minor, int update, int build, QObject *parent) :
    QObject(parent),
    m_download_aborted(false),
    m_started(false),
    m_major(major),
    m_minor(minor),
    m_update(update),
    m_build(build),
    m_reply(NULL),
    m_update_reply(NULL),
    m_filesystem_error(QFile::NoError)
{
    m_check_tm.reset(new QTimer);    
    m_nm.reset(new QNetworkAccessManager);
    connect(m_check_tm.data(), SIGNAL(timeout()), SLOT(on_check_updates()));    

    if (QFile::exists(old_filename())) QFile::remove(old_filename());
    if (QFile::exists(update_filename())) QFile::remove(update_filename());
}
void mac_trc_update_all_info()
{
	Rect r;
	
	SetPortWindowPort(win.ref);
	SetRect(&r, 0,0, win.ref->portRect.right,UPPER_MERGIN);
	EraseRect(&r);
	
	mac_trc_update_voices();
	update_filename();
	update_title();
	mac_trc_update_time(-1,-1);
}
Beispiel #3
0
/* write event data to xml file */
void xml_write_node (gint node_id, gint light, gint temp, gint time)
{
    xmlNodePtr xml_node = xmlNewChild (root_node, NULL, "light_temp_event", NULL);
    gchar buf[256];

    snprintf (buf, sizeof (buf), "%d", node_id);
    xmlNewChild (xml_node, NULL, "node_id", buf);
    snprintf (buf, sizeof (buf), "%d", light);
    xmlNewChild (xml_node, NULL, "light", buf);
    snprintf (buf, sizeof (buf), "%d", temp);
    xmlNewChild (xml_node, NULL, "temp", buf);
    snprintf (buf, sizeof (buf), "%d", time);
    xmlNewChild (xml_node, NULL, "time", buf);

    xmlSaveFormatFileEnc (current_file, doc, "UTF-8", 1);
    update_filename ();
}
Beispiel #4
0
int main (int argc, char** argv)
{
    gchar* hostname;
    gint port;
    GMainLoop* main_loop;
    GConn* conn;

    gnet_init ();

    /* Parse args */
    if (argc != 4)
    {
        g_print ("usage: %s <server> <port> <output-directory>\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    hostname = argv[1];
    port = atoi(argv[2]);
    out_dir = argv[3];
    check_dir (out_dir);
    update_filename ();

    /* Create the main loop */
    main_loop = g_main_new(FALSE);

    /* Create connection object */
    conn = gnet_conn_new (hostname, port, ob_conn_func, NULL);
    g_assert (conn);

    /* Connect */
    gnet_conn_connect (conn);
    gnet_conn_set_watch_error (conn, TRUE);
    gnet_conn_timeout (conn, 30000);  /* 30 second timeout */

    //open the xml file
    init_xml ();
    atexit (flush_xml);

    /* Start the main loop */
    g_main_run (main_loop);

    exit (EXIT_SUCCESS);
    return 0;
}
Beispiel #5
0
void silent_updater::on_update_check_finished()
{
    // network request completed    
    if (m_update_reply->error() == QNetworkReply::NoError)
    {
        // ok, no errors
        QByteArray data = m_update_reply->readAll();
        QString xml = QString::fromUtf8(data.constData());

        QDomDocument doc;
        QString errorStr;
        int errorLine;
        int errorColumn;

        if (doc.setContent(xml, true, &errorStr, &errorLine, &errorColumn))
        {
            QDomElement root = doc.documentElement();
            QDomNode node = root.firstChild();

            while(!node.isNull())
            {
                QDomElement element  = node.toElement();

                // validate element
                if (!element.isNull() && (element.tagName() == "qmule") && !element.attribute("url").isEmpty())
                {
                    qDebug() << "url: " << element.attribute("url");

                    QRegExp vrx("(\\d+.\\d+.\\d+.\\d+)");

                    if (vrx.exactMatch(element.attribute("version")))
                    {

                        QStringList vlist = element.attribute("version").split(".");

                        if (vlist.size() == 4)
                        {
                            if (vlist.at(0).toInt() > m_major)
                            {
                                // current version is obsolete
                                emit current_version_is_obsolete(vlist.at(0).toInt(),
                                                                 vlist.at(1).toInt(),
                                                                 vlist.at(2).toInt(),
                                                                 vlist.at(3).toInt());
                            }
                            else if (vlist.at(0).toInt() == m_major) // execute update only when major versions are equals
                            {

                                bool update = false;
                                if (vlist.at(3).toInt() > m_build)  update = true;
                                if (vlist.at(2).toInt() > m_update) update = true;
                                if (vlist.at(2).toInt() < m_update) update = false;
                                if (vlist.at(1).toInt() > m_minor)  update = true;
                                if (vlist.at(1).toInt() < m_minor)  update = false;

                                if (update)
                                {
                                    // need update !
                                    qDebug() << "new version was found " << element.attribute("version");

                                    m_file.reset(new QFile(update_filename()));
                                    if (QFile::exists(update_filename())) QFile::remove(update_filename());

                                    // check file
                                    if (!m_file->open(QIODevice::WriteOnly))
                                    {
                                        qDebug() << "can't create file " << update_filename();
                                        m_file.reset();
                                    }
                                    else
                                    {
                                        qDebug() << "start network request";
                                        // store new version
                                        m_major = vlist.at(0).toInt();
                                        m_minor = vlist.at(1).toInt();
                                        m_update= vlist.at(2).toInt();
                                        m_build = vlist.at(3).toInt();
                                        // start async request and return
                                        m_reply = m_nm->get(QNetworkRequest(QUrl(element.attribute("url"))));
                                        connect(m_reply, SIGNAL(readyRead()), SLOT(on_data_ready()));
                                        connect(m_reply, SIGNAL(finished()), SLOT(on_data_finished()));
                                        m_update_reply->deleteLater();
                                        m_update_reply = NULL;
                                        return;
                                    }
                                }
                            }
                            else
                            {
                                qDebug() << "incompatible majors: our: " << m_major << " web: " << vlist.at(0).toInt();
                            }
                        }
                        else
                        {
                            qDebug() << "what is it? list size incorrect - it is impossible";
                        }
                    }
                    else
                    {
                        qDebug() << "unrecognized version: " << element.attribute("version");
                    }
                }

                node = node.nextSibling();
            }
        }
        else
        {
            qDebug() << "fail on decode xml " << xml << " with error " << errorStr;
        }
    }
    else
    {
        qDebug() << "error on update request " << m_update_reply->error();
    }

    m_update_reply->deleteLater();
    m_update_reply = NULL;
    // start new cycle - possible we got temporary fail
    m_check_tm->start(update_timeout);
}
Beispiel #6
0
void silent_updater::on_data_finished()
{
    qDebug() << "data finished";
    bool bCompleted = true;
    // read last part
    on_data_ready();
    m_file->flush();

    // check errors
    if (m_reply->error() || (m_filesystem_error != QFile::NoError))
    {
        bCompleted = false;
        qDebug() << "error on finished " << m_reply->error() <<
                    " or filesystem error " << m_filesystem_error;
        // clear resources
        m_file->remove();
        m_filesystem_error = QFile::NoError;
    }

    //remove updater and file holder
    m_reply->deleteLater();
    m_reply = NULL;    
    m_file.reset();

    if (bCompleted)
    {
        qDebug() << "new file download was completed - upgrade it";
        QFile f(update_filename());

#ifdef Q_WS_WIN
        if (!MoveFileExA(current_filename().toLocal8Bit(), old_filename().toLocal8Bit(), MOVEFILE_COPY_ALLOWED))
        {
            qDebug() << "error on move file : " << current_filename() << " to " << old_filename()
                     << GetLastError();
        }
#else
        if (!QFile::remove(current_filename()))
        {
            qDebug() << "unable to remove file " << current_filename();
        }
#endif
        else
        {
            qDebug() << "move completed succefully";

            if (f.copy(current_filename()))
            {
                qDebug() << "new program succesfully copied";
                QFile::setPermissions(current_filename(),
                                      QFile::permissions(current_filename()) | QFile::ExeUser | QFile::ExeGroup);
                emit new_version_ready(m_major, m_minor, m_update, m_build);
            }
            else
            {
                qDebug() << "unable to replace current file";
            }
        }
    }
    else
    {
        // start new upgrade iteration when changes weren't made
        m_check_tm->start(update_timeout);
    }
}
Beispiel #7
0
static int
wget_log_process_line (GwgetData *gwgetdata)
{
	gchar *p;
	gint dots = 0;

	if ((gwgetdata->line == NULL) || (strlen (gwgetdata->line) == 0))
		return 0;
		
	switch (gwgetdata->state) {
	case DL_NOT_CONNECTED:
		if (strstr(gwgetdata->line,"           => `")) {		/* wget <1.11 */
		    update_filename(gwgetdata);
		    break;
    	}
   
		/* First check to see if we connected to the host correctly. */

		/* Wget 1.8.1 says "connected." rather than "connected!" */
		if (strstr (gwgetdata->line, "connected!") != NULL ||
			strstr (gwgetdata->line, "connected.") != NULL) {
				gwget_data_set_state (gwgetdata, DL_CONNECTED);
				break;
		}
		
		/* Second filter out other non-error messages that can precede "connected" */
		
		if (strncmp (gwgetdata->line, "--", 2) == 0 ||
			strncmp (gwgetdata->line, "  ", 2) == 0)
			break;

		if ((strncmp (gwgetdata->line, "Connecting to ", 14) == 0) &&
			(strstr (gwgetdata->line, "failed: ") == NULL))
			break;

		/* Wget 1.8.1 adds an explicit "Resolving" status msg */
		if ((strstr (gwgetdata->line, "Resolving") != NULL) &&
            (strstr (gwgetdata->line, "Host not found.") == NULL) &&
			(strstr (gwgetdata->line, "Name or service not known") == NULL))
                break;
			
		/* Wget, under certain circumstances, returns a list of resolved IP addresses
		 *	before attempting to connect, which can be ignored.
		 */
		
		/* Test for ipv4 address */
		dots = 0;
		for (p = gwgetdata->line; p[0]; p ++) {
			if (isdigit (p[0])) continue;
			else if (p[0] == '.') dots ++;
			else if ((p[0] == '\n') || (p[0] == ',')) break;
			else break;
		}
		if ((! p[0]) || (p[0] == '\n') || (p[0] == ',')) {
			if (dots == 3) break;
		}

		/* Test for ipv6 address */
		dots = 0;
		for (p = gwgetdata->line; p[0]; p ++) {
			if (isxdigit (p[0])) continue;
			else if (p[0] == ':') dots ++;
			else if ((p[0] == '\n') || (p[0] == ',')) break;
			else break;
		}
		if ((! p[0]) || (p[0] == '\n') || (p[0] == ',')) {
			if (dots > 1) break;
		}

		/* Failing the above checks, we _assume_ we have an error. The wget process will
		 * be killed after we create an error message.
		 */

		if (strncmp (gwgetdata->line, "socket: ", 8) == 0)
			show_error (gwgetdata, _ ("Socket error"));
			
	    else if (strncmp (gwgetdata->line, "Connection to ", 14) == 0)
			show_error (gwgetdata, _ ("Connection refused"));
			
	    else if (strstr (gwgetdata->line, "No route to host") != NULL)
			show_error (gwgetdata, _ ("No route to host"));
			
	    else if (strncmp (gwgetdata->line, "connect: ", 9) == 0)
			show_error (gwgetdata, _ ("Connection refused when downloading URL:"));
			
	    else if (strstr (gwgetdata->line, "Host not found.") != NULL)
			show_error (gwgetdata, _ ("Host not found"));
			
		else if (strstr (gwgetdata->line, "Name or service not known") != NULL)
			show_error (gwgetdata, _ ("Name or service not known"));
			
	    else if (strstr (gwgetdata->line, "unsupported protocol") != NULL)
			show_error (gwgetdata, _ ("Unsupported protocol"));
			
		else if (strstr (gwgetdata->line, "Refusing to truncate existing") != NULL)
			show_error(gwgetdata, _("Refusing to truncate existing file"));
			
		else if (strstr (gwgetdata->line, "unable to resolve"))
				show_error (gwgetdata, _ ("Unable to resolve host address"));
			
		else if ((p = strstr (gwgetdata->line, "failed: ")) != NULL) {
			/* 
			 * This is somewhat generic looking, but is informative
			 */
			show_error (gwgetdata, p + 8);
		}
			
		else {
			/*
			 * All other possible output may as well be reported, since we treat it
			 * as an error. We tag the message as unknown to make it more meaningful.
			 */
			p = g_strconcat (_ ("Unknown error "), gwgetdata->line, NULL);
			show_error (gwgetdata, p);
			g_free (p);
		}
		
		kill (gwgetdata->wget_pid, SIGKILL);
		return 1;
		break;

		case DL_CONNECTED:
		/* File not found for FTP */
			if (strncmp (gwgetdata->line, "No such file ", 13) == 0 ||
			strncmp (gwgetdata->line, "No such dir", 11) == 0) {
				show_error (gwgetdata, _ ("File not found"));
			break;
	    }

		/* File not found for HTTP or Proxy */
		if (strstr (gwgetdata->line, "ERROR") != NULL) {
			gwget_data_set_state (gwgetdata, DL_ERROR);
			show_error (gwgetdata, _ ("File not found"));
			break;
	    }

		/* local file conflicts */
		if (strstr (gwgetdata->line, "Continued download fail") != NULL) {
			show_error (gwgetdata,
				    _ ("Can't continue download, existing local file "
			    	   "conflicts with remote file"));
			break;
	    }

		/* Incorrect login or FTP with limited concurrent downloads */
		if (strstr (gwgetdata->line, "Login incorrect") != NULL) {
			if (check_server_already_exists(gwgetdata->url)==TRUE) {
				/* Login is correct but there is a limit in concurrents downloads */
				gwget_data_set_state (gwgetdata, DL_WAITING);			
			} else {
				gwget_data_set_state (gwgetdata, DL_ERROR);
			}
			break;
		}

		/* Get the leght of file being downloaded */
		p = strstr (gwgetdata->line, "Length: ");
		if (p != NULL) {
			p += 8;
            /* Only set the total size if we don't have one yet. */
            if (gwgetdata->total_size == 0 && !gwgetdata->recursive) { 
            	gwget_data_set_total_size (gwgetdata,convert_wget_size (p));
			}
			gwget_data_set_state (gwgetdata, DL_RETRIEVING);
			set_icon_newdownload();
			set_start_size_and_time(gwgetdata);
			gwgetdata->session_elapsed = 0;
	    } else {
				/* We didn't get a length so, probably it's unspecified size
                   so get the start of download by trying to catch the
                   string "K ->" */
				p = strstr (gwgetdata->line, "K -> ");
				if (p != NULL) {
					/* Unspecified size, so set total_size to 0 */
					gwget_data_set_total_size (gwgetdata, 0);
					gwget_data_set_state (gwgetdata, DL_RETRIEVING);
					set_start_size_and_time(gwgetdata);
				}
				gwgetdata->session_elapsed = 0;
        }
	    break;

		case DL_RETRIEVING:
			if (strstr(gwgetdata->line,"Saving to: `")) {		/* wget >=1.11 */
			    update_filename(gwgetdata);
			    break;
	    	}

			if (strncmp (gwgetdata->line, "Cannot write to ", 15) == 0) {
			show_error (gwgetdata,
					    _ ("Can't write to target directory"));
			kill (gwgetdata->wget_pid, SIGKILL);
			return 1;
			break;
			}
			
			if (gwgetdata->recursive) {
				/* Get the leght of file being downloaded */
				p = strstr (gwgetdata->line, "Length: ");
				if (p != NULL) {
					p += 8;
					gwget_data_set_total_size (gwgetdata,convert_wget_size (p));
					set_start_size_and_time(gwgetdata);
					gwgetdata->session_elapsed = 0;
				} else {
		                	/* We didn't get a length so, probably it's unspecified size
                			   so get the start of download by trying to catch the
			                   string "K ->" */
					p = strstr (gwgetdata->line, "K -> ");
					if (p != NULL) {
						/* Unspecified size, so set total_size to 0 */
						gwget_data_set_total_size (gwgetdata, 0);
						set_start_size_and_time(gwgetdata);
					}
					gwgetdata->session_elapsed = 0;
				}
				if (strstr (gwgetdata->line,"-- ") != NULL) {
					gchar *tmp=NULL;
					gint i,j;
					j=0;
					tmp = g_new(gchar,strlen(gwgetdata->line));
					for (i=14;i<strlen(gwgetdata->line);i++) {
						tmp[j]=gwgetdata->line[i];
						j++;
					}
					tmp[j]='\0';
					gwget_data_set_filename_from_url(gwgetdata,tmp);
					gwgetdata->local_filename = g_strconcat (gwgetdata->dir, gwgetdata->filename, NULL);
					g_free(tmp);
				}

				if (strstr (gwgetdata->line, "           =>") != NULL) {
					gchar *tmp=NULL;
					gint i,j;
					j=0;
					tmp = g_new(gchar,strlen(gwgetdata->line));
					for (i=15;i<strlen(gwgetdata->line);i++) {
						tmp[j]=gwgetdata->line[i];
						j++;
					}
					/* Remove the las ' character */
					tmp[j-1]='\0';
					gwgetdata->local_filename = g_strdup (tmp);
					gwgetdata->cur_size=0; 
					gwgetdata->total_size=0; 
					gwgetdata->session_start_time = 0;
					gwgetdata->session_start_size = 0;
					g_free(tmp);
				}
			}
		break;
		default:
		break;
	}
	return 0;
}