Skip to content

Commit

Permalink
Update libmimeapps
Browse files Browse the repository at this point in the history
  • Loading branch information
Chocimier committed Jul 11, 2015
1 parent 4ec2f56 commit 0c83c2a
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 45 deletions.
4 changes: 0 additions & 4 deletions 3rdparty/libmimeapps/DesktopEntry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,26 +144,22 @@ std::vector<std::string> DesktopEntry::parseExec(const std::vector<std::string>
result.push_back(urls.at(i));
}

result.push_back(std::string());
break;

case 'i':
if (icon_.size() > 0)
{
result.push_back(std::string("--icon"));
result.push_back(icon_);
result.push_back(std::string());
}
break;

case 'c':
result.push_back(name_);
result.push_back(std::string());
break;

case 'k':
result.push_back(path_);
result.push_back(std::string());
break;

case '%':
Expand Down
23 changes: 12 additions & 11 deletions 3rdparty/libmimeapps/Index.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "Index.h"

#include "ConfigReader.h"
#include "Tools.h"

namespace LibMimeApps
{
Expand Down Expand Up @@ -110,29 +110,30 @@ void Index::createBase()
void Index::processDirectory(const lookupDirectory &baseDirectory, const std::string &relative)
{
std::string directory = baseDirectory.path + relative;
std::vector<std::string> subdirectories = directoryEntries(directory, FileType::Directory);
std::vector<file> content = directoryEntries(directory);

if (baseDirectory.withSubdirectories)
{
for (std::vector<std::string>::size_type i = 0; i < subdirectories.size(); ++i)
for (std::vector<file>::size_type i = 0; i < content.size(); ++i)
{
processDirectory(baseDirectory, relative + subdirectories.at(i) + "/");
if (content.at(i).type == FileType::Directory)
{
processDirectory(baseDirectory, relative + content.at(i).name + "/");
}
}
}

processDesktopInDirectory(baseDirectory.path, relative);
processDesktopInDirectory(baseDirectory.path, relative, content);
processMimeApps(directory + "mimeapps.list");
}

void Index::processDesktopInDirectory(const std::string &baseDirectory, const std::string &relative)
void Index::processDesktopInDirectory(const std::string &baseDirectory, const std::string &relative, const std::vector<file> &content)
{
std::vector<std::string> filenames = directoryEntries(baseDirectory + relative, FileType::File);

for (std::vector<std::string>::size_type i = 0; i < filenames.size(); ++i)
for (std::vector<std::string>::size_type i = 0; i < content.size(); ++i)
{
if (endsWith(filenames.at(i), std::string(".desktop")))
if (content.at(i).type == FileType::File && endsWith(content.at(i).name, std::string(".desktop")))
{
processDesktopFile(baseDirectory, relative + filenames.at(i));
processDesktopFile(baseDirectory, relative + content.at(i).name);
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion 3rdparty/libmimeapps/Index.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <vector>

#include "DesktopEntry.h"
#include "Tools.h"

namespace LibMimeApps
{
Expand All @@ -64,7 +65,7 @@ class Index
void findDirectories();
void createBase();
void processDirectory(const lookupDirectory &baseDirectory, const std::string &relative);
void processDesktopInDirectory(const std::string &baseDirectory, const std::string &relative);
void processDesktopInDirectory(const std::string &baseDirectory, const std::string &relative, const std::vector<file> &content);
void processMimeApps(const std::string &path);
void processDesktopFile(const std::string &baseDirectory, const std::string &relative);
void addApplication(DesktopEntry *entry);
Expand Down
29 changes: 25 additions & 4 deletions 3rdparty/libmimeapps/Tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ bool match(std::string const& text, std::string const& pattern)
return std::search(text.begin(), text.end(), pattern.begin(), pattern.end() ) != text.end();
}

std::vector<std::string> directoryEntries(const std::string &directory, FileType::FileType dirs)
std::vector<file> directoryEntries(const std::string &directory)
{
std::vector<std::string> result;
std::vector<file> result;
DIR *stream = opendir(directory.c_str());

if (stream == NULL)
Expand All @@ -103,9 +103,16 @@ std::vector<std::string> directoryEntries(const std::string &directory, FileType

stat(path.c_str(), &info);

if (name.size() > 0 && name.at(0) != '.' && ((dirs == FileType::File && S_ISREG(info.st_mode)) || (dirs == FileType::Directory && S_ISDIR(info.st_mode))))
if (name.size() > 0 && name.at(0) != '.')
{
result.push_back(name);
if (S_ISREG(info.st_mode))
{
result.push_back(file(name, FileType::File));
}
else if (S_ISDIR(info.st_mode))
{
result.push_back(file(name, FileType::Directory));
}
}
}

Expand Down Expand Up @@ -229,4 +236,18 @@ std::string alnums(const std::string &string, size_t begin)
return string.substr(begin, end-begin);
}

lang::lang(const std::string &string):
language(alnums(string, 0))
{
if (match(string, "_"))
{
country = alnums(string, string.find('_')+1);
}

if (match(string, "@"))
{
modifier = alnums(string, string.find('@')+1);
}
}

}
46 changes: 21 additions & 25 deletions 3rdparty/libmimeapps/Tools.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,47 +43,43 @@ namespace LibMimeApps
namespace FileType
{

enum FileType{
enum FileType {
Directory,
File
};

}

bool startsWith(const std::string &str, const std::string &prefix);
bool endsWith(std::string const &str, std::string const &suffix);
std::vector<std::string> split(const std::string &str, const char delimiter);
bool match(std::string const& text, std::string const& pattern);
std::vector<std::string> directoryEntries(const std::string &directory, FileType::FileType dirs);
std::vector<std::string> unfoldVariable(const std::string &string);
std::vector<std::string> getVariableValues(const std::string &name);
std::string getLocaleValue(const ConfigReader &config, const std::string &group, const std::string &key, const std::string &language);
std::string alnums(const std::string &string, size_t begin);

struct lang {
std::string language;
std::string country;
std::string modifier;

lang()
{
}
lang(){}
explicit lang(const std::string &string);
};

struct file {
std::string name;
FileType::FileType type;

explicit lang(const std::string &string):
language(alnums(string, 0))
file(const std::string &name, const FileType::FileType type):
name(name),
type(type)
{
if (match(string, "_"))
{
country = alnums(string, string.find('_')+1);
}

if (match(string, "@"))
{
modifier = alnums(string, string.find('@')+1);
}
}
};

bool startsWith(const std::string &str, const std::string &prefix);
bool endsWith(std::string const &str, std::string const &suffix);
std::vector<std::string> split(const std::string &str, const char delimiter);
bool match(std::string const& text, std::string const& pattern);
std::vector<file> directoryEntries(const std::string &directory);
std::vector<std::string> unfoldVariable(const std::string &string);
std::vector<std::string> getVariableValues(const std::string &name);
std::string getLocaleValue(const ConfigReader &config, const std::string &group, const std::string &key, const std::string &language);
std::string alnums(const std::string &string, size_t begin);

}

#endif

0 comments on commit 0c83c2a

Please sign in to comment.