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

0001 #include "projectmanager.h"
0002 #include <QDebug>
0003 #include <MauiKit3/FileBrowsing/fmstatic.h>
0004 
0005 #include <QSettings>
0006 
0007 ProjectManager::ProjectManager(QObject *parent) : QObject(parent)
0008   ,m_projectsModel(nullptr)
0009 {
0010 
0011 }
0012 
0013 ProjectsModel *ProjectManager::projectsModel()
0014 {
0015     if(m_projectsModel)
0016         return m_projectsModel;
0017 
0018     m_projectsModel = new ProjectsModel(this);
0019     m_projectsModel->setList(reposData(this->loadHistory()));
0020     return m_projectsModel;
0021 }
0022 
0023 QUrl ProjectManager::projectLogo(const QUrl &url)
0024 {
0025     QUrl res;
0026     auto logo = url.toString() + "/logo.png";
0027 
0028     if(FMStatic::fileExists(QUrl(logo)))
0029     {
0030        res = QUrl(logo);
0031     }
0032 
0033     return res;
0034 }
0035 
0036 QUrl ProjectManager::readmeFile(const QUrl &url)
0037 {
0038     QUrl res;
0039     auto readme = url.toString() + "/README.md";
0040 
0041     if(FMStatic::fileExists(QUrl(readme)))
0042     {
0043        res = QUrl(readme);
0044     }
0045 
0046     return res;
0047 }
0048 
0049 void ProjectManager::addProject(const QString &url)
0050 {
0051     const QUrl localUrl = QUrl::fromUserInput(url);
0052     if(isGitDir(localUrl.toString()))
0053     {
0054         qDebug() << "Prtoject exists and it is a directory" << url;
0055 
0056         if(this->saveHistory(localUrl))
0057         {
0058             if(m_projectsModel)
0059                 m_projectsModel->insert(repoInfo(localUrl));
0060 
0061         }
0062     }
0063 }
0064 
0065 void ProjectManager::addRemoteProject(const QString &remoteUrl, const QString &localUrl)
0066 {
0067 
0068 }
0069 
0070 bool ProjectManager::isGitDir(const QString &url)
0071 {
0072     if(FMH::fileExists(url))
0073     {
0074        if(FMH::fileExists(url+"/.git"))
0075            return true;
0076     }
0077 
0078     return false;
0079 }
0080 
0081 FMH::MODEL ProjectManager::repoInfo(const QUrl &url)
0082 {
0083     FMH::MODEL res = FMStatic::getFileInfoModel(url);
0084 
0085     res[FMH::MODEL_KEY::ARTWORK] = ProjectManager::projectLogo(url).toString();
0086 
0087 
0088     return res;
0089 }
0090 
0091 GlobalSettings *ProjectManager::settings()
0092 {
0093     return GlobalSettings::instance();
0094 }
0095 
0096 bool ProjectManager::saveHistory(const QUrl &url)
0097 {
0098     auto urls = this->loadHistory();
0099     if (urls.contains(url))
0100         return false;
0101 
0102     urls << url;
0103     QSettings settings;
0104     settings.beginGroup("HISTORY");
0105 settings.setValue("URLS", QUrl::toStringList(urls));
0106 settings.endGroup();    
0107     return true;
0108 }
0109 
0110 QList<QUrl> ProjectManager::loadHistory()
0111 {
0112  QSettings settings;
0113     settings.beginGroup("HISTORY");
0114     auto urls = settings.value("URLS", QStringList()).toStringList();
0115 settings.endGroup();    
0116 
0117     urls.removeDuplicates();
0118     auto res = QUrl::fromStringList(urls);
0119     res.removeAll(QString(""));
0120     return res;
0121 }
0122 
0123 FMH::MODEL_LIST ProjectManager::reposData(const QList<QUrl> &urls)
0124 {
0125     FMH::MODEL_LIST  res;
0126 
0127     for(const auto &url : urls)
0128     {
0129         if(isGitDir(url.toString()))
0130         {
0131             res << repoInfo(url);
0132         }
0133     }
0134     return res;
0135 }
0136 
0137 QString GlobalSettings::cloneDir() const
0138 {
0139     return m_cloneDir;
0140 }
0141 
0142 void GlobalSettings::setCloneDir(QString cloneDir)
0143 {
0144     if (m_cloneDir == cloneDir)
0145         return;
0146 
0147     m_cloneDir = cloneDir;
0148 
0149     m_settings->beginGroup("General");
0150     m_settings->setValue("CloneDir", m_cloneDir);
0151     m_settings->endGroup();
0152     m_settings->sync();
0153 
0154     emit cloneDirChanged(m_cloneDir);
0155 }
0156 
0157 GlobalSettings::GlobalSettings() : QObject(nullptr)
0158   ,m_settings(new QSettings(this))
0159   ,m_cloneDir(FMStatic::HomePath)
0160 {
0161     m_settings->beginGroup("General");
0162     m_cloneDir = m_settings->value("CloneDir", m_cloneDir).toString();
0163 
0164     m_settings->endGroup();
0165 }