File indexing completed on 2024-04-28 05:52:24

0001 /*
0002  * Copyright 2010-2012 Bart Kroon <bart@tarmack.eu>
0003  * Copyright 2012, 2013 Martin Sandsmark <martin.sandsmark@kde.org>
0004  * 
0005  * Redistribution and use in source and binary forms, with or without
0006  * modification, are permitted provided that the following conditions
0007  * are met:
0008  * 
0009  * 1. Redistributions of source code must retain the above copyright
0010  *   notice, this list of conditions and the following disclaimer.
0011  * 2. Redistributions in binary form must reproduce the above copyright
0012  *   notice, this list of conditions and the following disclaimer in the
0013  *   documentation and/or other materials provided with the distribution.
0014  * 
0015  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0016  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0017  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0018  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0019  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0020  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0021  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0022  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0023  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0024  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0025  */
0026 
0027 #ifndef APPLICATIONS_H
0028 #define APPLICATIONS_H
0029 
0030 #include "Provider.h"
0031 #include <QHash>
0032 
0033 class QFileSystemWatcher;
0034 class QFileInfo;
0035 
0036 class Applications : public Provider
0037 {
0038     Q_OBJECT
0039 public:
0040     Applications(QObject *parent);
0041 
0042     ~Applications();
0043 
0044 public slots:
0045     QList<ProviderResult*> getResults(QString query) override;
0046     int launch(const QString &selected) override;
0047 
0048 private slots:
0049     void onDirectoryChanged(const QString &path);
0050 
0051 private:
0052     struct Application {
0053         QString name;
0054         QString exec;
0055         qint64 lastModified = -1;
0056         QString icon;
0057         QString keywords;
0058 
0059         bool isValid() const {
0060             return !name.isEmpty() &&
0061                 !exec.isEmpty() &&
0062                 lastModified != -1;
0063         }
0064     };
0065 
0066     void loadDir(const QString &path);
0067 
0068     ProviderResult *createApp(const Application &service);
0069     Application loadDesktopFile(const QFileInfo &file);
0070 
0071     QHash<QString, Application> m_applications;
0072     QFileSystemWatcher *m_fsWatcher;
0073 };
0074 
0075 #endif
0076 // kate: indent-mode cstyle; space-indent on; indent-width 4;