Beispiel #1
0
 private static void createBlankDBServer()
 {
     LogB.SQL("Creating blank database for server");
     if (Sqlite.CheckFileServer())
     {
         LogB.Error("File already exists. Cannot create.");
     }
     else
     {
         Sqlite.ConnectServer();
         Sqlite.CreateFile();
         Sqlite.CreateTables(true);             //server
         LogB.SQL("Created blank database! Exiting");
         string myVersion = UtilAll.ReadVersion();
         LogB.Warning("CAUTION: client info about versionAvailable (on server): ", myVersion);
         SqlitePreferences.Update("availableVersion", myVersion, false);
         LogB.Information("Maybe you don't want to show this version on pings, change it to last stable published version");
     }
 }
Beispiel #2
0
    private void findVersion()
    {
        LogB.Debug("--1--");
        //pingStart = true;
        pulseGTKPingShouldEnd = false;
        splashShowButton      = true;

        LogB.Debug("--2--");
        //maybe other thread doesn't create at time the splash win
        //then just wait
        while (!createdSplashWin)
        {
            ;
        }

        LogB.Debug("--2.1--");

        try {
            if (splashWin.FakeButtonCreated)
            {
                LogB.Information("Created splashWin.FakeButton");
            }
            else
            {
                LogB.Warning("NOT Created splashWin.FakeButton, si es bloqueja, posar aquí un while (mentre no estigui creat)");
            }

            splashWin.FakeButtonCancel.Clicked += new EventHandler(on_find_version_cancelled);

            LogB.Debug("--3--");
        } catch {
            LogB.Warning("Problem with splash win");
        }

        versionAvailable = Server.Ping(true, progName, UtilAll.ReadVersion());         //doInsertion

        LogB.Debug("--4--");
        splashShowButton = false;
        LogB.Information(" version:  ", versionAvailable);
        LogB.Debug("\n--5--");
        //pingEnd = true;
        LogB.Debug("--6--");
    }
Beispiel #3
0
    public bool PostCrashLog(string email, string comments)
    {
        string filePath = UtilAll.GetLogFileOld();

        if (!File.Exists(filePath))
        {
            this.ResultMessage = Catalog.GetString("Could not send file.\nIt does not exist.");
            return(false);
        }

        if (comments != null && comments != "")
        {
            Util.InsertTextBeginningOfFile(
                "----------\nUser comments:\n" + comments + "\n----------\n", filePath);
        }

        // Create a request using a URL that can receive a post.
        WebRequest request = WebRequest.Create(serverUrl + "/backtrace/" + UtilAll.ReadVersion() + "-" + email);

        // Set the Method property of the request to POST.
        request.Method = "POST";

        // Create POST data and convert it to a byte array.
        byte[] byteArray = readFile(filePath);

        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";

        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;

        // Get the request stream.
        Stream dataStream;

        try {
            dataStream = request.GetRequestStream();
        } catch {
            LogB.Warning("Error sending datastream");
            this.ResultMessage = Catalog.GetString("Could not send file.") + "\n" +
                                 string.Format(Catalog.GetString("You are not connected to the Internet\nor {0} server is down."),
                                               serverUrl);
            return(false);
        }

        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);

        // Close the Stream object.
        dataStream.Close();

        // Get the response.
        WebResponse response;

        try {
            response = request.GetResponse();
        } catch {
            LogB.Warning("Error getting response");
            this.ResultMessage = Catalog.GetString("Could not send file.") + "\n" +
                                 string.Format(Catalog.GetString("You are not connected to the Internet\nor {0} server is down."),
                                               serverUrl);
            return(false);
        }

        // Display the status.
        LogB.Information(((HttpWebResponse)response).StatusDescription);

        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();

        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);

        // Read the content.
        string responseFromServer = reader.ReadToEnd();

        // Display the content.
        LogB.Information(responseFromServer);

        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();


        JsonValue result   = JsonValue.Parse(responseFromServer);
        string    crash_id = result["crash_id"];

        LogB.Information("crash_id: ", crash_id);

        this.ResultMessage = Catalog.GetString("Log sent. Thank you.");
        return(true);
    }
Beispiel #4
0
    protected void sqliteThings()
    {
        bool crashedBefore = checkIfChronojumpExitAbnormally();

        if (crashedBefore)
        {
            if (chronojumpIsExecutingNTimes())
            {
                quitNow = true;
                LogB.Error("Chronojump is already running.");
                Application.Quit();
                return;
            }
            else
            {
                chronojumpCrashedBefore();
            }
        }

        //print version of chronojump
        progVersion = UtilAll.ReadVersion();

        LogB.Information("Chronojump version: {0}", progVersion);

        //to store user videos and photos
        Util.CreateMultimediaDirsIfNeeded();
        //to store encoder data and graphs
        UtilEncoder.CreateEncoderDirIfNeeded();

//TODO: when a session is deleted, encoder data has to be deleted, also multimedia videos, I suppose. Show message to user warning about it
//TODO: encoder weight auto written depending on person loaded, and changes if it changes person or weight


        //move database to new location if chronojump version is before 0.7
        moveDatabaseToNewLocationIfNeeded();

        LogB.Information("move? ended");

        splashMessageChange(1);          //checking database

        /*
         * splashMessage = "pre-connect";
         * needUpdateSplashMessage = true;
         * Console.ReadLine();
         */

        Sqlite.CreateDir();
        bool defaultDBLocation = Sqlite.Connect();

        LogB.SQL("sqlite connected");

        /*
         * splashMessage = "post-connect" + defaultDBLocation.ToString();
         * needUpdateSplashMessage = true;
         * Console.ReadLine();
         */

        //Chech if the DB file exists
        if (!Sqlite.CheckTables(defaultDBLocation))
        {
            LogB.SQL(Catalog.GetString("no tables, creating ..."));

            creatingDB = true;
            splashMessageChange(2);              //creating database



            /*
             * splashMessage = "pre-create";
             * needUpdateSplashMessage = true;
             * Console.ReadLine();
             */



            Sqlite.CreateDir();
            Sqlite.CreateFile();
            //Sqlite.CreateFile(defaultDBLocation);



            /*
             * splashMessage = "post-create";
             * needUpdateSplashMessage = true;
             * Console.ReadLine();
             */



            createRunningFileName(runningFileName);
            Sqlite.CreateTables(false);             //not server
            creatingDB = false;
        }
        else
        {
            LogB.SQL("doing backup");
            //backup the database
            Util.BackupDirCreateIfNeeded();

            splashMessageChange(3);              //making db backup

            Util.BackupDatabase();
            LogB.SQL("made a database backup");              //not compressed yet, it seems System.IO.Compression.DeflateStream and
            //System.IO.Compression.GZipStream are not in mono


            if (!Sqlite.IsSqlite3())
            {
                bool ok = Sqlite.ConvertFromSqlite2To3();
                if (!ok)
                {
                    LogB.Error("problem with sqlite");
                    //check (spanish)
                    //http://mail.gnome.org/archives/chronojump-devel-list/2008-March/msg00011.html
                    string errorMessage = Catalog.GetString("Failed database conversion, ensure you have libsqlite3-0 installed. \nIf problems persist ask in chronojump-list");
                    errorMessage += "\n\n" + string.Format(Catalog.GetString("If you have no data on your database (you just installed Chronojump), you can fix this problem deleting this file: {0}"),
                                                           Util.GetDatabaseDir() + Path.DirectorySeparatorChar + "chronojump.db") +
                                    "\n" + Catalog.GetString("And starting Chronojump again.");
                    LogB.Error(errorMessage);
                    messageToShowOnBoot += errorMessage;
                    chronojumpHasToExit  = true;
                    return;
                }
                Sqlite.Connect();
            }

            splashMessageChange(4);              //updating DB
            updatingDB = true;

            if (Sqlite.ChangeDjToDJna())
            {
                messageToShowOnBoot += Catalog.GetString("All DJ jumps have been renamed as 'DJna' (Drop Jumps with No Arms).") + "\n\n" +
                                       Catalog.GetString("If your Drop Jumps were executed using the arms, please rename them manually as 'DJa'.") + "\n";
            }

            bool softwareIsNew = Sqlite.ConvertToLastChronojumpDBVersion();
            updatingDB = false;


            if (!softwareIsNew)
            {
                //Console.Clear();
                string errorMessage = string.Format(Catalog.GetString("Sorry, this Chronojump version ({0}) is too old for your database."), progVersion) + "\n" +
                                      Catalog.GetString("Please update Chronojump") + ":\n";
                errorMessage += "http://chronojump.org";
                //errorMessage += "\n\n" + Catalog.GetString("Press any key");
                LogB.Error(errorMessage);
                messageToShowOnBoot += errorMessage;
                chronojumpHasToExit  = true;
            }

            LogB.Information(Catalog.GetString("tables already created"));


            //check for bad Rjs (activate if program crashes and you use it in the same db before v.0.41)
            //SqliteJump.FindBadRjs();

            createRunningFileName(runningFileName);
        }



        //splashMessageChange(5);  //check for new version
        splashMessageChange(5);          //connecting to server

        messageToShowOnBoot += recuperateBrokenEvents();

        //connect to server to Ping
        versionAvailable = "";

        /*
         * pingStart = false;
         * pingEnd = false;
         *
         * // disable server connection on start until server is not working on windows again
         * bool connectServerAtStart = false;
         * if(connectServerAtStart) {
         *      thread = new Thread(new ThreadStart(findVersion));
         *      GLib.Idle.Add (new GLib.IdleHandler (PulseGTKPing));
         *      thread.Start();
         *
         *      //wait until pinging process start
         *      while(! pingStart) {
         *      }
         * }
         * else
         *      on_find_version_cancelled(new object(), new EventArgs());
         */
        versionAvailable = Constants.ServerOffline;


        //doing ping using json methods

        /*
         * temporarily disabled on start
         * string machineID = SqlitePreferences.Select("machineID", false);
         * Json js = new Json();
         * bool success = js.Ping(UtilAll.GetOS(), progVersion, machineID);
         * if(success)
         *      LogB.Information(js.ResultMessage);
         * else
         *      LogB.Error(js.ResultMessage);
         */


        allSQLCallsDoneOnSqliteThingsThread = false;

        //wait until pinging ends (or it's cancelled)
        //while(! pingEnd) {
        //}

        Sqlite.Open();

        string versionAvailableKnown = SqlitePreferences.Select("versionAvailable", true);

        if (versionAvailable != Constants.ServerOffline && new Version(versionAvailable) > new Version(progVersion))
        {
            //check if available version is higher than known available version
            Version versionAvailableAsV = new Version(versionAvailable);

            Version versionAvailableKnownAsV;
            bool    updateKnownVersion = false;
            if (versionAvailableKnown == "")
            {
                updateKnownVersion = true;
            }
            else
            {
                versionAvailableKnownAsV = new Version(versionAvailableKnown);
                if (versionAvailableAsV > versionAvailableKnownAsV)
                {
                    updateKnownVersion = true;
                }
            }

            if (updateKnownVersion)
            {
                //is the first time we know about this new version
                //just write on db and show message to user
                SqlitePreferences.Update(Constants.PrefVersionAvailable, versionAvailable, true);
                versionAvailableKnown = versionAvailable;
                messageToShowOnBoot  += string.Format(Catalog.GetString(
                                                          "\nNew Chronojump version available on website.\nYour Chronojump version is: {1}"),
                                                      versionAvailable, progVersion) + "\n\n" +
                                        Catalog.GetString("Please, update to new version.") + "\n";
            }
        }


        //if chronojump chrashed before
        if (crashedBefore)
        {
            if (versionAvailableKnown.Length > 0 && new Version(versionAvailableKnown) > new Version(progVersion))
            {
                messageToShowOnBoot += "\n" + Catalog.GetString("Chronojump crashed before.") + "\n" +
                                       Catalog.GetString("Please, update to new version: ") + versionAvailableKnown + "\n";
            }
            else
            {
                messageToShowOnBoot += messageCrashedBefore;
                //SqlitePreferences.Update("videoOn", "False", true);
            }
        }


        splashMessageChange(6);          //preparing main window


        //start as "simulated"
        SqlitePreferences.Update("simulated", "True", true);         //dbcon opened

        Sqlite.Close();

        allSQLCallsDoneOnSqliteThingsThread = true;
        LogB.SQL("all SQL calls done on sqliteThings thread");

        UtilAll.IsWindows();            //only as additional info here

        //Application.Init();

        needEndSplashWin = true;
    }