File indexing completed on 2024-05-19 04:47:12

0001 #pragma once
0002 
0003 #include <QObject>
0004 #include <QUrl>
0005 
0006 #include "models/projectsmodel.h"
0007 
0008 class QSettings;
0009 class GlobalSettings : public QObject
0010 {
0011     Q_OBJECT
0012     Q_PROPERTY(QString cloneDir READ cloneDir WRITE setCloneDir NOTIFY cloneDirChanged)
0013 
0014 public:
0015     static GlobalSettings *instance()
0016     {
0017         if(!m_instance)
0018         {
0019             m_instance = new GlobalSettings();
0020         }
0021 
0022         return m_instance;
0023     }
0024 
0025     QString cloneDir() const;
0026 
0027 public Q_SLOTS:
0028     void setCloneDir(QString cloneDir);
0029 
0030 Q_SIGNALS:
0031     void cloneDirChanged(QString cloneDir);
0032 
0033 private:
0034     GlobalSettings();
0035     inline static GlobalSettings *m_instance = nullptr;
0036     QSettings *m_settings;
0037     QString m_cloneDir;
0038 };
0039 
0040 class ProjectManager : public QObject
0041 {
0042     Q_OBJECT
0043     Q_PROPERTY(ProjectsModel *projectsModel READ projectsModel FINAL)
0044 //    Q_PROPERTY(GlobalSettings* settings READ settings CONSTANT FINAL)
0045 
0046 public:
0047     explicit ProjectManager(QObject *parent = nullptr);
0048 
0049     ProjectsModel *projectsModel();
0050 
0051     static QUrl projectLogo(const QUrl &url);
0052     static QUrl readmeFile(const QUrl &url);
0053 
0054     static FMH::MODEL repoInfo(const QUrl &url);
0055 
0056     static GlobalSettings* settings();
0057 
0058 public Q_SLOTS:
0059     /**
0060      * @brief addProject
0061      * Adds an existing local project/repo
0062      * @param url
0063      * Directory path of the repository
0064      */
0065     void addProject(const QString &url);
0066 
0067     /**
0068      * @brief addRemoteProject
0069      * Adds a project/repo that needs to be cloned.
0070      * @param remoteUrl
0071      * Remote url of the reposotory to clone
0072      * @param localUrl
0073      * Where to clone the repository
0074      */
0075     void addRemoteProject(const QString &remoteUrl, const QString &localUrl);
0076     static bool isGitDir(const QString &url);
0077 
0078 private:
0079     ProjectsModel * m_projectsModel;
0080 
0081     bool saveHistory(const QUrl &url);
0082     QList<QUrl> loadHistory();
0083     FMH::MODEL_LIST reposData(const QList<QUrl> &urls);
0084 
0085     GlobalSettings* m_settings;
0086 
0087 Q_SIGNALS:
0088 
0089 };
0090