void FileBrowser::onChangeCartridge(const string &path) { string filename; if(QDir(path).exists()) filename = resolveFilename(path); else filename = path; string info; string image = sprint(nall::basename(filename), ".png"); string patch = sprint(filepath(nall::basename(filename), config().path.patch), ".ups"); if(file::exists(filename)) { if(striend(filename, ".sfc")) { Cartridge::Information cartinfo; if(cartridge.information(filename, cartinfo)) { info << "<small><table>"; info << "<tr><td><b>Title: </b></td><td>" << cartinfo.name << "</td></tr>"; info << "<tr><td><b>Region: </b></td><td>" << cartinfo.region << "</td></tr>"; info << "<tr><td><b>ROM: </b></td><td>" << cartinfo.romSize * 8 / 1024 / 1024 << "mbit</td></tr>"; info << "<tr><td><b>RAM: </b></td><td>"; cartinfo.ramSize ? info << cartinfo.ramSize * 8 / 1024 << "kbit</td></tr>" : info << "None</td></tr>"; info << "</table></small>"; } } else if(striend(filename, ".st")) { unsigned size = file::size(filename); info << "<small><table>"; info << "<tr><td><b>ROM: </b></td><td>" << size * 8 / 1024 / 1024 << "mbit</td></tr>"; info << "</table></small>"; } } if(info == "") info = "<small><font color='#808080'>No preview available</font></small>"; previewInfo->setText(info); previewImage->setStyleSheet(string() << "background: url('" << image << "') center left no-repeat;"); previewApplyPatch->setVisible(file::exists(patch)); }
string DiskBrowser::queryImageInformation() { string text; string filename; if(currentFilename(filename) == true) { if(striend(filename, ".sfc") || striend(filename, ".smc")) { unsigned size = file::size(filename); text << "<b>" << notdir(nall::basename(filename)) << "</b>"; text << "<small><table cellspacing='5'>"; text << "<tr><td><b>ROM size:</b></td><td>" << size * 8 / 1024 / 1024 << "mbit</td></tr>"; text << "</table></small>"; } } return text; }
Reader::Type Reader::detect(const char *fn, bool inspectheader) { file fp; if(!fp.open(fn, file::mode_read)) return Unknown; uint8_t p[8]; memset(p, 0, sizeof p); fp.read(p, 8); fp.close(); if(inspectheader == true) { //inspect file header to determine type if(p[0] == 0x1f && p[1] == 0x8b && p[2] == 0x08 && p[3] <= 0x1f) return GZIP; if(p[0] == 0x50 && p[1] == 0x4b && p[2] == 0x03 && p[3] == 0x04) return ZIP; if(p[0] == 0x4a && p[1] == 0x4d && p[2] == 0x41 && p[3] == 0x00 && p[4] == 0x4e) return JMA; } else { //check file extension to determine type if(striend(fn, ".gz")) return GZIP; if(striend(fn, ".zip") || striend(fn, ".z")) return ZIP; if(striend(fn, ".jma")) return JMA; } return Normal; }
string FileBrowser::resolveFilename(const string &path) { if(QDir(path).exists()) { string filter; if(striend(path, ".sfc")) filter = "*.sfc"; if(striend(path, ".bs" )) filter = "*.bs"; if(striend(path, ".st" )) filter = "*.st"; if(striend(path, ".gb" )) filter = "*.gb"; if(striend(path, ".sgb")) filter = "*.sgb"; if(striend(path, ".gbc")) filter = "*.gbc"; if(filter == "") return ""; QDir directory(path); directory.setNameFilters(QStringList() << filter); QStringList list = directory.entryList(QDir::Files | QDir::NoDotAndDotDot); if(list.count() == 1) return string() << path << "/" << list[0].toUtf8().constData(); return ""; } else { return path; } }
void FileBrowser::onAcceptCartridge(const string &path) { string filename; if(QDir(path).exists()) { filename = resolveFilename(path); } else { filename = path; } if(file::exists(filename)) { close(); config().path.current.cartridge = fileSystemModel->rootPath().toUtf8().constData(); if(cartridgeMode == LoadDirect) { config().path.current.filter = filterBox->currentIndex(); string filter = filterBox->currentText().toUtf8().constData(); if(0); //file extension detection else if(striend(filename, ".sfc")) acceptNormal(filename); else if(striend(filename, ".bs")) acceptBsx(filename); else if(striend(filename, ".st")) acceptSufamiTurbo(filename); else if(striend(filename, ".gb")) acceptSuperGameBoy(filename); else if(striend(filename, ".sgb")) acceptSuperGameBoy(filename); else if(striend(filename, ".gbc")) acceptSuperGameBoy(filename); //filter detection else if(strbegin(filter, "SNES cartridges")) acceptNormal(filename); else if(strbegin(filter, "BS-X cartridges")) acceptBsx(filename); else if(strbegin(filter, "Sufami Turbo cartridges")) acceptSufamiTurbo(filename); else if(strbegin(filter, "Game Boy cartridges")) acceptSuperGameBoy(filename); //fallback behavior else acceptNormal(filename); } else if(cartridgeMode == LoadBase) { loaderWindow->selectBaseCartridge(filename); } else if(cartridgeMode == LoadSlot1) { loaderWindow->selectSlot1Cartridge(filename); } else if(cartridgeMode == LoadSlot2) { loaderWindow->selectSlot2Cartridge(filename); } } }