Connect() 공개 정적인 메소드

public static Connect ( ) : bool
리턴 bool
    private static void updateDatabase(string databaseFile)
    {
        StaticClassState classOriginalState = new StaticClassState(typeof(Sqlite));

        classOriginalState.readAttributes();

        classOriginalState.writeAttributes(Sqlite.InitialState);

        Sqlite.CurrentVersion = "0";
        Sqlite.setSqlFilePath(databaseFile);
        Sqlite.Connect();

        Sqlite.ConvertToLastChronojumpDBVersion();

        classOriginalState.writeAttributes(classOriginalState);
        Sqlite.Connect();
    }
예제 #2
0
    public static void Main(string [] args)
    {    /*
          *     bool timeLogPassedOk = Log.Start(args);
          *     Log.WriteLine(string.Format("Time log passed: {0}", timeLogPassedOk.ToString()));
          *     Log.WriteLine(string.Format("Client database option 1 in ... " + Util.GetDatabaseDir()));
          *     Log.WriteLine(string.Format("Client database option 2 in ... " + Util.GetDatabaseTempDir()));
          */
        LogSync.Initialize();
        //1.4.10
        Log.Start();
        LogB.Debugging = true;         //now LogB.Debug will be shown. Also there will be thread info on Warning, Error, Information
        if (args.Length > 0 && args[0] == "printAll")
        {
            LogB.PrintAllThreads = true;
        }

        var envPath  = Environment.GetEnvironmentVariable("PATH");
        var rBinPath = "";

        baseDirectory = Util.GetPrefixDir();

        /*
         * location of gtkrc file
         * DISABLED tight now because on windows there are inestabilities on jumps results
         * and on Mode menu
         */
        //Rc.AddDefaultFile (Util.GetThemeFile());
        //LogB.Information("gtk theme:" + Util.GetThemeFile());

        if (UtilAll.IsWindows())
        {
            //Environment.SetEnvironmentVariable ("R_HOME", RelativeToPrefix ("library"));
            //rBinPath = RelativeToPrefix ("lib");
            //rBinPath = RelativeToPrefix ("library");
            //var rPath = System.Environment.Is64BitProcess ? @"C:\Program Files\R\R-3.0.2\bin\x64" : @"C:\Program Files\R\R-3.0.2\bin\i386";
            string x64   = "bin" + System.IO.Path.DirectorySeparatorChar + "x64";
            string i386  = "bin" + System.IO.Path.DirectorySeparatorChar + "i386";
            var    rPath = System.Environment.Is64BitProcess ?
                           System.IO.Path.Combine(baseDirectory, x64) : System.IO.Path.Combine(baseDirectory, i386);

            if (Directory.Exists(rPath) == false)
            {
                LogB.Error("Could not found the specified path to the directory containing R.dll: ", rPath);
                throw new DirectoryNotFoundException(string.Format("Could not found the specified path to the directory containing R.dll: {0}", rPath));
            }

            var newPath = string.Format("{0}{1}{2}", rPath, System.IO.Path.PathSeparator, envPath);
            LogB.Information("newPath:", newPath);

            System.Environment.SetEnvironmentVariable("PATH", newPath);
            LogB.Information("path:", System.Environment.GetEnvironmentVariable("PATH"));

            //use this because we don't want to look at the registry
            //we don't want to force user to install R
            Environment.SetEnvironmentVariable("R_HOME", baseDirectory);
            LogB.Information("R_HOME:", baseDirectory);
        }
        else
        {
            switch (UtilAll.GetOSEnum())
            {
            case UtilAll.OperatingSystems.MACOSX:
                LogB.Information(Environment.GetEnvironmentVariable("R_HOME"));
                rBinPath = "/Library/Frameworks/R.Framework/Libraries";
                Environment.SetEnvironmentVariable("R_HOME", "/Library/Frameworks/R.Framework/Resources");
                Environment.SetEnvironmentVariable("PATH", rBinPath + Path.PathSeparator + envPath);
                LogB.Information("environments");
                LogB.Information(Environment.GetEnvironmentVariable("R_HOME"));
                LogB.Information(Environment.GetEnvironmentVariable("PATH"));

                //Gstreamer stuff
                string prefix = "/Applications/Chronojump.app/Contents/Home/";
                Environment.SetEnvironmentVariable("GST_PLUGIN_PATH", prefix + "lib/gstreamer-0.10");
                Environment.SetEnvironmentVariable("GST_PLUGIN_SYSTEM_PATH", prefix + "lib/gstreamer-0.10");
                Environment.SetEnvironmentVariable("GST_PLUGIN_SCANNER_PATH", prefix + "lib/gstreamer-0.10/gst-plugin-scanner");
                break;

            case UtilAll.OperatingSystems.LINUX:
                rBinPath = @"/usr/lib/R/lib";
                Environment.SetEnvironmentVariable("R_HOME", @"/usr/lib/R");
                Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);
                break;
            }
        }

        LogB.Information("Platform:" + Environment.OSVersion.Platform);

        LogB.Information("baseDir0:", System.AppDomain.CurrentDomain.BaseDirectory);
        LogB.Information("baseDir1:", baseDirectory);
        LogB.Information("envPath+rBinPath:", envPath + Path.PathSeparator + rBinPath);


        //UtilCSV.ReadValues("/tmp/chronojump-encoder-graph-input-multi.csv");

        if (UtilAll.IsWindows())
        {
            Environment.SetEnvironmentVariable("GST_PLUGIN_PATH", RelativeToPrefix("lib\\gstreamer-0.10"));
        }

        //this call has to be done to chronojump.prg
        //chronojump.prg createBlankDB
        //this creates a blank database and exists.
        //Then new user will have an updated database without the need of creating in
        if (args.Length > 0 && args[0] == "createBlankDB")
        {
            createBlankDB();
            Environment.Exit(1);
        }

        if (args.Length > 0 && args[0] == "createBlankDBServer")
        {
            createBlankDBServer();
            Environment.Exit(1);
        }


        string language = "";

        if (File.Exists(System.IO.Path.Combine(Util.GetDatabaseDir(), "chronojump.db")))
        {
            try {
                Sqlite.Connect();

                /*
                 * chronojump 1.5.2 converts DB 1.24 to 1.25 changing language to ""
                 * but this operation is done later (on sqliteThings)
                 * We need here! to define the language from the beginning
                 * so we use language = "" if version is prior to 1.25
                 */
                string currentDBVersion       = SqlitePreferences.Select("databaseVersion", false);
                double currentDBVersionDouble = Convert.ToDouble(Util.ChangeDecimalSeparator(currentDBVersion));
                if (currentDBVersionDouble < Convert.ToDouble(Util.ChangeDecimalSeparator("1.25")))
                {
                    language = "";
                }
                else
                {
                    language = SqlitePreferences.Select("language", false);
                }

                Sqlite.DisConnect();

                if (language != "")
                {
                    //convert pt-BR to pt_BR
                    if (language.Contains("-"))
                    {
                        language = language.Replace("-", "_");
                    }

                    Environment.SetEnvironmentVariable("LANGUAGE", language);              //works
#if OSTYPE_WINDOWS
                    g_setenv("LANGUAGE", language, true);
#endif
                }
            }
            catch {
                LogB.Warning("Problem reading language on start");
            }
        }

        Catalog.Init("chronojump", System.IO.Path.Combine(Util.GetPrefixDir(), "share/locale"));

        new ChronoJump(args);
    }
예제 #3
0
    protected void sqliteThings()
    {
        configChronojump = new Config();
        configChronojump.Read();

        bool badExit = checkIfChronojumpExitAbnormally();

        if (badExit)
        {
            if (chronojumpIsExecutingNTimes())
            {
                messageToShowOnBoot += Catalog.GetString("Chronojump is already running") + "\n\n" +
                                       Catalog.GetString("Chronojump will exit now.");

                chronojumpHasToExit = true;
                quitNowCjTwoTimes   = true;
                LogB.Error("Chronojump is already running.");

                return;
            }
            else
            {
                chronojumpCrashedBefore();
            }
        }

        //print version of chronojump
        progVersion = BuildInfo.chronojumpVersion;

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

        //to store user videos and photos
        Util.CreateMultimediaDirsIfNeeded();

        //to store (encoder, force sensor, run encoder) data and graphs
        UtilEncoder.CreateEncoderDirIfNeeded();
        Util.CreateForceSensorDirIfNeeded();
        Util.CreateRaceAnalyzerDirIfNeeded();

//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 = "";
        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();

//TODO: fix this to the new code

        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 (badExit)
        {
            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();

        // Chronojump sqlite is in an initialized state, let's keep the Sqlite state here
        // to be re-used
        Sqlite.saveClassState();

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

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

        //Application.Init();

        needEndSplashWin = true;
    }