Compare commits

...

No commits in common. "v1.0.0" and "master" have entirely different histories.

24 changed files with 169 additions and 14 deletions

9
.gitignore vendored Normal file → Executable file
View File

@ -4,6 +4,11 @@
# Whitelist ONLY the documentation, assets, and the Windows installer # Whitelist ONLY the documentation, assets, and the Windows installer
!README.md !README.md
!version.txt !version.txt
!PastorsStudyPro_Setup.exe !PastorsSermonPro_Setup.exe
!*.png !installer_build/
!installer_build/PastorsSermonPro_Installer.run
!resources/
!resources/*.bmp
!resources/*.png
!resources/*.ico
!.gitignore !.gitignore

Binary file not shown.

35
README.md Normal file → Executable file
View File

@ -1,14 +1,32 @@
<p align="center"> <p align="center">
<img src="splash.png" alt="Pastors Study Pro" width="600"> <img src="splash.png" alt="Pastors Sermon Pro" width="600">
</p> </p>
# Pastors Study Pro 📖✨ # Pastors Sermon Pro 📖✨
**Version 1.1.7**
## ✨ What's New in V1.1.7
- **Dynamic Theming Engine**: Complete support for Light and Dark modes across all components (Bible Reader, Sermon Builder, Search, etc.).
- **Integrated Model Downloader**: Background downloading of AI models from HuggingFace with status bar progress tracking.
- **Enhanced Bug Reporting**: Added screenshot capture and automated debug.log attachment for faster troubleshooting.
- **Hardware-Aware AI**: Smart recommendations for AI models based on your system's RAM and GPU specs.
## ✨ What's New in V1.0.7
- **Audio Optimization:** Reduced default video volume to 40% to prevent distortion and speaker crackling on some systems.
- **Improved Multimedia:** Finalized FFmpeg dependency bundling for stable video playback.
- **Enhanced Settings:** Added version tracking and manual update controls.
## ✨ What's New in V1.0.3
- **Smart Updates:** The app now correctly compares version numbers to only notify you of truly newer updates.
- **Intro Video ESC:** You can now press ESC to exit full screen mode during the introductory video.
- **Improved Startup:** Essential library and resource folders are now automatically created on first launch.
- **Expanded Library:** Includes "The Pilgrim's Progress" by John Bunyan as a default library resource.
[![Status](https://img.shields.io/badge/Status-Development-orange.svg)](https://git.linology.tech/michael/PastorsSermonPro) [![Status](https://img.shields.io/badge/Status-Development-orange.svg)](https://git.linology.tech/michael/PastorsSermonPro)
[![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux-blue.svg)](https://git.linology.tech/michael/PastorsSermonPro) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux-blue.svg)](https://git.linology.tech/michael/PastorsSermonPro)
[![License](https://img.shields.io/badge/License-Proprietary-red.svg)](https://git.linology.tech/michael/PastorsSermonPro) [![License](https://img.shields.io/badge/License-Proprietary-red.svg)](https://git.linology.tech/michael/PastorsSermonPro)
**Pastors Study Pro** is a comprehensive desktop suite built specifically for sermon preparation and deep theological research. Designed to be a pastor's primary workspace, it centralizes Scripture, reference materials, and manuscript writing into one powerful, distraction-free environment. **Pastors Sermon Pro** is a comprehensive desktop suite built specifically for sermon preparation and deep theological research. Designed to be a pastor's primary workspace, it centralizes Scripture, reference materials, and manuscript writing into one powerful, distraction-free environment.
--- ---
@ -29,7 +47,7 @@
- **Personal Library Manager:** Add your own PDF and ePub study materials to your local library and read them alongside your notes. - **Personal Library Manager:** Add your own PDF and ePub study materials to your local library and read them alongside your notes.
### 🤖 AI Assistant (Optional Tool) ### 🤖 AI Assistant (Optional Tool)
Pastors Study Pro includes an **optional** AI assistant designed to help with brainstorming, outlining, and cross-referencing. It is an *added tool* to assist your study, not replace it. Pastors Sermon Pro includes an **optional** AI assistant designed to help with brainstorming, outlining, and cross-referencing. It is an *added tool* to assist your study, not replace it.
- **Privacy First:** Choose **Local Mode** to run AI models directly on your hardware with no data ever leaving your machine. - **Privacy First:** Choose **Local Mode** to run AI models directly on your hardware with no data ever leaving your machine.
- **Hybrid Choice:** Use **Online Mode** via API for high-speed assistance without needing to download large local models. - **Hybrid Choice:** Use **Online Mode** via API for high-speed assistance without needing to download large local models.
@ -38,15 +56,10 @@ Pastors Study Pro includes an **optional** AI assistant designed to help with br
## 🚀 Installation ## 🚀 Installation
### 🪟 Windows ### 🪟 Windows
1. Download the latest `PastorsStudyPro_Setup.exe`. 1. **[Download the Latest Release](https://git.linology.tech/michael/PastorsSermonPro/releases)**
2. Run the installer. 2. Run the `PastorsSermonPro_Setup.exe` installer.
3. **Optional AI:** During setup, you can choose to download the offline AI model. This is purely optional; the core Bible study features do not require it. 3. **Optional AI:** During setup, you can choose to download the offline AI model. This is purely optional; the core Bible study features do not require it.
### 🐧 Linux (Ubuntu/Debian)
1. Download `PastorsStudyPro_Installer.run`.
2. Make it executable: `chmod +x PastorsStudyPro_Installer.run`.
3. Run with sudo: `sudo ./PastorsStudyPro_Installer.run`.
--- ---
## 🛠 Development ## 🛠 Development

0
ai.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.9 MiB

After

Width:  |  Height:  |  Size: 2.9 MiB

0
f8e67864-3723-48a6-9878-4169b409eb3c.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

0
library.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
resources/ai.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
resources/bible.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

BIN
resources/bible.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
resources/installer_splash.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

BIN
resources/library.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

16
resources/resources.qrc Executable file
View File

@ -0,0 +1,16 @@
<RCC>
<qresource prefix="/">
<file alias="splash.png">../splash.png</file>
<file>bible.png</file>
<file>search.png</file>
<file>sermon.png</file>
<file>ai.png</file>
<file>library.png</file>
<file>setting.png</file>
<file alias="help.html">../src/help.html</file>
<file>welcome/welcome_1.png</file>
<file>welcome/welcome_2.png</file>
<file>welcome/welcome_3.png</file>
<file>welcome/welcome_4.png</file>
</qresource>
</RCC>

BIN
resources/search.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
resources/sermon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
resources/setting.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

BIN
resources/settings.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
resources/welcome/welcome_1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

BIN
resources/welcome/welcome_2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
resources/welcome/welcome_3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
resources/welcome/welcome_4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

0
setting.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 3.0 MiB

After

Width:  |  Height:  |  Size: 3.0 MiB

BIN
splash.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 3.2 MiB

121
src/UpdateManager.cpp Executable file
View File

@ -0,0 +1,121 @@
#include "UpdateManager.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QStandardPaths>
#include <QDir>
#include <QDesktopServices>
#include <QUrl>
#include <algorithm>
UpdateManager::UpdateManager(const QString& currentVersion, QObject *parent)
: QObject(parent), m_currentVersion(currentVersion), m_downloadFile(nullptr)
{
m_network = new QNetworkAccessManager(this);
}
void UpdateManager::checkForUpdates() {
emit checkStarted();
QUrl url;
if (m_isBeta) {
url = QUrl("https://git.linology.tech/michael/Pastors-Sermon-Pro-Bug-Reports/raw/branch/main/version.txt");
} else {
url = QUrl("https://git.linology.tech/michael/PastorsSermonPro/raw/branch/master/version.txt");
}
QNetworkRequest request;
request.setUrl(url);
QNetworkReply* reply = m_network->get(request);
connect(reply, &QNetworkReply::finished, this, &UpdateManager::onVersionFetched);
}
void UpdateManager::onVersionFetched() {
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
if (!reply) return;
if (reply->error() == QNetworkReply::NoError) {
m_latestVersion = QString::fromUtf8(reply->readAll()).trimmed();
// Smart semantic version comparison
if (!m_latestVersion.isEmpty() && isNewer(m_currentVersion, m_latestVersion)) {
// Construct the download URL for the Windows installer
if (m_isBeta) {
m_downloadUrl = QString("https://git.linology.tech/michael/Pastors-Sermon-Pro-Bug-Reports/releases/download/v%1/PastorsSermonPro_Setup.exe").arg(m_latestVersion);
} else {
m_downloadUrl = QString("https://git.linology.tech/michael/PastorsSermonPro/releases/download/v%1/PastorsSermonPro_Setup.exe").arg(m_latestVersion);
}
emit updateAvailable(m_latestVersion, m_downloadUrl);
} else {
emit noUpdateFound();
}
} else {
emit errorOccurred("Could not reach update server: " + reply->errorString());
}
reply->deleteLater();
}
void UpdateManager::startDownload(const QString& url) {
m_downloadUrl = url;
QString tempPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QString fileName = tempPath + "/PastorsSermonPro_Update.exe";
m_downloadFile = new QFile(fileName, this);
if (!m_downloadFile->open(QIODevice::WriteOnly)) {
emit errorOccurred("Could not create temporary file for download.");
delete m_downloadFile;
m_downloadFile = nullptr;
return;
}
QNetworkRequest request;
request.setUrl(QUrl(m_downloadUrl));
QNetworkReply* reply = m_network->get(request);
connect(reply, &QNetworkReply::downloadProgress, this, &UpdateManager::onDownloadProgress);
connect(reply, &QNetworkReply::finished, this, &UpdateManager::onDownloadFinished);
}
void UpdateManager::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
if (bytesTotal > 0) {
int percentage = static_cast<int>((bytesReceived * 100) / bytesTotal);
emit progressUpdated(percentage);
}
}
void UpdateManager::onDownloadFinished() {
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
if (!reply) return;
if (reply->error() == QNetworkReply::NoError) {
m_downloadFile->write(reply->readAll());
m_downloadFile->flush();
QString filePath = m_downloadFile->fileName();
m_downloadFile->close();
emit downloadFinished(filePath);
// Launch the installer
QProcess::startDetached(filePath);
} else {
emit errorOccurred("Download failed: " + reply->errorString());
m_downloadFile->close();
m_downloadFile->remove();
}
reply->deleteLater();
}
bool UpdateManager::isNewer(const QString& current, const QString& latest) {
QStringList curParts = current.split('.');
QStringList latParts = latest.split('.');
int maxLen = std::max(curParts.size(), latParts.size());
for (int i = 0; i < maxLen; ++i) {
int cur = (i < curParts.size()) ? curParts[i].toInt() : 0;
int lat = (i < latParts.size()) ? latParts[i].toInt() : 0;
if (lat > cur) return true;
if (lat < cur) return false;
}
return false;
}

2
version.txt Normal file → Executable file
View File

@ -1 +1 @@
1.0.0 1.1.8