Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9908a65
Email editor template
Surowizator Dec 1, 2025
9e71bbc
Login dialog
Surowizator Dec 3, 2025
2dd2558
Asterisks now cover password in login screen
k-kosiorowski Dec 4, 2025
d0a6221
Seperate dialogs for logging in and creating accounts
k-kosiorowski Dec 6, 2025
1ea1174
Added retrieval of chosen login in LoginDialog
k-kosiorowski Dec 6, 2025
4612352
Fixed styling in README
k-kosiorowski Dec 6, 2025
a8d0ed1
Removed password field from LoginDialog
k-kosiorowski Dec 7, 2025
4e3a9c1
Removed debug log
k-kosiorowski Dec 8, 2025
b0ff669
Fixed tvision build and updated readme
Surowizator Dec 10, 2025
ebbe706
Added passing the logged in account to backend
k-kosiorowski Dec 10, 2025
84822ec
Added InboxWindow
mkdusia Dec 10, 2025
dd6d358
Added send/cancel buttons in EmailWindow
mkdusia Dec 10, 2025
06568f6
Remove debug logs from InboxWindow
mkdusia Dec 10, 2025
4821177
Organised app's color palette (and project design)
mkdusia Dec 10, 2025
5c48cbe
Removed ftxui from dependencies
Surowizator Dec 10, 2025
f1fdf3b
Allow for other IMAP&SMTP servers in the backend
tfkls Jan 7, 2026
f117202
Try to connect backend to frontend
tfkls Jan 7, 2026
6b8f769
Add UI for custom root cert locations for accounts
tfkls Jan 7, 2026
dbd0c7e
Remove per-account root cert handling
tfkls Jan 7, 2026
76c8461
Added storing and retrieval of sent emails
Surowizator Jan 17, 2026
c7c3cf4
Removed old frontend
Surowizator Jan 17, 2026
427c61c
Bump tvision version to an existing commit
tfkls Jan 20, 2026
43a0548
Add a working PKGBUILD configuration for libalpm-based distros
tfkls Jan 21, 2026
9b8a217
Patch the todo.md file with more recent ideas
tfkls Jan 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 22 additions & 29 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(BUILD_SHARED_LIBS ON)

# == PACKAGE VERSIONS ==
set(PKGVER_FTXUI v5.0.0)
set(PKGVER_JSON v3.12.0)
set(PKGVER_LIBXML2 v2.15.0)
set(PKGVER_SQLITE3 v3.50.2)
set(PKGVER_VMIME 7046a4360bbeea21d1d8b5cfa4589bb4df7f980d)
set(PKGVER_TVISION 423aeb568a181ffebb3695859654385950588a93)
set(PKGVER_TVISION 85aaeca0999c8b53006c556ccda063f143d259ca)

option(ENABLE_LOG "Enable logging" OFF)

option(EXTERNAL_VMIME "If OFF, then build VMime and link to it for development" OFF)
option(EXTERNAL_SQLITE "If OFF, then build SQLite3 and link to it for development" OFF)
option(EXTERNAL_LIBXML2 "If OFF, then build LibXml2 and link to it for development" OFF)

if(ENABLE_LOG)
add_definitions(-DLOG)
Expand Down Expand Up @@ -49,9 +52,6 @@ set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
set(FETCHCONTENT_QUIET OFF)

# TVISION
# add_subdirectory(deps/tvision)
# deferred_link_libraries(PRIVATE tvision)

FetchContent_Declare(tvision
GIT_REPOSITORY https://github.com/magiblot/tvision.git
GIT_TAG ${PKGVER_TVISION}
Expand All @@ -60,28 +60,13 @@ FetchContent_Declare(tvision
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(tvision)

# FTXUI
FetchContent_Declare(ftxui
GIT_REPOSITORY https://github.com/arthursonzogni/ftxui.git
GIT_TAG ${PKGVER_FTXUI}
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(ftxui)
deferred_link_libraries(
PRIVATE ftxui::screen
PRIVATE ftxui::dom
PRIVATE ftxui::component
PRIVATE tvision
)

# JSON
FetchContent_Declare(nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG ${PKGVER_JSON}
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE
URL https://github.com/nlohmann/json/releases/download/${PKGVER_JSON}/json.tar.xz
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(nlohmann_json)
Expand All @@ -91,13 +76,14 @@ deferred_link_libraries(

# libxml2
FetchContent_Declare(libxml2
GIT_REPOSITORY https://github.com/GNOME/libxml2.git
GIT_TAG ${PKGVER_LIBXML2}
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE
URL https://github.com/GNOME/libxml2/archive/refs/tags/${PKGVER_LIBXML2}.tar.gz
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(libxml2)
if (NOT EXTERNAL_LIBXML2)
FetchContent_MakeAvailable(libxml2)
else()
find_package(libxml2 REQUIRED)
endif()
deferred_link_libraries(
LibXml2::LibXml2
)
Expand All @@ -110,7 +96,11 @@ FetchContent_Declare(sqlite3
GIT_SHALLOW TRUE
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(sqlite3)
if (NOT EXTERNAL_SQLITE)
FetchContent_MakeAvailable(sqlite3)
else()
find_package(SQLite3 REQUIRED)
endif()
deferred_link_libraries(
PRIVATE SQLite::SQLite3
)
Expand All @@ -130,6 +120,7 @@ if(NOT EXTERNAL_VMIME)
GIT_SHALLOW TRUE
PREFIX ${VMIME_INSTALL_DIR}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VMIME_INSTALL_DIR}
-DCMAKE_BUILD_TYPE=Release
-DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF
# ^ above requires the sendmail util. we don't need it for now, so let's minimize deps while we can.
-DVMIME_HAVE_SASL_SUPPORT=OFF
Expand All @@ -140,6 +131,8 @@ if(NOT EXTERNAL_VMIME)
# ^ this also fails due to some doxygen issues, but it's not a big deal.
-DVMIME_BUILD_STATIC_LIBRARY=OFF
-DVMIME_BUILD_SHARED_LIBRARY=ON
# ^ NOTE: As much as I'd like to link statically, I gave up after fighting w/ the archaic VMime CMake for ~6 hours,
# we just live with the fact that vmime must be linked dynamically
)
deferred_include_directories(${VMIME_INSTALL_DIR}/include)
deferred_link_directories(${VMIME_INSTALL_DIR}/lib)
Expand All @@ -150,7 +143,7 @@ else()
find_package(vmime REQUIRED)
deferred_include_directories(${vmime_INCLUDE_DIRS})
deferred_link_libraries(
${VMIME_LIBRARIES}
-lvmime ${VMIME_LIBRARIES}
)
endif()

Expand Down
14 changes: 1 addition & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ Email-Client [is now on AUR](https://aur.archlinux.org/packages/email-client)!

# Manual Build

#### 0. Initialize submodules
If this is your first clone of the repository (or after pulling new submodules):

`git submodule update --init --recursive`

#### 1. Create a build directory for the C++ project
`mkdir build && cd build`

Expand All @@ -22,15 +17,8 @@ If this is your first clone of the repository (or after pulling new submodules):
`cmake --build .`

#### 4. Run the C++ email client application
./email_client
`./email_client`


If you have [`just`](https://just.systems) installed, you can also use the
`build`, `run`, `buildrun` and `clean` recipes from the provided `Justfile`.

# System Requirements
Make sure the following tools are installed on your system:

`sudo apt update`

`sudo apt install build-essential cmake git libncursesw5-dev libgpm-dev`
3 changes: 3 additions & 0 deletions aur/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*
!PKGBUILD
!.gitignore
69 changes: 69 additions & 0 deletions aur/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Please report maintenance problems to the project GitHub issue tracker
# i.e. https://github.com/Student-Team-Projects/email-client/issues

pkgname=email-client
pkgver=2.0.0
pkgrel=1
pkgdesc="A CLI email client for Arch Linux"
arch=('x86_64')
url="https://github.com/Student-Team-Projects/email-client"
license=('GPL3')

# Runtime Dependencies
depends=(
'gcc-libs'
'openssl'
'icu'
'gnutls'
'ncurses'
'libffi'
'sqlite'
'libxml2'

# AUR – skips having to install it by hand just for us
'vmime'
)

# Build Dependencies
makedepends=(
'base-devel'
'cmake'
'make'
'gcc'
'git'
'pkgconf'
)

# Sources and Checksums
# WARN: PIN THESE BACK BEFORE PUSHING PKGBUILD TO AUR
# source=("https://github.com/Student-Team-Projects/Email-Client/archive/refs/tags/${pkgver}.tar.gz")
# sha256sums=('TODO!')

source=("http://127.0.0.1:8000/${pkgver}.tar.gz")
sha256sums=('SKIP')

prepare() {
cd "$srcdir" || exit 1
tar xzvf "${pkgver}.tar.gz"
}

build() {
cd "$srcdir" || exit 1
mkdir -p build
cd build || exit 1

cmake -DCMAKE_BUILD_TYPE=Release \
-DEXTERNAL_SQLITE=ON \
-DEXTERNAL_LIBXML2=ON \
-DEXTERNAL_VMIME=ON ..
make
}

package() {
cd "$srcdir/build" || exit 1

# Install the email client binary
install -Dm755 "email_client" "$pkgdir/usr/bin/email_client"

# TODO: Consider adding manpages (e.g via scdoc ;)
}
Loading