mirror of
https://projects.vdr-developer.org/git/vdr-plugin-scraper2vdr.git
synced 2023-10-19 17:58:31 +02:00
170 lines
4.7 KiB
C
170 lines
4.7 KiB
C
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <sys/vfs.h>
|
|
#include <dirent.h>
|
|
#include <fstream>
|
|
#include <algorithm>
|
|
#include <functional>
|
|
#include <cctype>
|
|
#include <locale>
|
|
#include <Magick++.h>
|
|
#include <vdr/plugin.h>
|
|
#include "lib/common.h"
|
|
#include "tools.h"
|
|
|
|
using namespace std;
|
|
using namespace Magick;
|
|
|
|
bool CreateDirectory(string dir) {
|
|
mkdir(dir.c_str(), 0775);
|
|
//check if successfull
|
|
DIR *pDir;
|
|
bool exists = false;
|
|
pDir = opendir(dir.c_str());
|
|
if (pDir != NULL) {
|
|
exists = true;
|
|
closedir(pDir);
|
|
}
|
|
return exists;
|
|
}
|
|
|
|
bool FileExists(string filename, bool isImage) {
|
|
ifstream ifile(filename.c_str());
|
|
if (ifile) {
|
|
//a valid image should be larger then 500 bytes
|
|
ifile.seekg (0, ifile.end);
|
|
int length = ifile.tellg();
|
|
int minimumLength = isImage ? 500 : 1;
|
|
if (length > minimumLength)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool CheckDirExists(const char* dirName) {
|
|
struct statfs statfsbuf;
|
|
if (statfs(dirName,&statfsbuf)==-1) return false;
|
|
if ((statfsbuf.f_type!=0x01021994) && (statfsbuf.f_type!=0x28cd3d45)) return false;
|
|
if (access(dirName,R_OK|W_OK)==-1) return false;
|
|
return true;
|
|
|
|
}
|
|
|
|
void DeleteFile(string filename) {
|
|
remove(filename.c_str());
|
|
}
|
|
|
|
void DeleteDirectory(string dirname) {
|
|
DIR *dir;
|
|
struct dirent *entry;
|
|
if ((dir = opendir (dirname.c_str())) != NULL) {
|
|
while ((entry = readdir (dir)) != NULL) {
|
|
string file = entry->d_name;
|
|
if (!file.compare("."))
|
|
continue;
|
|
if (!file.compare(".."))
|
|
continue;
|
|
string delFile = dirname + "/" + file;
|
|
DeleteFile(delFile);
|
|
}
|
|
closedir (dir);
|
|
}
|
|
rmdir(dirname.c_str());
|
|
}
|
|
|
|
string TwoFoldersHigher(string folder) {
|
|
unsigned found = folder.find_last_of("/");
|
|
if (found != string::npos) {
|
|
string firstDirRemoved = folder.substr(0,found);
|
|
unsigned found2 = firstDirRemoved.find_last_of("/");
|
|
if (found2 != string::npos) {
|
|
return firstDirRemoved.substr(0,found2);
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
// trim from start
|
|
string <rim(string &s) {
|
|
s.erase(s.begin(), find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace))));
|
|
return s;
|
|
}
|
|
|
|
// trim from end
|
|
string &rtrim(string &s) {
|
|
s.erase(find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(), s.end());
|
|
return s;
|
|
}
|
|
|
|
// trim from both ends
|
|
string &trim(string &s) {
|
|
return ltrim(rtrim(s));
|
|
}
|
|
|
|
void toLower(string &s) {
|
|
transform(s.begin(), s.end(), s.begin(), ::tolower);
|
|
}
|
|
|
|
bool isNumber(const string& s) {
|
|
string::const_iterator it = s.begin();
|
|
while (it != s.end() && isdigit(*it)) ++it;
|
|
return !s.empty() && it == s.end();
|
|
}
|
|
|
|
string replaceString(string content, string search, string repl) {
|
|
size_t pos = 0;
|
|
while((pos = content.find(search, pos)) != std::string::npos) {
|
|
if (pos > 3 && pos < content.size() - 2) {
|
|
content.replace(pos, search.length(), repl);
|
|
} else {
|
|
content.replace(pos, search.length(), "");
|
|
}
|
|
pos += repl.length();
|
|
}
|
|
return content;
|
|
}
|
|
|
|
|
|
/****************************************************************************************
|
|
* SPLTSTRING
|
|
****************************************************************************************/
|
|
// split: receives a char delimiter; returns a vector of strings
|
|
// By default ignores repeated delimiters, unless argument rep == 1.
|
|
vector<string>& splitstring::split(char delim, int rep) {
|
|
if (!flds.empty()) flds.clear(); // empty vector if necessary
|
|
string work = data();
|
|
string buf = "";
|
|
int i = 0;
|
|
while (i < work.length()) {
|
|
if (work[i] != delim)
|
|
buf += work[i];
|
|
else if (rep == 1) {
|
|
flds.push_back(buf);
|
|
buf = "";
|
|
} else if (buf.length() > 0) {
|
|
flds.push_back(buf);
|
|
buf = "";
|
|
}
|
|
i++;
|
|
}
|
|
if (!buf.empty())
|
|
flds.push_back(buf);
|
|
return flds;
|
|
}
|
|
|
|
void CreateThumbnail(string sourcePath, string destPath, int origWidth, int origHeight, int shrinkFactor) {
|
|
if (sourcePath.size() < 5 || destPath.size() < 5 || shrinkFactor < 2)
|
|
return;
|
|
|
|
int thumbWidth = origWidth / shrinkFactor;
|
|
int thumbHeight = origHeight / shrinkFactor;
|
|
|
|
InitializeMagick(NULL);
|
|
Image buffer;
|
|
try {
|
|
buffer.read(sourcePath.c_str());
|
|
buffer.sample(Geometry(thumbWidth, thumbHeight));
|
|
buffer.write(destPath.c_str());
|
|
} catch( ... ) {}
|
|
} |