internal void ImportCommodityLocalizations(DataSet DataNames, enLocalisationImportType importType = enLocalisationImportType.onlyNew)
{
DBConnector lDBCon = null;
dsEliteDB Data;
Dictionary<String, Int32> foundLanguagesFromFile = new Dictionary<String, Int32>();
String sqlString;
Int32 currentSelfCreatedIndex;
Int32 Counter = 0;
Boolean idColumnFound = false;
String BaseName;
DataRow[] Commodity;
Data = new dsEliteDB();
try
{
lDBCon = new DBConnector(Program.DBCon.ConfigData, true);
// gettin' some freaky performance
lDBCon.Execute("set global innodb_flush_log_at_trx_commit=2");
sqlString = "select min(id) As min_id from tbCommodity";
lDBCon.Execute(sqlString, "minID", DataNames);
if(Convert.IsDBNull(DataNames.Tables["minID"].Rows[0]["min_id"]))
currentSelfCreatedIndex = -1;
else
{
currentSelfCreatedIndex = ((Int32)DataNames.Tables["minID"].Rows[0]["min_id"]) - 1;
if(currentSelfCreatedIndex >= 0)
currentSelfCreatedIndex = -1;
}
lDBCon.TableRead("select * from tbLanguage", Data.tblanguage);
lDBCon.TableRead("select * from tbCommodityLocalization", Data.tbcommoditylocalization);
lDBCon.TableRead("select * from tbCommodity", Data.tbcommodity);
if(DataNames.Tables["Names"] != null)
{
sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count });
// first check if there's a new language
foreach (DataColumn LanguageFromFile in DataNames.Tables["Names"].Columns)
{
if(!LanguageFromFile.ColumnName.Equals("id", StringComparison.InvariantCultureIgnoreCase))
{
DataRow[] LanguageName = Data.tblanguage.Select("language = " + DBConnector.SQLAString(LanguageFromFile.ColumnName));
if(LanguageName.Count() == 0)
{
// add a non existing language
DataRow newRow = Data.tblanguage.NewRow();
int? Wert = DBConvert.To<int?>(Data.tblanguage.Compute("max(id)", ""));
if(Wert == null)
Wert = 0;
Wert += 1;
newRow["id"] = Wert;
newRow["language"] = LanguageFromFile.ColumnName;
Data.tblanguage.Rows.Add(newRow);
foundLanguagesFromFile.Add(LanguageFromFile.ColumnName, (Int32)Wert);
}
else
foundLanguagesFromFile.Add((String)LanguageName[0]["language"], (Int32)LanguageName[0]["id"]);
}
else
idColumnFound = true;
}
// submit changes (tbLanguage)
lDBCon.TableUpdate(Data.tblanguage);
// compare and add the localized names
foreach (DataRow LocalizationFromFile in DataNames.Tables["Names"].AsEnumerable())
{
int? commodityID = null;
if (idColumnFound)
commodityID = DBConvert.To<int?>(LocalizationFromFile["id"]);
if (commodityID == 1)
Debug.Print("Stop");
BaseName = (String)LocalizationFromFile[Program.BASE_LANGUAGE];
if ((commodityID == null) || (commodityID < 0))
{
// no id or selfcreated
Commodity = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName)));
}
else
{
// confirmed commodity with id
Commodity = Data.tbcommodity.Select("id = " + commodityID);
}
if (Commodity.Count() == 0)
{
// completely unknown commodity - add first new entry to "tbCommodities"
DataRow newRow = Data.tbcommodity.NewRow();
newRow["id"] = currentSelfCreatedIndex;
newRow["commodity"] = BaseName;
newRow["is_rare"] = 0;
Data.tbcommodity.Rows.Add(newRow);
currentSelfCreatedIndex -= 1;
// submit changes (tbCommodity)
lDBCon.TableUpdate(Data.tbcommodity);
Commodity = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName)));
}
foreach (KeyValuePair<String, Int32> LanguageFormFile in foundLanguagesFromFile)
{
DataRow[] currentLocalizations = Data.tbcommoditylocalization.Select(" commodity_id = " + Commodity[0]["id"] +
" and language_id = " + LanguageFormFile.Value);
if(currentLocalizations.Count() == 0)
{
// add a new localization
DataRow newRow = Data.tbcommoditylocalization.NewRow();
newRow["commodity_id"] = Commodity[0]["id"];
newRow["language_id"] = LanguageFormFile.Value;
if((String)LocalizationFromFile[LanguageFormFile.Key] == "")
newRow["locname"] = BaseName;
else
newRow["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key];
Data.tbcommoditylocalization.Rows.Add(newRow);
}
else if((importType == enLocalisationImportType.overWriteAll) ||
((importType == enLocalisationImportType.overwriteNonBase) && (LanguageFormFile.Key != Program.BASE_LANGUAGE)))
{
if((String)LocalizationFromFile[LanguageFormFile.Key] != "")
currentLocalizations[0]["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key];
}
}
Counter++;
sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count });
//if((Counter % 50) == 0)
// lDBCon.TableUpdate(Data.tbcommoditylocalization);
}
}
// submit changes
lDBCon.TableUpdate(Data.tbcommoditylocalization);
// gettin' some freaky performance
lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1");
lDBCon.Dispose();
}
catch (Exception ex)
{
if(lDBCon != null)
{
try
{
// reset freaky performance
lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1");
}
catch (Exception) { }
lDBCon.Dispose();
}
throw new Exception("Error while loading commodity names", ex);
}
}