#include "playlist_manager.h" #include "spi_master.h" #include PlaylistManager::PlaylistManager() { SPIMaster::enable_sd(); current_rfid_tag_id = String(""); /* File root = SD.open("/"); while(File entry = root.openNextFile()) { if (entry.isDirectory()) { String filename("/"); filename.concat(entry.name()); if (!filename.startsWith("/.")) { Serial.println(filename); dirs.push_back(filename); } } } root.close(); */ if (!SD.exists("/_mapping.txt")) { Serial.println("WARNING: /_mapping.txt not found!"); } else { map.clear(); File f = SD.open("/_mapping.txt"); Serial.println(" Reading /_mapping.txt..."); while (f.available()) { char buffer[512]; size_t pos = f.readBytesUntil('\n', buffer, 511); buffer[pos] = '\0'; String data = buffer; uint8_t eq = data.indexOf('='); if (eq>0 && eq%s\n", rfid_id.c_str(), folder.c_str()); map[rfid_id] = folder; /*if (folder.charAt(0)=='/') { bool found=false; for (String f: dirs) { if (f.equals(folder)) { found = true; break; } } if (!found) { Serial.printf("WARNING: Found mapping for RFID id %s which maps to non-existing folder %s!\n", rfid_id.c_str(), folder.c_str()); } }*/ } } f.close(); } } Playlist PlaylistManager::get_playlist(String rfid_id) { if (rfid_id.equals(current_rfid_tag_id)) { return current_playlist; } else { if (map.count(rfid_id)==0) { Serial.printf("No known playlist for id %s.\n", rfid_id); return current_playlist; } else { current_playlist = Playlist(rfid_id); String path = map[rfid_id]; if (path.startsWith("/")) { File dir = SD.open(path); while(File entry = dir.openNextFile()) { String filename = entry.name(); String ext = filename.substring(filename.length()-4); if (!entry.isDirectory() && !filename.startsWith(".") && ext.equals(".mp3")) { Serial.printf("Adding %s to the list of files\n", (path + "/" + filename).c_str()); current_playlist.add_file(path + "/" + filename); } entry.close(); } dir.close(); } current_playlist.sort(); current_rfid_tag_id = rfid_id; return current_playlist; } } } void PlaylistManager::set_audio_current_time(uint32_t time) { audio_current_time = time; } bool PlaylistManager::has_playlist(String rfid_id) { return map.count(rfid_id) == 1; }