#include "cbleibfitplugin.h" #include #include #include #include #include typedef struct tagMAPPER { QString key; qint16 value; } MAPPER; MAPPER g_ingredientMapper[] = { { "Kilokalorien:", cIngredient::iIngredientCalories }, // { "Kilojoule:", cIngredient::iIngredientJoule }, { "Protein:", cIngredient::iIngredientProtein }, { "Fett:", cIngredient::iIngredientFat }, { "Kohlehydrate:", cIngredient::iIngredientCarbohydrates }, { "davon Zucker:", cIngredient::iIngredientSugar }, { "Ballaststoffe:", cIngredient::iIngredientTotalDietaryFibre }, { "Gesättigte Fettsäuren:", cIngredient::iIngredientSaturatedfattyacids }, { "Einfach ungesättigte Fettsäuren:", cIngredient::iIngredientMonounsaturatedfattyacids }, { "Mehrfach ungesättigte Fettsäuren:", cIngredient::iIngredientPolyunsaturatedfattyacids }, { "Cholesterin:", cIngredient::iIngredientCholesterol }, { "Vitamin A:", cIngredient::iIngredientVitaminARetinol }, { "Vitamin C:", cIngredient::iIngredientVitaminC }, { "Vitamin D:", cIngredient::iIngredientVitaminD }, { "Vitamin E:", cIngredient::iIngredientVitaminEactiv }, { "Vitamin K:", cIngredient::iIngredientVitaminK }, { "Vitamin B1:", cIngredient::iIngredientVitaminB1 }, { "Vitamin B2:", cIngredient::iIngredientVitaminB2 }, { "Vitamin B6:", cIngredient::iIngredientVitaminB6 }, { "Vitamin B12:", cIngredient::iIngredientVitaminB12 }, { "Biotin:", cIngredient::iIngredientBiotin }, { "Folsäure:", cIngredient::iIngredientFolicacid }, { "Niacin:", cIngredient::iIngredientNiacinequivalent }, { "Panthotensäure:", cIngredient::iIngredientPantothenicacid }, { "Calcium (Ca):", cIngredient::iIngredientCalcium }, { "Chlor (Cl):", cIngredient::iIngredientChloride }, { "Kalium (K):", cIngredient::iIngredientPotassium }, { "Magnesium (Mg):", cIngredient::iIngredientMagnesium }, { "Natrium (Na):", cIngredient::iIngredientSodium }, { "Phosphor (P):", cIngredient::iIngredientPhosphorus }, { "Schwefel (S):", cIngredient::iIngredientSulphur }, { "Kupfer (Cu):", cIngredient::iIngredientCopper }, { "Eisen (Fe):", cIngredient::iIngredientIron }, { "Fluor (F):", cIngredient::iIngredientFluoride }, { "Mangan (Mn):", cIngredient::iIngredientManganese }, { "Jod (J):", cIngredient::iIngredientIodide }, { "Zink (Zn):", cIngredient::iIngredientZinc }, { "Alanin:", cIngredient::iIngredientAlanine }, { "Arginin:", cIngredient::iIngredientArginine }, { "Aspargin:", cIngredient::iIngredientAspartid }, { "Asparginsäure:", cIngredient::iIngredientAsparticacid }, { "Cystein:", cIngredient::iIngredientCystine }, { "Glutamin:", cIngredient::iIngredientGlutamid }, { "Glutaminsäure:", cIngredient::iIngredientGlutamicacid }, { "Glycerin:", cIngredient::iIngredientGlycerolandLipoides }, { "Histidin:", cIngredient::iIngredientHistidine }, { "Isoleucin:", cIngredient::iIngredientIsoleucine }, { "Leucin:", cIngredient::iIngredientLeucine }, { "Lysin:", cIngredient::iIngredientLysine }, { "Methionin:", cIngredient::iIngredientMethionine }, { "Phenylalanin:", cIngredient::iIngredientPhenylalanine }, { "Prolin:", cIngredient::iIngredientProline }, { "Serin:", cIngredient::iIngredientSerine }, { "Threonin:", cIngredient::iIngredientThreonine }, { "Tryptophan:", cIngredient::iIngredientTryptophane }, { "Tyrosin:", cIngredient::iIngredientTyrosine }, { "Valin:", cIngredient::iIngredientValine } }; QMap cBleibFitPlugin::detailsCapability() { QMap map; return(map); } //http://www.bleibfit.at/index.php?lebensmittel&food=true&mode=suche&su_begriff=milch QStringList cBleibFitPlugin::search(const QString& szSearch, const QString&) { int z; m_szUrls.clear(); m_szIngredients.clear(); for(z = 0;z < cIngredient::iIngredientMax;z++) m_rValues[z] = -1; QNetworkAccessManager networkManager; QNetworkRequest request(QUrl(QString("http://www.bleibfit.at/index.php?lebensmittel&food=true&mode=suche&su_begriff=") + szSearch)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply* reply = networkManager.get(request); QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); QByteArray szData = reply->readAll(); delete reply; QList szList = szData.split('\n'); for(z = 0;z < szList.count();z++) { QString szLine = QString::fromLatin1(szList.at(z)); if(szLine.contains("")) break; } if(z >= szList.count()) return(QStringList()); for(;z < szList.count();z++) { QString szLine = QString::fromLatin1(szList.at(z)); if(szLine.contains("")) break; } for(;z < szList.count();z++) { QString szLine = QString::fromLatin1(szList.at(z)); if(szLine.contains("")) szURL = QString("http://www.bleibfit.at/")+szURL.left(szURL.indexOf(">")-1); else szURL = ""; } if(szLine.indexOf("")) { szIngredient = szLine.mid(szLine.indexOf("")+3); szIngredient = szIngredient.left(szIngredient.indexOf("")); } if(szIngredient.length()) { m_szIngredients.append(szIngredient); m_szUrls.append(szURL); } z++; } } return(m_szIngredients); } //http://www.bleibfit.at/lebensmittel&food=true&link=buttermilch.phtml?hashID=929deedd0e06667441d7afa4570a12ba bool cBleibFitPlugin::load(qint16 iIndex) { if(iIndex > m_szUrls.count()) return(false); for(int i = 0;i < cIngredient::iIngredientMax;i++) m_rValues[i] = -1; QNetworkAccessManager networkManager; QNetworkRequest request(QUrl(m_szUrls.at(iIndex))); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply* reply = networkManager.get(request); QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); QByteArray szData = reply->readAll(); delete reply; QList szList = szData.split('\n'); for(int z = 0;z < szList.count();z++) { QString szLine = QString::fromLatin1(szList.at(z)); if(szLine.contains("
")) { for(;z < szList.count();z++) { szLine = QString::fromLatin1(szList.at(z)); if(szLine.contains("
")) break; if(szLine.contains("")) { z++; szLine = QString::fromLatin1(szList.at(z)); for(int y = 0;y < (int)sizeof(g_ingredientMapper)/(int)sizeof(MAPPER);y++) { if(szLine.contains(g_ingredientMapper[y].key)) { z++; szLine = QString::fromLatin1(szList.at(z)); int x = szLine.indexOf(">")+1; QString szTmp = szLine.mid(x); szTmp = szTmp.left(szTmp.indexOf("<")); z++; szLine = QString::fromLatin1(szList.at(z)); qreal dFactor = 1; if(szLine.contains(">g<")) dFactor = 1; else if(szLine.contains(">mg<")) dFactor = 1000; else if(szLine.contains(">µg<")) dFactor = 1000000; qreal dValue = szTmp.replace(",", ".").toDouble(); m_rValues[g_ingredientMapper[y].value] = dValue/dFactor; break; } } } } } } m_bLoaded = true; m_iLoadedIndex = iIndex; return(true); } qreal cBleibFitPlugin::value(cIngredient::iIngredient i) { if(m_bLoaded) return(m_rValues[i]); return(-1); } QString cBleibFitPlugin::ingredientName() { if(m_bLoaded) return(m_szIngredients.at(m_iLoadedIndex)); else return(QString("")); } bool cBleibFitPlugin::config() { return(true); } QString cBleibFitPlugin::author() { return("Herwig Birke"); } QString cBleibFitPlugin::company() { return("WIN-DESIGN"); } QString cBleibFitPlugin::link() { return("http://www.windesign.at"); } QString cBleibFitPlugin::description() { return("This is the description."); } QString cBleibFitPlugin::copyright() { return("This is the copyright."); }