public static bool LoadCDB(string dir, bool overwrite, bool clearData = false)
        {
            if (!File.Exists(dir))
            {
                return(false);
            }

            if (clearData)
            {
                CardData.Clear();
            }

            SqliteConnection connection = new SqliteConnection("Data Source=" + dir);
            List <string[]>  datas      = new List <string[]>();
            List <string[]>  texts      = new List <string[]>();

            try
            {
                connection.Open();
                datas = SQLiteCommands.LoadData(connection);
                texts = SQLiteCommands.LoadText(connection);
                connection.Close();
            }
            catch (Exception ex)
            {
                connection.Close();
                return(false);
            }

            foreach (string[] row in datas)
            {
                if (overwrite)
                {
                    CardManager.UpdateOrAddCard(new CardInfos(row));
                }
                else
                {
                    if (!CardManager.ContainsCard(Int32.Parse(row[0])))
                    {
                        CardManager.UpdateOrAddCard(new CardInfos(row));
                    }
                }
            }
            foreach (string[] row in texts)
            {
                if (CardManager.ContainsCard(Int32.Parse(row[0])))
                {
                    CardManager.GetCard(Int32.Parse(row[0])).SetCardText(row);
                }
            }

            if (File.Exists("setname.txt"))
            {
                LoadSetCodesFromFile(CreateFileStreamFromString(File.ReadAllText("setname.txt")));
            }
            SetCodesStringInit();

            return(true);
        }
        public static bool LoadCDB(string dir, bool overwrite, bool clearData = false)
        {
            logger.Info("Start LOAD CDB {0}", dir);
            LoadPicsFile();

            if (!File.Exists(dir))
            {
                return(false);
            }

            if (clearData)
            {
                CardData.Clear();
            }

            SQLiteConnection connection = new SQLiteConnection("Data Source=" + dir);
            List <string[]>  datas      = new List <string[]>();
            List <string[]>  texts      = new List <string[]>();

            try
            {
                connection.Open();
                datas = SQLiteCommands.LoadData(connection);
                texts = SQLiteCommands.LoadText(connection);
                connection.Close();
            }
            catch (Exception ex)
            {
                logger.Error("LOADCDB :" + ex.ToString());
                connection.Close();
                return(false);
            }

            progress = 0;
            total    = datas.Count + texts.Count;
            foreach (string[] row in datas)
            {
                if (overwrite)
                {
                    CardManager.UpdateOrAddCard(new CardInfos(row));
                }
                else
                {
                    if (!CardManager.ContainsCard(int.Parse(row[0])))
                    {
                        CardManager.UpdateOrAddCard(new CardInfos(row));
                    }
                }

                if (!CheckPicsLoaded(Convert.ToInt32(row[0])))
                {
                    DownloadPics(row[0]);
                }
                else
                {
                    progress++;
                    Application.Current.Dispatcher.Invoke(() => LoadingProgress?.Invoke(progress, total));
                }
            }
            foreach (string[] row in texts)
            {
                progress++;
                Application.Current.Dispatcher.Invoke(() => LoadingProgress?.Invoke(progress, total));

                if (CardManager.ContainsCard(int.Parse(row[0])))
                {
                    CardManager.GetCard(int.Parse(row[0])).SetCardText(row);
                }
            }

            if (File.Exists(Path.Combine(FormExecution.path, "BattleCityAlpha", "strings.conf")))
            {
                LoadSetCodesFromFile(CreateFileStreamFromString(File.ReadAllText(Path.Combine(FormExecution.path, "BattleCityAlpha", "strings.conf"))));
            }
            SetCodesStringInit();

            while (progress != total)
            {
                Thread.Sleep(500);
            }
            Application.Current.Dispatcher.Invoke(() => LoadingFinished?.Invoke());

            return(true);
        }