Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SQLite based cache #132

Draft
wants to merge 29 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
a7c0f22
Initial SQLite cache support
kraxarn Aug 8, 2021
646347f
Download if needed instead
kraxarn Mar 11, 2023
61f7371
Auto generate header with model
kraxarn Mar 11, 2023
7fa5900
Remove sqlite_modern_cpp
kraxarn Mar 11, 2023
a73f9e6
Some initial work with C API
kraxarn Mar 11, 2023
9adaa27
Log open errors
kraxarn Mar 11, 2023
c4f0699
.db instead
kraxarn Mar 13, 2023
b396e6b
Support for multiple statements
kraxarn Mar 13, 2023
74bac22
Generic error logging
kraxarn Mar 13, 2023
73f0e48
Install system sqlite3
kraxarn Mar 18, 2023
09344ca
sqlite3 is already a dependency of Qt
kraxarn Mar 18, 2023
23665e8
Make header public for now
kraxarn Mar 18, 2023
2b18ef4
Write directly to file instead
kraxarn Mar 18, 2023
d836e52
Use bundled sqlite3 for releases
kraxarn Mar 18, 2023
23e2abe
path is expected to be a path
kraxarn Mar 18, 2023
688d621
Nicer way to specify sqlite version
kraxarn Mar 18, 2023
d26fd34
Also make source public
kraxarn Mar 18, 2023
3113581
Update to sqlite 3.41.1
kraxarn Mar 18, 2023
9508092
Fix year
kraxarn Mar 18, 2023
8c738eb
Fix duplicate variable name
kraxarn Mar 18, 2023
e6c4643
Fix not logging version
kraxarn Mar 18, 2023
0ed30df
Explicitly cast to const char*
kraxarn Mar 18, 2023
190bf91
Use UTF-16 for open
kraxarn Mar 18, 2023
bbe7c3a
Reinterpret as const char*
kraxarn Mar 18, 2023
e44a3f0
Enable C support
kraxarn Mar 19, 2023
3585669
Keep sqlite private
kraxarn Mar 19, 2023
4aa241e
Make sure dl is linked
kraxarn Mar 19, 2023
267b7c3
Fix linking
kraxarn Mar 19, 2023
fe47ae5
Move sqlite out of third-party and keep private
kraxarn Mar 19, 2023
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
2 changes: 1 addition & 1 deletion .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
arch: ${{env.QT_ARCH}}

- name: Configure CMake
run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr -DUSE_TESTS=ON -DUSE_LTO=ON
run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr -DUSE_TESTS=ON -DUSE_LTO=ON -DUSE_BUNDLED_SQLITE=ON

- name: Build
run: cmake --build . --config $BUILD_TYPE
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:

- name: Configure CMake
working-directory: ${{runner.workspace}}/build
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DUSE_TESTS=ON -DUSE_LTO=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DUSE_TESTS=ON -DUSE_LTO=ON -DUSE_BUNDLED_SQLITE=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

- name: Build
working-directory: ${{runner.workspace}}/build
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# C++11
set(CMAKE_CXX_STANDARD 11)
# C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Optional D-Bus support
Expand Down
9 changes: 8 additions & 1 deletion lib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.5)
project(spotify-qt-lib LANGUAGES CXX VERSION 0.7)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Optional Qt implementations
Expand All @@ -26,10 +26,17 @@ target_include_directories(spotify-qt-lib PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/include"
${LIB_QT_HEADERS})

# Generated headers
target_include_directories(${PROJECT_NAME} PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/res")

# Third-party libraries
add_subdirectory(thirdparty)
target_link_libraries(spotify-qt-lib PUBLIC spotify-qt-lib-third-party)

# SQLite3 (private)
include(sqlite3.cmake)

# Version macros
target_compile_definitions(spotify-qt-lib PUBLIC LIB_VERSION="v${PROJECT_VERSION}")

Expand Down
51 changes: 51 additions & 0 deletions lib/include/lib/cache/dbcache.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#pragma once

#include "lib/cache.hpp"
#include "lib/cache/jsoncache.hpp"
#include "lib/paths/paths.hpp"

using sqlite3 = struct sqlite3;
using sqlite3_stmt = struct sqlite3_stmt;

namespace lib
{
class db_cache: public cache
{
public:
explicit db_cache(const lib::paths &paths);
virtual ~db_cache();

void from_json(const json_cache &json_cache);

auto get_album_image(const std::string &url) const -> std::vector<unsigned char> override;
void set_album_image(const std::string &url,
const std::vector<unsigned char> &data) override;
auto get_album_image_path(const std::string &url) const -> std::string override;

auto get_album(const std::string &album_id) const -> lib::spt::album override;
void set_album(const spt::album &album) override;

auto get_playlists() const -> std::vector<lib::spt::playlist> override;
void set_playlists(const std::vector<spt::playlist> &playlists) override;

auto get_playlist(const std::string &id) const -> lib::spt::playlist override;
void set_playlist(const spt::playlist &playlist) override;

auto get_tracks(const std::string &id) const -> std::vector<lib::spt::track> override;
void set_tracks(const std::string &id, const std::vector<lib::spt::track> &tracks) override;
auto all_tracks() const -> std::map<std::string, std::vector<lib::spt::track>> override;

auto get_track_info(const spt::track &track) const -> lib::spt::track_info override;
void set_track_info(const spt::track &track, const spt::track_info &track_info) override;

void add_crash(const crash_info &info) override;
auto get_all_crashes() const -> std::vector<lib::crash_info> override;

private:
sqlite3 *db = nullptr;

auto make_storage(const ghc::filesystem::path &path) -> bool;
auto exec(const char *query, const std::function<void(sqlite3_stmt * )> &callback) -> bool;
void err(const char *message, int code);
};
}
1 change: 1 addition & 0 deletions lib/res/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.hpp
Loading