Browse Source

Fix string::basename() bug on Mac (and possibly Windows). Rename string::basename to filenameBase, string::extension to filenameExtension.

tags/v1.0.0
Andrew Belt 5 years ago
parent
commit
3ddc40b8b5
6 changed files with 30 additions and 19 deletions
  1. +18
    -5
      include/string.hpp
  2. +2
    -2
      src/app/ModuleWidget.cpp
  3. +1
    -1
      src/app/Scene.cpp
  4. +1
    -1
      src/patch.cpp
  5. +1
    -1
      src/plugin.cpp
  6. +7
    -9
      src/string.cpp

+ 18
- 5
include/string.hpp View File

@@ -27,13 +27,26 @@ std::string ellipsize(const std::string &s, size_t len);
std::string ellipsizePrefix(const std::string &s, size_t len); std::string ellipsizePrefix(const std::string &s, size_t len);
bool startsWith(const std::string &str, const std::string &prefix); bool startsWith(const std::string &str, const std::string &prefix);
bool endsWith(const std::string &str, const std::string &suffix); bool endsWith(const std::string &str, const std::string &suffix);
/** Extracts portions of a path */
/** Extracts the directory of the path.
Example: directory("dir/file.txt") // "dir"
Calls POSIX dirname().
*/
std::string directory(const std::string &path); std::string directory(const std::string &path);
/** Extracts the filename of the path.
Example: directory("dir/file.txt") // "file.txt"
Calls POSIX basename().
*/
std::string filename(const std::string &path); std::string filename(const std::string &path);
/** Extracts the portion of a path without the extension */
std::string basename(const std::string &path);
/** Extracts the extension of a path */
std::string extension(const std::string &path);
/** Extracts the portion of a filename without the extension.
Example: filenameBase("file.txt") // "file"
Note: Only works on filenames. Call filename(path) to get the filename of the path.
*/
std::string filenameBase(const std::string &filename);
/** Extracts the extension of a filename.
Example: filenameExtension("file.txt") // "txt"
Note: Only works on filenames. Call filename(path) to get the filename of the path.
*/
std::string filenameExtension(const std::string &filename);
/** Scores how well a query matches a string. /** Scores how well a query matches a string.
A score of 0 means no match. A score of 0 means no match.
The score is arbitrary and is only meaningful for sorting. The score is arbitrary and is only meaningful for sorting.


+ 2
- 2
src/app/ModuleWidget.cpp View File

@@ -204,7 +204,7 @@ struct ModulePresetItem : ui::MenuItem {


for (const std::string &presetPath : moduleWidget->model->presetPaths) { for (const std::string &presetPath : moduleWidget->model->presetPaths) {
ModulePresetPathItem *presetItem = new ModulePresetPathItem; ModulePresetPathItem *presetItem = new ModulePresetPathItem;
std::string presetName = string::basename(string::filename(presetPath));
std::string presetName = string::filenameBase(string::filename(presetPath));
presetItem->text = presetName; presetItem->text = presetName;
presetItem->presetPath = presetPath; presetItem->presetPath = presetPath;
presetItem->moduleWidget = moduleWidget; presetItem->moduleWidget = moduleWidget;
@@ -662,7 +662,7 @@ void ModuleWidget::saveDialog() {
}); });


std::string pathStr = path; std::string pathStr = path;
std::string extension = string::extension(pathStr);
std::string extension = string::filenameExtension(string::filename(pathStr));
if (extension.empty()) { if (extension.empty()) {
pathStr += ".vcvm"; pathStr += ".vcvm";
} }


+ 1
- 1
src/app/Scene.cpp View File

@@ -135,7 +135,7 @@ void Scene::onHoverKey(const widget::HoverKeyEvent &e) {
void Scene::onPathDrop(const widget::PathDropEvent &e) { void Scene::onPathDrop(const widget::PathDropEvent &e) {
if (e.paths.size() >= 1) { if (e.paths.size() >= 1) {
const std::string &path = e.paths[0]; const std::string &path = e.paths[0];
if (string::extension(path) == "vcv") {
if (string::filenameExtension(string::filename(path)) == "vcv") {
APP->patch->load(path); APP->patch->load(path);
e.consume(this); e.consume(this);
} }


+ 1
- 1
src/patch.cpp View File

@@ -130,7 +130,7 @@ void PatchManager::saveAsDialog() {
}); });


std::string pathStr = pathC; std::string pathStr = pathC;
if (string::extension(pathStr).empty()) {
if (string::filenameExtension(pathStr).empty()) {
pathStr += ".vcv"; pathStr += ".vcv";
} }




+ 1
- 1
src/plugin.cpp View File

@@ -324,7 +324,7 @@ static void extractPackages(const std::string &path) {
std::string message; std::string message;


for (std::string packagePath : system::listEntries(path)) { for (std::string packagePath : system::listEntries(path)) {
if (string::extension(packagePath) != "zip")
if (string::filenameExtension(packagePath) != "zip")
continue; continue;
INFO("Extracting package %s", packagePath.c_str()); INFO("Extracting package %s", packagePath.c_str());
// Extract package // Extract package


+ 7
- 9
src/string.cpp View File

@@ -96,20 +96,18 @@ std::string filename(const std::string &path) {
return filename; return filename;
} }


// libgen.h defines a `basename` macro
#undef basename
std::string basename(const std::string &path) {
size_t pos = path.rfind('.');
std::string filenameBase(const std::string &filename) {
size_t pos = filename.rfind('.');
if (pos == std::string::npos) if (pos == std::string::npos)
return path;
return std::string(path, 0, pos);
return filename;
return std::string(filename, 0, pos);
} }


std::string extension(const std::string &path) {
size_t pos = path.rfind('.');
std::string filenameExtension(const std::string &filename) {
size_t pos = filename.rfind('.');
if (pos == std::string::npos) if (pos == std::string::npos)
return ""; return "";
return std::string(path, pos + 1);
return std::string(filename, pos + 1);
} }






Loading…
Cancel
Save