28 #include <QLibraryInfo> 31 #include <QMessageBox> 32 #include <QPushButton> 33 #include <QApplication> 34 #include <QDesktopWidget> 43 if ( !
QDir(dir).exists() ) {
46 qWarning(
"Can't create local directory %s!", qPrintable(dir));
51 QFile::ReadUser|QFile::WriteUser|QFile::ExeUser);
53 qWarning(
"Can't set permissions to local config directory `%s' !", qPrintable(dir));
68 for (k = 0; k < qitems.
size(); ++k) {
70 if (interestQueryItems.
isEmpty() || interestQueryItems.
contains(p.first))
71 map[p.first] = p.second;
82 klfDbg(
": 1="<<url1<<
"; 2="<<url2<<
"; interestflags="<<interestFlags<<
"; int.q.i=" 83 <<interestQueryItems ) ;
84 uint compareflags = 0x00;
86 Qt::CaseSensitivity queryItemValsCS = Qt::CaseSensitive;
88 queryItemValsCS = Qt::CaseInsensitive;
98 klfDbg(
" after q-i-stripping: u1="<<u1<<
"; u2="<<u2 ) ;
103 qitems_map1 = klf_url_query_items_map(url1, interestQueryItems);
104 qitems_map2 = klf_url_query_items_map(url2, interestQueryItems);
109 if (u1 == u2 && qitems_map1 == qitems_map2)
135 klfDbg(
"... and the result is compareflags="<<compareflags ) ;
154 uint matchType = flags & 0x0F;
155 Qt::CaseSensitivity cs = (flags & Qt::MatchCaseSensitive)
157 : Qt::CaseInsensitive;
159 const QVariant& v = testForHitCandidateValue;
162 if (matchType == Qt::MatchExactly)
163 return (queryValue == v);
169 case Qt::MatchRegExp:
170 return (
QRegExp(text, cs).exactMatch(t));
171 case Qt::MatchWildcard:
172 return (
QRegExp(text, cs, QRegExp::Wildcard).exactMatch(t));
173 case Qt::MatchStartsWith:
175 case Qt::MatchEndsWith:
177 case Qt::MatchFixedString:
179 case Qt::MatchContains:
191 int level,
int limit)
199 klfDebugf((
"root=`%s', pathlist=`%s', level=%d, limit=%d", qPrintable(root), qPrintable(pathlist.
join(
"\t")),
206 for (k = 0; k < level; ++k) { levelpathlist << newpathlist[k]; }
209 klfDebugf((
"our path = `%s' ...", qPrintable(flpath)));
211 if (flinfo.
isDir() && level < pathlist.
size()) {
215 entries = d.
entryList(
QStringList()<<pathlist[level], QDir::AllEntries|QDir::System|QDir::Hidden);
216 if (entries.
size()) {
217 klfDebugf((
"got entry list: %s", qPrintable(entries.
join(
"\t"))));
220 for (k = 0; k < (int)entries.
size(); ++k) {
221 newpathlist[level] = entries[k];
222 hitlist += __search_find_test(root, newpathlist, level+1, limit - hitlist.
size());
223 if (limit >= 0 && (
int)hitlist.size() >= limit)
245 klfDbg(
"looking for "+wildcard_expression) ;
252 static QRegExp driveregexp(
"^[A-Za-z]?:$");
255 root = pathlist[0]+
"/";
258 return __search_find_test(root, pathlist, 0, limit);
265 static const QString PATH = getenv(
"PATH");
275 path = extra_path + pathsep + path;
280 for (k = 0; k < (int)paths.
size(); ++k) {
281 klfDbg(
"searching for "<<programName<<
" in "<<paths[k]) ;
283 klfDbg(
"\t...resulting in hits = "<<hits) ;
284 for (j = 0; j < (int)hits.
size(); ++j) {
286 klfDbg(
"\tFound definitive (executable) hit at "+hits[j]) ;
291 return QString::null;
304 for (k = 0; k < (int)paths.
size(); ++k) {
305 klfDbg(
"searching for "<<fname<<
" in "<<paths[k]) ;
307 klfDbg(
"\t...resulting in hits = "<<hits) ;
308 if (hits.
size() > 0) {
309 klfDbg(
"\t...returning "<<hits[0]);
313 return QString::null;
323 klfDbg(
"path="<<path<<
"; reference="<<ref) ;
353 klfDbg(
"reference is "<<ref) ;
356 klfDbg(
"result = " << result) ;
369 for (k = 0; k < env.
size(); ++k) {
370 if (env[k].startsWith(vareq)) {
384 for (k = 0; k < env->
size(); ++k) {
386 env->operator[](k) = vareq+value;
407 list << it.key() +
"=" + it.
value();
418 klfWarning(
"Line "<<s<<
" is not an environment variable setting.") ;
432 if (!parse_env_line(s, &var, &val))
435 klfWarning(
"Line "<<s<<
" will overwrite previous value of variable "<<var) ;
448 if (!parse_env_line(s, &var, &val))
488 if (items.
size() >= 2) {
489 if (items[0].isEmpty() && items[1].
isEmpty())
531 klfWarning(
"No or unknown action specified! action="<<action) ;
538 for (k = 0; k < newitems.
size(); ++k) {
539 if (newitems2.
contains(newitems[k]))
541 newitems2.
append(newitems[k]);
543 newitems = newitems2;
556 const QString& var, uint action)
564 const QString& var, uint action)
576 QRegExp rx(
"\\$(?:(\\$|(?:[A-Za-z0-9_]+))|\\{([A-Za-z0-9_]+)\\})");
578 while ( (i = rx.
indexIn(s, i)) != -1 ) {
589 if (recstack.
contains(envvarname)) {
590 klfWarning(
"Recursive definition detected for variable "<<envvarname<<
"!") ;
597 const char *svalue = getenv(qPrintable(envvarname));
604 val = __klf_expandenvironmentvariables(val, env,
true,
QStringList()<<recstack<<envvarname) ;
606 klfDbg(
"Replaced value of "<<envvarname<<
" is "<<val) ;
617 return __klf_expandenvironmentvariables(expression, env, recursive,
QStringList());
654 for (k = 0; k < targeters.
size(); ++k) {
655 targeters[k]->pTarget = NULL;
664 pTarget->pTargetOf.removeAll(
this);
670 klfDbg(
"target="<<target) ;
673 pTarget->pTargetOf.removeAll(
this);
virtual void setTarget(KLFTarget *target)
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
QString toNativeSeparators(const QString &pathName)
QString cap(int nth) const
QString klfJoinEnvironmentPath(const QStringList &paths)
join several paths together to form a PATH-like environment variable value (common for $PATH) ...
Merge environments by expanding new values according to current environment.
KLF_EXPORT QString klfPrefixedPath(const QString &path_, const QString &ref_)
Returns absolute path to path as seen from reference.
bool contains(const Key &key) const
QStringList systemEnvironment()
Prepend given value to list of path items.
QString fromNativeSeparators(const QString &pathName)
Remove duplicates from the variable.
KLF_EXPORT void klfSetEnvironmentVariable(QStringList *env, const QString &var, const QString &value)
set the value of a variable in environment variables list, replacing existing definition if any...
KLF_EXPORT uint klfUrlCompare(const QUrl &url1, const QUrl &url2, uint interestFlags, const QStringList &interestQueryItems)
Compares two URLs and returns some flags as to how they differ.
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QList< QPair< QString, QString > > queryItems(QUrl::ComponentFormattingOptions encoding) const
QString klfGetEnvironmentVariable(const QStringList &env, const QString &var)
returns the value of an environment variable, defined in env.
void klfMergeEnvironment(QStringList *env, const QStringList &addvars, const QStringList &pathvars, uint actions)
merge two environment definitions
bool klfMapIsIncludedIn(const QMap< Key, Value > &a, const QMap< Key, Value > &b, ValCompareFunc cfunc=klfEqualFunc< Value >())
Compares two QMap's for inclusion.
bool contains(const QString &str, Qt::CaseSensitivity cs) const
KLF_EXPORT QString klfSearchPath(const QString &programName, const QString &extra_path)
Smart executable searching in a given path list with wildcards.
#define klfDbg(streamableItems)
print debug stream items
#define KLF_DEBUG_BLOCK(msg)
Utility to debug the execution of a block.
virtual bool setPermissions(Permissions permissions)
QString join(const QString &separator) const
QStringList klfSetEnvironmentPath(const QStringList &oldpaths, const QStringList &newpaths, uint action)
set/add path items to a PATH-like environment variable (commonly $PATH)
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
Asserting Non-NULL pointers (NON-FATAL)
If we're expanding new environment variables, don't expand them recursively.
KLF_EXPORT bool klfMatch(const QVariant &testForHitCandidateValue, const QVariant &queryValue, Qt::MatchFlags flags, const QString &queryStringCache)
Generalized value matching.
int matchedLength() const
Urls are equal. The order of query items may be different, but the same are given with the same value...
int indexIn(const QString &str, int offset, CaretMode caretMode) const
Append given path items to current list.
QString fromLocal8Bit(const char *str, int size)
void append(const T &value)
QMap< QString, QString > klfEnvironmentListToMap(const QStringList &env)
convert environment list into a map of variable names to values
KLF_EXPORT QString klfUrlLocalFilePath(const QUrl &url)
#define klfWarning(streamableItems)
QString absoluteFilePath() const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
QStringList klfSplitEnvironmentPath(const QString &value)
split the value of a PATH-like environment variable into paths (common for $PATH) ...
KLF_EXPORT bool klfEnsureDir(const QString &dir)
Ensure existence of a directory.
QString path(ComponentFormattingOptions options) const
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const
QString klfExpandEnvironmentVariables(const QString &expression, const QStringList &env, bool recursive)
Expands references to environment variables to their values.
Don't take any action, just apply flags.
This is NOT a specific test. It modifies the behavior of klfUrlCompare() by instructing it to compare...
Urls have same base URL. All query items in url1 are present in url2 with the same values...
bool startsWith(const T &value) const
#define klfDebugf(arglist)
print debug stream items
bool contains(QChar ch, Qt::CaseSensitivity cs) const
Mask out the requested action.
QList< KLFTargeter * > pTargetOf
QString & replace(int position, int n, QChar after)
#define KLF_PATH_SEP
The character used in the $PATH environment variable to separate different locations.
QString mid(int position, int n) const
QStringList entryList(Filters filters, SortFlags sort) const
QStringList klfMapToEnvironmentList(const QMap< QString, QString > &map)
convert a map of variable names to values to an environment list
Urls have same base URL. All query items in url2 are present in url1 with the same values...
QList< T > mid(int pos, int length) const
void setQuery(const QString &query, ParsingMode mode)
QString applicationDirPath()
QStringList klfGetEnvironmentPath(const QStringList &env, const QString &var)
get the path items of an environment variable (commonly $PATH)
Replace current path items by given ones.
int compare(const QString &other, Qt::CaseSensitivity cs) const
bool exactMatch(const QString &str) const
KLF_EXPORT QStringList klfCurrentEnvironment()
Returns the current system's environment.
bool isExecutable() const
bool mkpath(const QString &dirPath) const
Urls have same base URL. Query items are ignored.
KLF_EXPORT QStringList klfSearchFind(const QString &wildcard_expression, int limit)
Find files matching a path with wildcards.