VISIT_COLUMN_CATEG_OTHER " REAL"
#endif /* TIZEN_ENGINEER_MODE */
+#define __WIFI_APS_MAP_TABLE_COLUMNS \
+ WIFI_APS_MAP_COLUMN_MAC " TEXT NOT NULL UNIQUE, "\
+ WIFI_APS_MAP_COLUMN_NETWORK_NAME " TEXT NOT NULL, "\
+ WIFI_APS_MAP_COLUMN_INSERT_TIME " timestamp"
+
ctx::VisitDetector::VisitDetector(time_t startScan, PlaceRecogMode energyMode, bool testMode) :
__testMode(testMode),
__locationLogger(testMode ? nullptr : new LocationLogger(this)),
__listeners.push_back(__locationLogger);
__listeners.push_back(__wifiLogger);
- __dbCreateTable();
+ __dbCreateTables();
__wifiLogger->startLogging();
}
void ctx::VisitDetector::__detectEntranceOrDeparture(std::shared_ptr<ctx::Frame> frame)
{
__entranceToPlace ? __detectDeparture(frame) : __detectEntrance(frame);
+ if (__entranceToPlace) {
+ for (MacEvent e : *__currentMacEvents) {
+ __wifiAPsMap.insert(std::pair<std::string, std::string>(e.mac, e.networkName));
+ }
+ }
}
bool ctx::VisitDetector::__isDisjoint(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
__detectedVisits->push_back(visit);
} else {
__dbInsertVisit(visit);
+ __dbInsertWifiAPsMap(visit);
}
// cleaning
return __detectedVisits;
}
-void ctx::VisitDetector::__dbCreateTable()
+void ctx::VisitDetector::__dbCreateTables()
{
bool ret = __dbManager->createTable(0, VISIT_TABLE, __VISIT_TABLE_COLUMNS);
- _D("db: visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+ _D("db: Visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+
+ ret = __dbManager->createTable(0, WIFI_APS_MAP_TABLE, __WIFI_APS_MAP_TABLE_COLUMNS);
+ _D("db: Wifi AP Map Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
}
void ctx::VisitDetector::__putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data)
return ret;
}
+int ctx::VisitDetector::__dbInsertWifiAPsMap(Visit visit)
+{
+ std::stringstream query;
+ time_t now = time(nullptr);
+ const char* separator = " ";
+ query << "BEGIN TRANSACTION; \
+ REPLACE INTO " WIFI_APS_MAP_TABLE " \
+ ( " WIFI_APS_MAP_COLUMN_MAC ", " WIFI_APS_MAP_COLUMN_NETWORK_NAME ", " WIFI_APS_MAP_COLUMN_INSERT_TIME " ) \
+ VALUES";
+ for (Mac mac : *visit.macSet) {
+ // TODO: Add protection from SQL injection in network name!!
+ query << separator << "( '" << mac << "', '" << __wifiAPsMap.find(mac)->second << "', '" << now << "' )";
+ separator = ", ";
+ }
+ __wifiAPsMap.clear();
+ query << "; \
+ END TRANSACTION;";
+ bool ret = __dbManager->execute(0, query.str().c_str(), NULL);
+ _D("DB Wifi APs map insert request: %s", ret ? "SUCCESS" : "FAIL");
+ return ret;
+}
+
void ctx::VisitDetector::onNewLocation(LocationEvent locationEvent)
{
_D("");
private:
bool __testMode;
+ std::map<std::string, std::string> __wifiAPsMap;
std::shared_ptr<Visits> __detectedVisits; // only used in test mode
LocationLogger *__locationLogger;
WifiLogger *__wifiLogger;
void __processCurrentLogger();
/* DATABASE */
- void __dbCreateTable();
+ void __dbCreateTables();
int __dbInsertVisit(Visit visit);
+ int __dbInsertWifiAPsMap(Visit visit);
void __putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data);
void __putVisitCategsToJson(const Categs &categs, Json &data);