path completePathToFile(const path& p,const path& base,const std::string& ext,bool warnOnMismatch) { path result(p); // handle file extension if (!ext.empty()) { result = setFileExtension(p,ext,false,warnOnMismatch); if (result.empty()) { result = p; } } // complete path if (!result.is_complete()) { try { if (!base.empty()) { result = boost::filesystem::complete(result,base); } else { result = boost::filesystem::complete(result); } } catch (...) { LOG_FREE(Info,"openstudio.completePathToFile","Unable to compete path '" << toString(p) << "'. Returning an empty path."); return path(); } } // check that result is a file if (!boost::filesystem::is_regular_file(result)) { LOG_FREE(Info,"openstudio.completePathToFile","Path '" << toString(p) << "' could not be resolved to an existing file. Returning an empty path."); return path(); } return result; }
CPPHeaderCodeDocument::CPPHeaderCodeDocument ( UMLClassifier * concept ) : ClassifierCodeDocument (concept) { setFileExtension(".h"); //initCodeClassFields(); // this is dubious because it calls down to // CodeGenFactory::newCodeClassField(this) // but "this" is still in construction at that time. // needed? I doubt it, but it feels good to do it. classDeclCodeBlock = 0; publicBlock = 0; protectedBlock = 0; privateBlock = 0; namespaceBlock = 0; pubConstructorBlock = 0; protConstructorBlock = 0; privConstructorBlock = 0; pubOperationsBlock = 0; privOperationsBlock = 0; protOperationsBlock = 0; // this will call updateContent() as well as other things that sync our document. //synchronize(); }
QStringList Configuration::getFileExtension() { QVariant var = settings->value(FILE_EXTENSION); if(var.isValid() && var.canConvert(QVariant::StringList)){ QStringList result = var.toStringList(); if(result.length()<FileTypeNum){//Auto-add can't delete for(int i=result.length(); i<FileTypeNum; i++){ result.append(fileTypeToString(i)); } setFileExtension(result); } return result; } else { setFileExtension(fileTypeSuffixString); return fileTypeSuffixString; } }
CPPSourceCodeDocument::CPPSourceCodeDocument ( UMLClassifier * concept ) : ClassifierCodeDocument (concept) { setFileExtension(".cpp"); m_methodsBlock = 0; m_constructorBlock = 0; /* We cannot call any virtual initialization functions here because the object is still under construction and the C++ dispatch table is not yet set up. Full initialization is done in CodeGenFactory::newCodeOperation() */ }
// Initialize this d classifier code document void DClassifierCodeDocument::init() { setFileExtension(QLatin1String(".d")); //initCodeClassFields(); // this is dubious because it calls down to // CodeGenFactory::newCodeClassField(this) // but "this" is still in construction at that time. classDeclCodeBlock = 0; operationsBlock = 0; constructorBlock = 0; // this will call updateContent() as well as other things that sync our document. synchronize(); }
bool saveJSON(const QVariant& json, openstudio::path p, bool overwrite) { // Ensures file extension is .json. Warns if there is a mismatch. p = setFileExtension(p,"json",true); // Use QFile and QIODevice serialize QFile file(toQString(p)); if (file.open(QFile::WriteOnly)) { QJsonDocument doc = QJsonDocument::fromVariant(json); file.write(doc.toJson()); file.close(); return true; } LOG_FREE(Error,"openstudio.Json","Could not open file " << toString(p) << " for writing."); return false; }
bool saveJSON(const QVariant& json, openstudio::path p, bool overwrite) { // Ensures file extension is .json. Warns if there is a mismatch. p = setFileExtension(p,"json",true); openstudio::filesystem::ofstream file(p, std::ios_base::binary); if (file.is_open()) { QJsonDocument doc = QJsonDocument::fromVariant(json); const auto json = doc.toJson(); file.write(json.constData(), json.size()); file.close(); return true; } LOG_FREE(Error,"openstudio.Json","Could not open file " << toString(p) << " for writing."); return false; }
openstudio::path saveModel(openstudio::model::Model model, const openstudio::path& osmPath, const openstudio::path& modelTempDir) { openstudio::path modelPath = osmPath; if (getFileExtension(osmPath).empty()) { modelPath = setFileExtension(osmPath,modelFileExtension(),false,true); } // save osm to temp directory, saveModelTempDir will copy to real location openstudio::path tempModelPath = modelTempDir / toPath("in.osm"); Workspace(model).save(tempModelPath,true); LOG_FREE(Debug, "saveModel", "Saved model to '" << toString(tempModelPath) << "'"); // DLM: eventually put saveRunManagerDatabase here, needs to happen before saveModelTempDir // DLM: eventually add this back in too // DLM: for now this is accomplished by calling saveModelTempDir after saveModel in all cases //saveModelTempDir(modelTempDir, modelPath); return modelPath; }
void Image::setData(const QByteArray &d) { m_data = d; // Detect file extension from data headers bool headerDetection = m_settings->value("Save/headerDetection", true).toBool(); if (headerDetection) { QString ext = getExtensionFromHeader(m_data.left(12)); QString currentExt = getExtension(m_url); if (!ext.isEmpty() && ext != currentExt) { log(QStringLiteral("Setting image extension from header: '%1' (was '%2').").arg(ext, currentExt), Logger::Info); setFileExtension(ext); } } // Set MD5 by hashing this data if we don't already have it if (m_md5.isEmpty()) { m_md5 = QCryptographicHash::hash(m_data, QCryptographicHash::Md5).toHex(); refreshTokens(); } }
Image::Image(Site *site, QMap<QString, QString> details, Profile *profile, Page* parent) : m_profile(profile), m_id(0), m_parentSite(site), m_extensionRotator(nullptr) { m_settings = m_profile->getSettings(); // Parents if (m_parentSite == nullptr) { log(QStringLiteral("Image has nullptr parent, aborting creation.")); return; } // Other details m_isGallery = details.contains("type") && details["type"] == "gallery"; m_md5 = details.contains("md5") ? details["md5"] : ""; m_author = details.contains("author") ? details["author"] : ""; m_name = details.contains("name") ? details["name"] : ""; m_status = details.contains("status") ? details["status"] : ""; m_search = parent != nullptr ? parent->search() : (details.contains("search") ? details["search"].split(' ') : QStringList()); m_id = details.contains("id") ? details["id"].toULongLong() : 0; m_score = details.contains("score") ? details["score"].toInt() : 0; m_hasScore = details.contains("score"); m_parentId = details.contains("parent_id") ? details["parent_id"].toInt() : 0; m_fileSize = details.contains("file_size") ? details["file_size"].toInt() : 0; m_authorId = details.contains("creator_id") ? details["creator_id"].toInt() : 0; m_hasChildren = details.contains("has_children") && details["has_children"] == "true"; m_hasNote = details.contains("has_note") && details["has_note"] == "true"; m_hasComments = details.contains("has_comments") && details["has_comments"] == "true"; m_fileUrl = details.contains("file_url") ? m_parentSite->fixUrl(details["file_url"]) : QUrl(); m_sampleUrl = details.contains("sample_url") ? m_parentSite->fixUrl(details["sample_url"]) : QUrl(); m_previewUrl = details.contains("preview_url") ? m_parentSite->fixUrl(details["preview_url"]) : QUrl(); m_size = QSize(details.contains("width") ? details["width"].toInt() : 0, details.contains("height") ? details["height"].toInt() : 0); m_source = details.contains("source") ? details["source"] : ""; // Page url if (details.contains("page_url")) { m_pageUrl = details["page_url"]; } else { Api *api = m_parentSite->detailsApi(); if (api != Q_NULLPTR) { m_pageUrl = api->detailsUrl(m_id, m_md5, m_parentSite).url; } } m_pageUrl = site->fixUrl(m_pageUrl).toString(); // Rating setRating(details.contains("rating") ? details["rating"] : ""); // Tags QStringList types = QStringList() << "general" << "artist" << "character" << "copyright" << "model" << "species" << "meta"; for (const QString &typ : types) { QString key = "tags_" + typ; if (!details.contains(key)) continue; TagType ttype(typ); QStringList t = details[key].split(' ', QString::SkipEmptyParts); for (QString tg : t) { tg.replace("&", "&"); m_tags.append(Tag(tg, ttype)); } } if (m_tags.isEmpty() && details.contains("tags")) { QString tgs = QString(details["tags"]).replace(QRegularExpression("[\r\n\t]+"), " "); // Automatically find tag separator and split the list int commas = tgs.count(", "); int spaces = tgs.count(" "); const QStringList &t = commas >= 10 || (commas > 0 && (spaces - commas) / commas < 2) ? tgs.split(", ", QString::SkipEmptyParts) : tgs.split(" ", QString::SkipEmptyParts); for (QString tg : t) { tg.replace("&", "&"); int colon = tg.indexOf(':'); if (colon != -1) { QString tp = tg.left(colon).toLower(); if (tp == "user") { m_author = tg.mid(colon + 1); } else if (tp == "score") { m_score = tg.midRef(colon + 1).toInt(); } else if (tp == "size") { QStringList size = tg.mid(colon + 1).split('x'); if (size.size() == 2) m_size = QSize(size[0].toInt(), size[1].toInt()); } else if (tp == "rating") { setRating(tg.mid(colon + 1)); } else { m_tags.append(Tag(tg)); } } else { m_tags.append(Tag(tg)); } } } // Complete missing tag type information m_parentSite->tagDatabase()->load(); QStringList unknownTags; for (Tag const &tag : qAsConst(m_tags)) if (tag.type().name() == "unknown") unknownTags.append(tag.text()); QMap<QString, TagType> dbTypes = m_parentSite->tagDatabase()->getTagTypes(unknownTags); for (Tag &tag : m_tags) if (dbTypes.contains(tag.text())) tag.setType(dbTypes[tag.text()]); // Get file url and try to improve it to save bandwidth m_url = m_fileUrl.toString(); QString ext = getExtension(m_url); if (details.contains("ext") && !details["ext"].isEmpty()) { QString realExt = details["ext"]; if (ext != realExt) { setFileExtension(realExt); } } else if (ext == QLatin1String("jpg") && !m_previewUrl.isEmpty()) { bool fixed = false; QString previewExt = getExtension(details["preview_url"]); if (!m_sampleUrl.isEmpty()) { // Guess extension from sample url QString sampleExt = getExtension(details["sample_url"]); if (sampleExt != QLatin1String("jpg") && sampleExt != QLatin1String("png") && sampleExt != ext && previewExt == ext) { m_url = setExtension(m_url, sampleExt); fixed = true; } } // Guess the extension from the tags if (!fixed) { if ((hasTag(QStringLiteral("swf")) || hasTag(QStringLiteral("flash"))) && ext != QLatin1String("swf")) { setFileExtension(QStringLiteral("swf")); } else if ((hasTag(QStringLiteral("gif")) || hasTag(QStringLiteral("animated_gif"))) && ext != QLatin1String("webm") && ext != QLatin1String("mp4")) { setFileExtension(QStringLiteral("gif")); } else if (hasTag(QStringLiteral("mp4")) && ext != QLatin1String("gif") && ext != QLatin1String("webm")) { setFileExtension(QStringLiteral("mp4")); } else if (hasTag(QStringLiteral("animated_png")) && ext != QLatin1String("webm") && ext != QLatin1String("mp4")) { setFileExtension(QStringLiteral("png")); } else if ((hasTag(QStringLiteral("webm")) || hasTag(QStringLiteral("animated"))) && ext != QLatin1String("gif") && ext != QLatin1String("mp4")) { setFileExtension(QStringLiteral("webm")); } } } else if (details.contains("image") && details["image"].contains("MB // gif\" height=\"") && !m_url.endsWith(".gif", Qt::CaseInsensitive)) { m_url = setExtension(m_url, QStringLiteral("gif")); } // Remove ? in urls m_url = removeCacheUrl(m_url); m_fileUrl = removeCacheUrl(m_fileUrl.toString()); m_sampleUrl = removeCacheUrl(m_sampleUrl.toString()); m_previewUrl = removeCacheUrl(m_previewUrl.toString()); // We use the sample URL as the URL for zip files (ugoira) or if the setting is set bool downloadOriginals = m_settings->value("Save/downloadoriginals", true).toBool(); if (!m_sampleUrl.isEmpty() && (getExtension(m_url) == "zip" || !downloadOriginals)) m_url = m_sampleUrl.toString(); // Creation date m_createdAt = QDateTime(); if (details.contains("created_at")) { m_createdAt = qDateTimeFromString(details["created_at"]); } else if (details.contains("date")) { m_createdAt = QDateTime::fromString(details["date"], Qt::ISODate); } // Setup extension rotator bool animated = hasTag("gif") || hasTag("animated_gif") || hasTag("mp4") || hasTag("animated_png") || hasTag("webm") || hasTag("animated"); QStringList extensions = animated ? QStringList() << "webm" << "mp4" << "gif" << "jpg" << "png" << "jpeg" << "swf" : QStringList() << "jpg" << "png" << "gif" << "jpeg" << "webm" << "swf" << "mp4"; m_extensionRotator = new ExtensionRotator(getExtension(m_url), extensions, this); // Tech details m_parent = parent; m_loadDetails = nullptr; m_loadImage = nullptr; m_loadingPreview = false; m_loadingDetails = false; m_loadedDetails = false; m_loadedImage = false; m_loadingImage = false; m_tryingSample = false; m_pools = QList<Pool>(); }
JavaANTCodeDocument::JavaANTCodeDocument () { setFileName(QLatin1String("build")); // default name setFileExtension(QLatin1String(".xml")); setID(QLatin1String("ANTDOC")); // default id tag for this type of document }