コード例 #1
0
            public static void SaveSongList()
            {
                if (loading)
                {
                    return;
                }

                changes = false;
                songList.Save();
                SetStatus("KFC song list saved.");
            }
コード例 #2
0
        static void Main(string[] args)
        {
            // Arguments

            bool doTextures  = false;
            bool forceReload = false;
            bool forceMeta   = false;

            OptionSet p = new OptionSet()
            {
                { "p|path=", "The {PATH} of KFC directory.",
                  v => Util.SetKfcPath(v) },
                { "t|texture", "Do the texture replacement (which takes a long time).",
                  v => doTextures = v != null },
                { "f|force-reload", "Force reload all songs.",
                  v => forceReload = v != null },
                { "fm|force-meta", "Force reload meta DB and all songs.",
                  v => forceMeta = v != null }
            };

            List <string> extra;

            try
            {
                extra = p.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("AutoLoad: ");
                Console.WriteLine(e.Message);
                return;
            }

            // Welcome message

            Util.ConsoleWrite(@"
  _  __    _  _________      __       
 | |/ /   | ||__   __\ \    / /       
 | ' / ___| |__ | | __\ \  / /____  __
 |  < / __| '_ \| |/ _ \ \/ / _ \ \/ /
 | . \\__ \ | | | | (_) \  / (_) >  <  March 2018. Alpha version
 |_|\_\___/_| |_|_|\___/ \/ \___/_/\_\ Author: NTUMG

");

            // Check if kfc dll exists.
            if (!File.Exists(Util.kfcPath + "soundvoltex.dll"))
            {
                Console.WriteLine("soundvoltex.dll not found! Please choose a valid KFC path.");
                Console.ReadKey();
                return;
            }

            // Check if folders exist.
            if (!Directory.Exists(Util.kfcPath + "KshSongs\\"))
            {
                Directory.CreateDirectory(Util.kfcPath + "KshSongs\\");
            }

            if (!Directory.Exists(Util.kfcPath + "data\\others\\vox\\"))
            {
                Directory.CreateDirectory(Util.kfcPath + "data\\others\\vox\\");
            }

            Util.ClearCache();

            // DB backup (for later restore)
            Util.DbBackup();

            if (forceMeta)
            {
                File.Delete(Util.kfcPath + "data\\others\\meta_usedId.xml");
            }

            SongList.SongList songList = new SongList.SongList();

            Util.ConsoleWrite("Loading from KshSongs...");
            try
            {
                if (!forceReload)
                {
                    songList.LoadFromDB();
                }

                songList.LoadFromKshSongs();
            }
            catch (Exception e)
            {
                Util.ConsoleWrite("*** Exception encountered while loading from KshSongs. ***");
                Util.ConsoleWrite(e.Message);

                Util.DbRestore();

                Console.ReadKey();

                return;
            }

            Util.ConsoleWrite("Saving song...");

            try
            {
                // The KFC data could be corrupted here even if the exceptions are caught,
                // so the music_db and metaDb should be removed before abort.
                songList.Save();
            }
            catch (Exception e)
            {
                Util.ConsoleWrite("*** Fatal: Exception encountered while saving ***");
                Util.ConsoleWrite(e.Message);

                File.Delete(Util.kfcPath + "\\data\\others\\music_db.xml");
                File.Delete(Util.kfcPath + "\\data\\others\\meta_usedId.xml");

                Util.ConsoleWrite(@"*** Please force reload with '--f' ***");

                Console.ReadKey();

                return;
            }

            Util.ClearCache();

            if (doTextures)
            {
                Util.ConsoleWrite("Saving texture... (This should took a while)");

                try
                {
                    // Chart data should be fine regardless of the result of SaveTexture.
                    // No need to erase the DBs in exceptions.
                    songList.SaveTexture();
                }
                catch (Exception e)
                {
                    Util.ConsoleWrite("*** Exception encountered while saving texture ***");
                    Util.ConsoleWrite(e.Message);
                    Util.ConsoleWrite("The charts will still be saved. (Without the custom jackets)");
                }
            }

            Util.ConsoleWrite(@"
/////////////////////////////////////////////////
///                                           ///
/// Loading Done! Press any key to proceed... ///
///                                           ///
/////////////////////////////////////////////////
");
            Console.ReadKey();
        }