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 }