Merge branch 'master' into homebrew_debug

This commit is contained in:
ebbit1q 2025-10-22 01:07:25 +02:00 committed by GitHub
commit 119e689888
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
746 changed files with 7081 additions and 5996 deletions

View file

@ -11,7 +11,8 @@
# --debug or --release sets the build type ie CMAKE_BUILD_TYPE # --debug or --release sets the build type ie CMAKE_BUILD_TYPE
# --ccache [<size>] uses ccache and shows stats, optionally provide size # --ccache [<size>] uses ccache and shows stats, optionally provide size
# --dir <dir> sets the name of the build dir, default is "build" # --dir <dir> sets the name of the build dir, default is "build"
# uses env: BUILDTYPE MAKE_INSTALL MAKE_PACKAGE PACKAGE_TYPE PACKAGE_SUFFIX MAKE_SERVER MAKE_TEST USE_CCACHE CCACHE_SIZE BUILD_DIR CMAKE_GENERATOR # --target-macos-version <version> sets the min os version - only used for macOS builds
# uses env: BUILDTYPE MAKE_INSTALL MAKE_PACKAGE PACKAGE_TYPE PACKAGE_SUFFIX MAKE_SERVER MAKE_TEST USE_CCACHE CCACHE_SIZE BUILD_DIR CMAKE_GENERATOR TARGET_MACOS_VERSION
# (correspond to args: --debug/--release --install --package <package type> --suffix <suffix> --server --test --ccache <ccache_size> --dir <dir>) # (correspond to args: --debug/--release --install --package <package type> --suffix <suffix> --server --test --ccache <ccache_size> --dir <dir>)
# exitcode: 1 for failure, 3 for invalid arguments # exitcode: 1 for failure, 3 for invalid arguments
@ -79,6 +80,15 @@ while [[ $# != 0 ]]; do
BUILD_DIR="$1" BUILD_DIR="$1"
shift shift
;; ;;
'--target-macos-version')
shift
if [[ $# == 0 ]]; then
echo "::error file=$0::--target-macos-version expects an argument"
exit 3
fi
TARGET_MACOS_VERSION="$1"
shift
;;
*) *)
echo "::error file=$0::unrecognized option: $1" echo "::error file=$0::unrecognized option: $1"
exit 3 exit 3
@ -139,9 +149,34 @@ function ccachestatsverbose() {
# Compile # Compile
if [[ $RUNNER_OS == macOS ]]; then if [[ $RUNNER_OS == macOS ]]; then
if [[ $TARGET_MACOS_VERSION ]]; then
# CMAKE_OSX_DEPLOYMENT_TARGET is a vanilla cmake flag needed to compile to target macOS version
flags+=("-DCMAKE_OSX_DEPLOYMENT_TARGET=$TARGET_MACOS_VERSION")
# vcpkg dependencies need a vcpkg triplet file to compile to the target macOS version
# an easy way is to copy the x64-osx.cmake file and modify it
triplets_dir="/tmp/cmake/triplets"
triplet_version="custom-triplet"
triplet_file="$triplets_dir/$triplet_version.cmake"
arch=$(uname -m)
if [[ $arch == x86_64 ]]; then
arch="x64"
fi
mkdir -p "$triplets_dir"
cp "../vcpkg/triplets/$arch-osx.cmake" "$triplet_file"
echo "set(VCPKG_CMAKE_SYSTEM_VERSION $TARGET_MACOS_VERSION)" >>"$triplet_file"
echo "set(VCPKG_OSX_DEPLOYMENT_TARGET $TARGET_MACOS_VERSION)" >>"$triplet_file"
flags+=("-DVCPKG_OVERLAY_TRIPLETS=$triplets_dir")
flags+=("-DVCPKG_HOST_TRIPLET=$triplet_version")
flags+=("-DVCPKG_TARGET_TRIPLET=$triplet_version")
echo "::group::Generated triplet $triplet_file"
cat "$triplet_file"
echo "::endgroup::"
fi
echo "::group::Signing Certificate" echo "::group::Signing Certificate"
if [[ -n "$MACOS_CERTIFICATE_NAME" ]]; then if [[ -n "$MACOS_CERTIFICATE_NAME" ]]; then
echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 echo "$MACOS_CERTIFICATE" | base64 --decode >"certificate.p12"
security create-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain security create-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain
security default-keychain -s build.keychain security default-keychain -s build.keychain
security set-keychain-settings -t 3600 -l build.keychain security set-keychain-settings -t 3600 -l build.keychain
@ -153,6 +188,28 @@ if [[ $RUNNER_OS == macOS ]]; then
echo "No signing certificate configured. Skipping set up of keychain in macOS environment." echo "No signing certificate configured. Skipping set up of keychain in macOS environment."
fi fi
echo "::endgroup::" echo "::endgroup::"
if [[ $MAKE_PACKAGE ]]; then
# Workaround https://github.com/actions/runner-images/issues/7522
# have hdiutil repeat the command 10 times in hope of success
hdiutil_script="/tmp/hdiutil.sh"
# shellcheck disable=SC2016
echo '#!/bin/bash
i=0
while ! hdiutil "$@"; do
if (( ++i >= 10 )); then
echo "Error: hdiutil failed $i times!" >&2
break
fi
sleep 1
done' >"$hdiutil_script"
chmod +x "$hdiutil_script"
flags+=(-DCPACK_COMMAND_HDIUTIL="$hdiutil_script")
fi
elif [[ $RUNNER_OS == Windows ]]; then
# Enable MTT, see https://devblogs.microsoft.com/cppblog/improved-parallelism-in-msbuild/
# and https://devblogs.microsoft.com/cppblog/cpp-build-throughput-investigation-and-tune-up/#multitooltask-mtt
buildflags+=(-- -p:UseMultiToolTask=true -p:EnableClServerMode=true)
fi fi
if [[ $USE_CCACHE ]]; then if [[ $USE_CCACHE ]]; then
@ -167,13 +224,7 @@ cmake .. "${flags[@]}"
echo "::endgroup::" echo "::endgroup::"
echo "::group::Build project" echo "::group::Build project"
if [[ $RUNNER_OS == Windows ]]; then cmake --build . "${buildflags[@]}"
# Enable MTT, see https://devblogs.microsoft.com/cppblog/improved-parallelism-in-msbuild/
# and https://devblogs.microsoft.com/cppblog/cpp-build-throughput-investigation-and-tune-up/#multitooltask-mtt
cmake --build . "${buildflags[@]}" -- -p:UseMultiToolTask=true -p:EnableClServerMode=true
else
cmake --build . "${buildflags[@]}"
fi
echo "::endgroup::" echo "::endgroup::"
if [[ $USE_CCACHE ]]; then if [[ $USE_CCACHE ]]; then
@ -197,11 +248,6 @@ fi
if [[ $MAKE_PACKAGE ]]; then if [[ $MAKE_PACKAGE ]]; then
echo "::group::Create package" echo "::group::Create package"
if [[ $RUNNER_OS == macOS ]]; then
# Workaround https://github.com/actions/runner-images/issues/7522
echo "killing XProtectBehaviorService"; sudo pkill -9 XProtect >/dev/null || true;
echo "waiting for XProtectBehaviorService kill"; while pgrep "XProtect"; do sleep 3; done;
fi
cmake --build . --target package --config "$BUILDTYPE" cmake --build . --target package --config "$BUILDTYPE"
echo "::endgroup::" echo "::endgroup::"

View file

@ -4,25 +4,39 @@ permissions:
contents: write contents: write
id-token: write id-token: write
attestations: write attestations: write
actions: write # needed for ccache action to be able to delete gha caches
on: on:
push: push:
branches: branches:
- master - master
paths-ignore: paths:
- '**.md' - '*/**' # matches all files not in root
- 'webclient/**' - '!**.md'
- '.github/workflows/web-*.yml' - '!.github/**'
- '.github/workflows/translations-*.yml' - '!.husky/**'
- '.github/workflows/docker-release.yml' - '!.tx/**'
- '!doc/**'
- '!webclient/**'
- '.github/workflows/desktop-build.yml'
- 'CMakeLists.txt'
- 'vcpkg.json'
- 'vcpkg'
tags: tags:
- '*' - '*'
pull_request: pull_request:
paths-ignore: paths:
- '**.md' - '*/**' # matches all files not in root
- 'webclient/**' - '!**.md'
- '.github/workflows/web-*.yml' - '!.github/**'
- '.github/workflows/translations-*.yml' - '!.husky/**'
- '!.tx/**'
- '!doc/**'
- '!webclient/**'
- '.github/workflows/desktop-build.yml'
- 'CMakeLists.txt'
- 'vcpkg.json'
- 'vcpkg'
# Cancel earlier, unfinished runs of this workflow on the same branch (unless on master) # Cancel earlier, unfinished runs of this workflow on the same branch (unless on master)
concurrency: concurrency:
@ -232,10 +246,11 @@ jobs:
include: include:
- target: 13 - target: 13
soc: Intel soc: Intel
os: macos-13 os: macos-15-intel
xcode: "14.3.1" xcode: "16.4"
type: Release type: Release
make_package: 1 make_package: 1
override_target: 13
- target: 14 - target: 14
soc: Apple soc: Apple
@ -247,7 +262,7 @@ jobs:
- target: 15 - target: 15
soc: Apple soc: Apple
os: macos-15 os: macos-15
xcode: "16.2" xcode: "16.4"
type: Release type: Release
make_package: 1 make_package: 1
@ -312,6 +327,7 @@ jobs:
CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}' CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}'
VCPKG_DISABLE_METRICS: 1 VCPKG_DISABLE_METRICS: 1
VCPKG_BINARY_SOURCES: 'clear;files,${{ steps.vcpkg-cache.outputs.path }},readwrite' VCPKG_BINARY_SOURCES: 'clear;files,${{ steps.vcpkg-cache.outputs.path }},readwrite'
TARGET_MACOS_VERSION: ${{ matrix.override_target }}
run: .ci/compile.sh --server --test --ccache "$CCACHE_SIZE" --vcpkg run: .ci/compile.sh --server --test --ccache "$CCACHE_SIZE" --vcpkg
- name: Sign app bundle - name: Sign app bundle

View file

@ -1,13 +1,22 @@
name: Code Style (C++) name: Code Style (C++)
on: on:
# push trigger not needed for linting, we do not allow direct pushes to master
pull_request: pull_request:
paths-ignore: paths:
- '**.md' - '*/**' # matches all files not in root
- 'webclient/**' - '!**.md'
- '.github/workflows/web-*.yml' - '!.ci/**'
- '.github/workflows/translations-*.yml' - '!.github/**'
- '.github/workflows/docker-release.yml' - '!.husky/**'
- '!.tx/**'
- '!doc/**'
- '!webclient/**'
- '.ci/lint_cpp.sh'
- '.github/workflows/desktop-lint.yml'
- '.clang-format'
- '.cmake-format.json'
- 'format.sh'
jobs: jobs:
format: format:

View file

@ -7,6 +7,7 @@ on:
- cron: '0 0 15 1,4,7,10 *' - cron: '0 0 15 1,4,7,10 *'
pull_request: pull_request:
paths: paths:
- '.tx/**'
- '.github/workflows/translations-pull.yml' - '.github/workflows/translations-pull.yml'
jobs: jobs:

View file

@ -7,6 +7,7 @@ on:
- cron: '0 0 1 1,4,7,10 *' - cron: '0 0 1 1,4,7,10 *'
pull_request: pull_request:
paths: paths:
- '.ci/update_translation_source_strings.sh'
- '.github/workflows/translations-push.yml' - '.github/workflows/translations-push.yml'
jobs: jobs:
@ -30,10 +31,10 @@ jobs:
- name: Update Cockatrice translation source - name: Update Cockatrice translation source
id: cockatrice id: cockatrice
shell: bash shell: bash
env: run: |
FILE: 'cockatrice/cockatrice_en@source.ts' FILE="cockatrice/cockatrice_en@source.ts"
DIRS: 'cockatrice/src common' export DIRS="cockatrice/src $(find . -maxdepth 1 -type d -name 'libcockatrice_*')"
run: .ci/update_translation_source_strings.sh FILE="$FILE" DIRS="$DIRS" .ci/update_translation_source_strings.sh
- name: Update Oracle translation source - name: Update Oracle translation source
id: oracle id: oracle

View file

@ -5,14 +5,16 @@ on:
branches: branches:
- master - master
paths: paths:
- '.github/workflows/web-*.yml' - '.husky/**'
- 'webclient/**' - 'webclient/**'
- '!**.md' - '!**.md'
- '.github/workflows/web-build.yml'
pull_request: pull_request:
paths: paths:
- '.github/workflows/web-*.yml' - '.husky/**'
- 'webclient/**' - 'webclient/**'
- '!**.md' - '!**.md'
- '.github/workflows/web-build.yml'
jobs: jobs:
build-web: build-web:

View file

@ -1,11 +1,12 @@
name: Code Style (TypeScript) name: Code Style (TypeScript)
on: on:
# push trigger not needed for linting, we do not allow direct pushes to master
pull_request: pull_request:
paths: paths:
- '.github/workflows/web-*.yml'
- 'webclient/**' - 'webclient/**'
- '!**.md' - '!**.md'
- '.github/workflows/web-lint.yml'
jobs: jobs:
ESLint: ESLint:

View file

@ -328,7 +328,13 @@ endif()
include(CPack) include(CPack)
add_subdirectory(common) add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_protocol ${CMAKE_BINARY_DIR}/libcockatrice_protocol)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_network ${CMAKE_BINARY_DIR}/libcockatrice_network)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_deck_list ${CMAKE_BINARY_DIR}/libcockatrice_deck_list)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_rng ${CMAKE_BINARY_DIR}/libcockatrice_rng)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_settings ${CMAKE_BINARY_DIR}/libcockatrice_settings)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_card ${CMAKE_BINARY_DIR}/libcockatrice_card)
add_subdirectory(${CMAKE_SOURCE_DIR}/libcockatrice_utility ${CMAKE_BINARY_DIR}/libcockatrice_utility)
if(WITH_SERVER) if(WITH_SERVER)
add_subdirectory(servatrice) add_subdirectory(servatrice)
set(CPACK_INSTALL_CMAKE_PROJECTS "Servatrice;Servatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS}) set(CPACK_INSTALL_CMAKE_PROJECTS "Servatrice;Servatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})

View file

@ -7,66 +7,39 @@ project(Cockatrice VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${
set(cockatrice_SOURCES set(cockatrice_SOURCES
${VERSION_STRING_CPP} ${VERSION_STRING_CPP}
# sort by alphabetical order, so that there is no debate about where to add new sources to the list # sort by alphabetical order, so that there is no debate about where to add new sources to the list
src/card/card_info.cpp src/client/network/update/client/update_downloader.cpp
src/card/card_relation.cpp src/client/network/interfaces/deck_stats_interface.cpp
src/card/card_set.cpp src/client/network/interfaces/tapped_out_interface.cpp
src/card/card_set_list.cpp
src/card/exact_card.cpp
src/card/printing_info.cpp
src/client/deck_editor_menu.cpp
src/client/get_text_with_max.cpp
src/client/network/client_update_checker.cpp
src/client/network/parsers/deck_link_to_api_transformer.cpp src/client/network/parsers/deck_link_to_api_transformer.cpp
src/client/network/release_channel.cpp src/client/network/update/client/client_update_checker.cpp
src/client/network/replay_timeline_widget.cpp src/client/network/update/client/release_channel.cpp
src/client/network/sets_model.cpp src/client/network/update/card_spoiler/spoiler_background_updater.cpp
src/client/network/spoiler_background_updater.cpp
src/client/replay_manager.cpp
src/client/sound_engine.cpp src/client/sound_engine.cpp
src/client/tapped_out_interface.cpp src/interface/widgets/dialogs/dlg_connect.cpp
src/client/update_downloader.cpp src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp
src/database/card_database.cpp src/interface/widgets/dialogs/dlg_create_game.cpp
src/database/card_database_loader.cpp src/interface/widgets/dialogs/dlg_default_tags_editor.cpp
src/database/card_database_manager.cpp src/interface/widgets/dialogs/dlg_edit_avatar.cpp
src/database/card_database_querier.cpp src/interface/widgets/dialogs/dlg_edit_password.cpp
src/database/model/card_database_model.cpp src/interface/widgets/dialogs/dlg_edit_tokens.cpp
src/database/model/card_database_display_model.cpp src/interface/widgets/dialogs/dlg_edit_user.cpp
src/database/model/card/card_completer_proxy_model.cpp src/interface/widgets/dialogs/dlg_filter_games.cpp
src/database/model/card/card_search_model.cpp src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp
src/database/model/token/token_display_model.cpp src/interface/widgets/dialogs/dlg_forgot_password_request.cpp
src/database/model/token/token_edit_model.cpp src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp
src/database/parser/card_database_parser.cpp src/interface/widgets/dialogs/dlg_load_deck.cpp
src/database/parser/cockatrice_xml_3.cpp src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp
src/database/parser/cockatrice_xml_4.cpp src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp
src/deck/custom_line_edit.cpp src/interface/widgets/dialogs/dlg_load_remote_deck.cpp
src/deck/deck_list_model.cpp src/interface/widgets/dialogs/dlg_manage_sets.cpp
src/deck/deck_loader.cpp src/interface/widgets/dialogs/dlg_register.cpp
src/deck/deck_stats_interface.cpp src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp
src/dialogs/dlg_connect.cpp src/interface/widgets/dialogs/dlg_settings.cpp
src/dialogs/dlg_convert_deck_to_cod_format.cpp src/interface/widgets/dialogs/dlg_startup_card_check.cpp
src/dialogs/dlg_create_game.cpp src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp
src/dialogs/dlg_default_tags_editor.cpp src/interface/widgets/dialogs/dlg_update.cpp
src/dialogs/dlg_edit_avatar.cpp src/interface/widgets/dialogs/dlg_view_log.cpp
src/dialogs/dlg_edit_password.cpp src/interface/widgets/dialogs/tip_of_the_day.cpp
src/dialogs/dlg_edit_tokens.cpp
src/dialogs/dlg_edit_user.cpp
src/dialogs/dlg_filter_games.cpp
src/dialogs/dlg_forgot_password_challenge.cpp
src/dialogs/dlg_forgot_password_request.cpp
src/dialogs/dlg_forgot_password_reset.cpp
src/dialogs/dlg_load_deck.cpp
src/dialogs/dlg_load_deck_from_clipboard.cpp
src/dialogs/dlg_load_deck_from_website.cpp
src/dialogs/dlg_load_remote_deck.cpp
src/dialogs/dlg_manage_sets.cpp
src/dialogs/dlg_register.cpp
src/dialogs/dlg_select_set_for_cards.cpp
src/dialogs/dlg_settings.cpp
src/dialogs/dlg_startup_card_check.cpp
src/dialogs/dlg_tip_of_the_day.cpp
src/dialogs/dlg_update.cpp
src/dialogs/dlg_view_log.cpp
src/dialogs/tip_of_the_day.cpp
src/filters/deck_filter_string.cpp src/filters/deck_filter_string.cpp
src/filters/filter_builder.cpp src/filters/filter_builder.cpp
src/filters/filter_card.cpp src/filters/filter_card.cpp
@ -138,9 +111,16 @@ set(cockatrice_SOURCES
src/game/zones/table_zone.cpp src/game/zones/table_zone.cpp
src/game/zones/view_zone.cpp src/game/zones/view_zone.cpp
src/game/zones/view_zone_widget.cpp src/game/zones/view_zone_widget.cpp
src/interface/card_picture_loader/card_picture_loader.cpp
src/interface/card_picture_loader/card_picture_loader_local.cpp
src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp
src/interface/card_picture_loader/card_picture_loader_status_bar.cpp
src/interface/card_picture_loader/card_picture_loader_worker.cpp
src/interface/card_picture_loader/card_picture_loader_worker_work.cpp
src/interface/card_picture_loader/card_picture_to_load.cpp
src/interface/layouts/flow_layout.cpp src/interface/layouts/flow_layout.cpp
src/interface/layouts/overlap_layout.cpp src/interface/layouts/overlap_layout.cpp
src/interface/line_edit_completer.cpp src/interface/widgets/utility/line_edit_completer.cpp
src/interface/pixel_map_generator.cpp src/interface/pixel_map_generator.cpp
src/interface/theme_manager.cpp src/interface/theme_manager.cpp
src/interface/widgets/cards/additional_info/color_identity_widget.cpp src/interface/widgets/cards/additional_info/color_identity_widget.cpp
@ -181,6 +161,7 @@ set(cockatrice_SOURCES
src/interface/widgets/general/layout_containers/flow_widget.cpp src/interface/widgets/general/layout_containers/flow_widget.cpp
src/interface/widgets/general/layout_containers/overlap_control_widget.cpp src/interface/widgets/general/layout_containers/overlap_control_widget.cpp
src/interface/widgets/general/layout_containers/overlap_widget.cpp src/interface/widgets/general/layout_containers/overlap_widget.cpp
src/interface/widgets/menus/deck_editor_menu.cpp
src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp
src/interface/widgets/printing_selector/card_amount_widget.cpp src/interface/widgets/printing_selector/card_amount_widget.cpp
src/interface/widgets/printing_selector/printing_selector.cpp src/interface/widgets/printing_selector/printing_selector.cpp
@ -192,6 +173,22 @@ set(cockatrice_SOURCES
src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp
src/interface/widgets/quick_settings/settings_button_widget.cpp src/interface/widgets/quick_settings/settings_button_widget.cpp
src/interface/widgets/quick_settings/settings_popup_widget.cpp src/interface/widgets/quick_settings/settings_popup_widget.cpp
src/interface/widgets/replay/replay_manager.cpp
src/interface/widgets/replay/replay_timeline_widget.cpp
src/interface/widgets/server/chat_view/chat_view.cpp
src/interface/widgets/server/game_selector.cpp
src/interface/widgets/server/games_model.cpp
src/interface/widgets/server/handle_public_servers.cpp
src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp
src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp
src/interface/widgets/server/user/user_context_menu.cpp
src/interface/widgets/server/user/user_info_box.cpp
src/interface/widgets/server/user/user_info_connection.cpp
src/interface/widgets/server/user/user_list_manager.cpp
src/interface/widgets/server/user/user_list_widget.cpp
src/interface/widgets/utility/custom_line_edit.cpp
src/interface/widgets/utility/get_text_with_max.cpp
src/interface/widgets/utility/sequence_edit.cpp
src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp
src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp
@ -217,94 +214,50 @@ set(cockatrice_SOURCES
src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp
src/interface/window_main.cpp src/interface/window_main.cpp
src/main.cpp src/main.cpp
src/picture_loader/picture_loader.cpp src/interface/widgets/tabs/abstract_tab_deck_editor.cpp
src/picture_loader/picture_loader_local.cpp src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp
src/picture_loader/picture_loader_request_status_display_widget.cpp src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp
src/picture_loader/picture_loader_status_bar.cpp src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp
src/picture_loader/picture_loader_worker.cpp src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp
src/picture_loader/picture_loader_worker_work.cpp src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp
src/picture_loader/picture_to_load.cpp src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp
src/server/abstract_client.cpp src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp
src/server/chat_view/chat_view.cpp src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp
src/server/game_selector.cpp src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp
src/server/games_model.cpp src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp
src/server/handle_public_servers.cpp src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp
src/server/local_client.cpp src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp
src/server/local_server.cpp src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp
src/server/local_server_interface.cpp src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp
src/server/pending_command.cpp src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp
src/server/remote/remote_client.cpp src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp
src/server/remote/remote_decklist_tree_widget.cpp src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp
src/server/remote/remote_replay_list_tree_widget.cpp src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp
src/server/user/user_context_menu.cpp src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp
src/server/user/user_info_box.cpp src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp
src/server/user/user_info_connection.cpp src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp
src/server/user/user_list_manager.cpp src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp
src/server/user/user_list_widget.cpp src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp
src/settings/cache_settings.cpp src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp
src/settings/card_counter_settings.cpp src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp
src/settings/card_database_settings.cpp src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp
src/settings/card_override_settings.cpp src/interface/widgets/tabs/tab.cpp
src/settings/debug_settings.cpp src/interface/widgets/tabs/tab_account.cpp
src/settings/download_settings.cpp src/interface/widgets/tabs/tab_admin.cpp
src/settings/game_filters_settings.cpp src/interface/widgets/tabs/tab_deck_editor.cpp
src/settings/layouts_settings.cpp src/interface/widgets/tabs/tab_deck_storage.cpp
src/settings/message_settings.cpp src/interface/widgets/tabs/tab_game.cpp
src/settings/recents_settings.cpp src/interface/widgets/tabs/tab_home.cpp
src/settings/servers_settings.cpp src/interface/widgets/tabs/tab_logs.cpp
src/settings/settings_manager.cpp src/interface/widgets/tabs/tab_message.cpp
src/settings/shortcut_treeview.cpp src/interface/widgets/tabs/tab_replays.cpp
src/settings/shortcuts_settings.cpp src/interface/widgets/tabs/tab_room.cpp
src/tabs/abstract_tab_deck_editor.cpp src/interface/widgets/tabs/tab_server.cpp
src/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp src/interface/widgets/tabs/tab_supervisor.cpp
src/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp src/interface/widgets/tabs/tab_visual_database_display.cpp
src/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp
src/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp
src/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
src/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp
src/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp
src/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp
src/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp
src/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp
src/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp
src/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp
src/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp
src/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp
src/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp
src/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp
src/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp
src/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp
src/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp
src/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp
src/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp
src/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp
src/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp
src/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp
src/tabs/api/edhrec/tab_edhrec.cpp
src/tabs/api/edhrec/tab_edhrec_main.cpp
src/tabs/tab.cpp
src/tabs/tab_account.cpp
src/tabs/tab_admin.cpp
src/tabs/tab_deck_editor.cpp
src/tabs/tab_deck_storage.cpp
src/tabs/tab_game.cpp
src/tabs/tab_home.cpp
src/tabs/tab_logs.cpp
src/tabs/tab_message.cpp
src/tabs/tab_replays.cpp
src/tabs/tab_room.cpp
src/tabs/tab_server.cpp
src/tabs/tab_supervisor.cpp
src/tabs/tab_visual_database_display.cpp
src/tabs/visual_deck_editor/tab_deck_editor_visual.cpp
src/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp
src/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
src/utility/card_info_comparator.cpp
src/utility/deck_list_sort_filter_proxy_model.cpp
src/utility/key_signals.cpp
src/utility/levenshtein.cpp
src/utility/logger.cpp
src/utility/sequence_edit.cpp
) )
add_subdirectory(sounds) add_subdirectory(sounds)
@ -316,15 +269,23 @@ configure_file(
set(cockatrice_RESOURCES cockatrice.qrc) set(cockatrice_RESOURCES cockatrice.qrc)
if(UPDATE_TRANSLATIONS) if(UPDATE_TRANSLATIONS)
# Cockatrice main sources
file(GLOB_RECURSE translate_cockatrice_SRCS ${CMAKE_SOURCE_DIR}/cockatrice/src/*.cpp file(GLOB_RECURSE translate_cockatrice_SRCS ${CMAKE_SOURCE_DIR}/cockatrice/src/*.cpp
${CMAKE_SOURCE_DIR}/cockatrice/src/*.h ${CMAKE_SOURCE_DIR}/cockatrice/src/*.h
) )
file(GLOB_RECURSE translate_common_SRCS ${CMAKE_SOURCE_DIR}/common/*.cpp ${CMAKE_SOURCE_DIR}/common/*.h)
set(translate_SRCS ${translate_cockatrice_SRCS} ${translate_common_SRCS}) # All libcockatrice_* libraries (recursively)
file(GLOB_RECURSE translate_lib_SRCS ${CMAKE_SOURCE_DIR}/libcockatrice_*/**/*.cpp
${CMAKE_SOURCE_DIR}/libcockatrice_*/**/*.h
)
# Combine all sources for translation
set(translate_SRCS ${translate_cockatrice_SRCS} ${translate_lib_SRCS})
set(cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/cockatrice_en@source.ts") set(cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/cockatrice_en@source.ts")
else() else()
file(GLOB cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts") file(GLOB cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts")
endif(UPDATE_TRANSLATIONS) endif()
if(WIN32) if(WIN32)
set(cockatrice_SOURCES ${cockatrice_SOURCES} cockatrice.rc) set(cockatrice_SOURCES ${cockatrice_SOURCES} cockatrice.rc)
@ -354,12 +315,6 @@ set(DESKTOPDIR
CACHE STRING "desktop file destination" CACHE STRING "desktop file destination"
) )
# Include directories
include_directories(../common)
include_directories(${PROTOBUF_INCLUDE_DIR})
include_directories(${CMAKE_BINARY_DIR}/common)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(COCKATRICE_MAC_QM_INSTALL_DIR "cockatrice.app/Contents/Resources/translations") set(COCKATRICE_MAC_QM_INSTALL_DIR "cockatrice.app/Contents/Resources/translations")
set(COCKATRICE_UNIX_QM_INSTALL_DIR "share/cockatrice/translations") set(COCKATRICE_UNIX_QM_INSTALL_DIR "share/cockatrice/translations")
set(COCKATRICE_WIN32_QM_INSTALL_DIR "translations") set(COCKATRICE_WIN32_QM_INSTALL_DIR "translations")
@ -399,9 +354,20 @@ elseif(Qt5_FOUND)
endif() endif()
if(Qt5_FOUND) if(Qt5_FOUND)
target_link_libraries(cockatrice cockatrice_common ${COCKATRICE_QT_MODULES}) target_link_libraries(
cockatrice
libcockatrice_card
libcockatrice_deck_list
libcockatrice_utility
libcockatrice_network
libcockatrice_rng
${COCKATRICE_QT_MODULES}
)
else() else()
target_link_libraries(cockatrice PUBLIC cockatrice_common ${COCKATRICE_QT_MODULES}) target_link_libraries(
cockatrice PUBLIC libcockatrice_card libcockatrice_deck_list libcockatrice_utility libcockatrice_network
libcockatrice_rng ${COCKATRICE_QT_MODULES}
)
endif() endif()
if(UNIX) if(UNIX)

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,5 @@
#include "deck_stats_interface.h" #include "deck_stats_interface.h"
#include "deck_list.h"
#include "deck_list_card_node.h"
#include <QDesktopServices> #include <QDesktopServices>
#include <QMessageBox> #include <QMessageBox>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
@ -10,6 +7,8 @@
#include <QNetworkRequest> #include <QNetworkRequest>
#include <QRegularExpression> #include <QRegularExpression>
#include <QUrlQuery> #include <QUrlQuery>
#include <libcockatrice/deck_list/deck_list.h>
#include <libcockatrice/deck_list/deck_list_card_node.h>
DeckStatsInterface::DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent) DeckStatsInterface::DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent)
: QObject(parent), cardDatabase(_cardDatabase) : QObject(parent), cardDatabase(_cardDatabase)

View file

@ -7,10 +7,9 @@
#ifndef DECKSTATS_INTERFACE_H #ifndef DECKSTATS_INTERFACE_H
#define DECKSTATS_INTERFACE_H #define DECKSTATS_INTERFACE_H
#include "../database/card_database.h"
#include "deck_list.h"
#include <QObject> #include <QObject>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/deck_list/deck_list.h>
class QByteArray; class QByteArray;
class QNetworkAccessManager; class QNetworkAccessManager;

View file

@ -1,8 +1,5 @@
#include "tapped_out_interface.h" #include "tapped_out_interface.h"
#include "deck_list.h"
#include "deck_list_card_node.h"
#include <QDesktopServices> #include <QDesktopServices>
#include <QMessageBox> #include <QMessageBox>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
@ -10,6 +7,8 @@
#include <QNetworkRequest> #include <QNetworkRequest>
#include <QRegularExpression> #include <QRegularExpression>
#include <QUrlQuery> #include <QUrlQuery>
#include <libcockatrice/deck_list/deck_list.h>
#include <libcockatrice/deck_list/deck_list_card_node.h>
TappedOutInterface::TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent) TappedOutInterface::TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent)
: QObject(parent), cardDatabase(_cardDatabase) : QObject(parent), cardDatabase(_cardDatabase)

View file

@ -7,11 +7,10 @@
#ifndef TAPPEDOUT_INTERFACE_H #ifndef TAPPEDOUT_INTERFACE_H
#define TAPPEDOUT_INTERFACE_H #define TAPPEDOUT_INTERFACE_H
#include "../database/card_database.h"
#include "deck_list.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QObject> #include <QObject>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/deck_list/deck_list.h>
inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface"); inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface");

View file

@ -6,10 +6,9 @@
#ifndef INTERFACE_JSON_DECK_PARSER_H #ifndef INTERFACE_JSON_DECK_PARSER_H
#define INTERFACE_JSON_DECK_PARSER_H #define INTERFACE_JSON_DECK_PARSER_H
#include "../../../deck/deck_loader.h"
#include <QJsonArray> #include <QJsonArray>
#include <QJsonObject> #include <QJsonObject>
#include <libcockatrice/deck_list/deck_loader.h>
class IJsonDeckParser class IJsonDeckParser
{ {

View file

@ -1,10 +1,7 @@
#include "spoiler_background_updater.h" #include "spoiler_background_updater.h"
#include "../../database/card_database.h" #include "../../../../interface/window_main.h"
#include "../../database/card_database_manager.h" #include "../../../../main.h"
#include "../../interface/window_main.h"
#include "../../main.h"
#include "../../settings/cache_settings.h"
#include <QApplication> #include <QApplication>
#include <QCryptographicHash> #include <QCryptographicHash>
@ -16,6 +13,9 @@
#include <QNetworkReply> #include <QNetworkReply>
#include <QUrl> #include <QUrl>
#include <QtConcurrent> #include <QtConcurrent>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/cache_settings.h>
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled" #define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
#define SPOILERS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/spoiler.xml" #define SPOILERS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/spoiler.xml"

View file

@ -1,8 +1,9 @@
#include "client_update_checker.h" #include "client_update_checker.h"
#include "../../settings/cache_settings.h"
#include "release_channel.h" #include "release_channel.h"
#include <libcockatrice/settings/cache_settings.h>
ClientUpdateChecker::ClientUpdateChecker(QObject *parent) : QObject(parent) ClientUpdateChecker::ClientUpdateChecker(QObject *parent) : QObject(parent)
{ {
} }

View file

@ -1,9 +1,8 @@
#include "sound_engine.h" #include "sound_engine.h"
#include "../settings/cache_settings.h"
#include <QDir> #include <QDir>
#include <QMediaPlayer> #include <QMediaPlayer>
#include <libcockatrice/settings/cache_settings.h>
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
#include <QAudioOutput> #include <QAudioOutput>

View file

@ -1,8 +1,9 @@
#include "deck_filter_string.h" #include "deck_filter_string.h"
#include "../database/card_database_manager.h"
#include "filter_string.h" #include "filter_string.h"
#include "lib/peglib.h"
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/utility/peglib.h>
static peg::parser search(R"( static peg::parser search(R"(
Start <- QueryPartList Start <- QueryPartList

View file

@ -1,6 +1,6 @@
#include "filter_builder.h" #include "filter_builder.h"
#include "../deck/custom_line_edit.h" #include "../interface/widgets/utility/custom_line_edit.h"
#include "filter_card.h" #include "filter_card.h"
#include <QComboBox> #include <QComboBox>

View file

@ -1,12 +1,11 @@
#include "filter_string.h" #include "filter_string.h"
#include "../../../common/lib/peglib.h"
#include <QByteArray> #include <QByteArray>
#include <QDebug> #include <QDebug>
#include <QRegularExpression> #include <QRegularExpression>
#include <QString> #include <QString>
#include <functional> #include <functional>
#include <libcockatrice/utility/peglib.h>
static peg::parser search(R"( static peg::parser search(R"(
Start <- QueryPartList Start <- QueryPartList

View file

@ -7,13 +7,13 @@
#ifndef FILTER_STRING_H #ifndef FILTER_STRING_H
#define FILTER_STRING_H #define FILTER_STRING_H
#include "../card/card_info.h"
#include "filter_tree.h" #include "filter_tree.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QMap> #include <QMap>
#include <QString> #include <QString>
#include <functional> #include <functional>
#include <libcockatrice/card/card_info.h>
#include <utility> #include <utility>
inline Q_LOGGING_CATEGORY(FilterStringLog, "filter_string"); inline Q_LOGGING_CATEGORY(FilterStringLog, "filter_string");

View file

@ -7,12 +7,12 @@
#ifndef FILTERTREE_H #ifndef FILTERTREE_H
#define FILTERTREE_H #define FILTERTREE_H
#include "../database/card_database.h"
#include "filter_card.h" #include "filter_card.h"
#include <QList> #include <QList>
#include <QMap> #include <QMap>
#include <QObject> #include <QObject>
#include <libcockatrice/card/database/card_database.h>
#include <utility> #include <utility>
class FilterTreeNode class FilterTreeNode

View file

@ -7,13 +7,13 @@
#ifndef COCKATRICE_ABSTRACT_GAME_H #ifndef COCKATRICE_ABSTRACT_GAME_H
#define COCKATRICE_ABSTRACT_GAME_H #define COCKATRICE_ABSTRACT_GAME_H
#include "../../../common/pb/game_replay.pb.h"
#include "game_event_handler.h" #include "game_event_handler.h"
#include "game_meta_info.h" #include "game_meta_info.h"
#include "game_state.h" #include "game_state.h"
#include "player/player_manager.h" #include "player/player_manager.h"
#include <QObject> #include <QObject>
#include <libcockatrice/protocol/pb/game_replay.pb.h>
class CardItem; class CardItem;
class TabGame; class TabGame;

View file

@ -1,11 +1,10 @@
#include "abstract_card_drag_item.h" #include "abstract_card_drag_item.h"
#include "../../settings/cache_settings.h"
#include <QCursor> #include <QCursor>
#include <QDebug> #include <QDebug>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QPainter> #include <QPainter>
#include <libcockatrice/settings/cache_settings.h>
static const float CARD_WIDTH_HALF = CARD_WIDTH / 2; static const float CARD_WIDTH_HALF = CARD_WIDTH / 2;
static const float CARD_HEIGHT_HALF = CARD_HEIGHT / 2; static const float CARD_HEIGHT_HALF = CARD_HEIGHT / 2;

View file

@ -1,9 +1,6 @@
#include "abstract_card_item.h" #include "abstract_card_item.h"
#include "../../database/card_database.h" #include "../../interface/card_picture_loader/card_picture_loader.h"
#include "../../database/card_database_manager.h"
#include "../../picture_loader/picture_loader.h"
#include "../../settings/cache_settings.h"
#include "../game_scene.h" #include "../game_scene.h"
#include <QCursor> #include <QCursor>
@ -11,6 +8,9 @@
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QPainter> #include <QPainter>
#include <algorithm> #include <algorithm>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/cache_settings.h>
AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, Player *_owner, int _id) AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, Player *_owner, int _id)
: ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0), : ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0),
@ -119,11 +119,11 @@ void AbstractCardItem::paintPicture(QPainter *painter, const QSizeF &translatedS
if (facedown || cardRef.name.isEmpty()) { if (facedown || cardRef.name.isEmpty()) {
// never reveal card color, always paint the card back // never reveal card color, always paint the card back
PictureLoader::getCardBackPixmap(translatedPixmap, translatedSize.toSize()); CardPictureLoader::getCardBackPixmap(translatedPixmap, translatedSize.toSize());
} else { } else {
// don't even spend time trying to load the picture if our size is too small // don't even spend time trying to load the picture if our size is too small
if (translatedSize.width() > 10) { if (translatedSize.width() > 10) {
PictureLoader::getPixmap(translatedPixmap, exactCard, translatedSize.toSize()); CardPictureLoader::getPixmap(translatedPixmap, exactCard, translatedSize.toSize());
if (translatedPixmap.isNull()) if (translatedPixmap.isNull())
paintImage = false; paintImage = false;
} else { } else {

View file

@ -7,11 +7,12 @@
#ifndef ABSTRACTCARDITEM_H #ifndef ABSTRACTCARDITEM_H
#define ABSTRACTCARDITEM_H #define ABSTRACTCARDITEM_H
#include "../../card/exact_card.h"
#include "arrow_target.h" #include "arrow_target.h"
#include "card_ref.h"
#include "graphics_item_type.h" #include "graphics_item_type.h"
#include <libcockatrice/card/printing/exact_card.h>
#include <libcockatrice/utility/card_ref.h>
class Player; class Player;
const int CARD_WIDTH = 72; const int CARD_WIDTH = 72;

View file

@ -1,11 +1,7 @@
#include "abstract_counter.h" #include "abstract_counter.h"
#include "../../settings/cache_settings.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../tabs/tab_game.h"
#include "../player/player.h" #include "../player/player.h"
#include "expression.h"
#include "pb/command_inc_counter.pb.h"
#include "pb/command_set_counter.pb.h"
#include "translate_counter_name.h" #include "translate_counter_name.h"
#include <QAction> #include <QAction>
@ -16,6 +12,10 @@
#include <QMenu> #include <QMenu>
#include <QPainter> #include <QPainter>
#include <QString> #include <QString>
#include <libcockatrice/protocol/pb/command_inc_counter.pb.h>
#include <libcockatrice/protocol/pb/command_set_counter.pb.h>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/utility/expression.h>
AbstractCounter::AbstractCounter(Player *_player, AbstractCounter::AbstractCounter(Player *_player,
int _id, int _id,

View file

@ -7,7 +7,7 @@
#ifndef COUNTER_H #ifndef COUNTER_H
#define COUNTER_H #define COUNTER_H
#include "../../interface/tearoff_menu.h" #include "../../interface/widgets/menus/tearoff_menu.h"
#include <QGraphicsItem> #include <QGraphicsItem>
#include <QInputDialog> #include <QInputDialog>

View file

@ -1,22 +1,22 @@
#define _USE_MATH_DEFINES #define _USE_MATH_DEFINES
#include "arrow_item.h" #include "arrow_item.h"
#include "../../card/card_info.h"
#include "../../settings/cache_settings.h"
#include "../player/player.h" #include "../player/player.h"
#include "../player/player_target.h" #include "../player/player_target.h"
#include "../zones/card_zone.h" #include "../zones/card_zone.h"
#include "card_item.h" #include "card_item.h"
#include "color.h"
#include "pb/command_attach_card.pb.h"
#include "pb/command_create_arrow.pb.h"
#include "pb/command_delete_arrow.pb.h"
#include <QDebug> #include <QDebug>
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QPainter> #include <QPainter>
#include <QtMath> #include <QtMath>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
#include <libcockatrice/protocol/pb/command_create_arrow.pb.h>
#include <libcockatrice/protocol/pb/command_delete_arrow.pb.h>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/utility/color.h>
ArrowItem::ArrowItem(Player *_player, int _id, ArrowTarget *_startItem, ArrowTarget *_targetItem, const QColor &_color) ArrowItem::ArrowItem(Player *_player, int _id, ArrowTarget *_startItem, ArrowTarget *_targetItem, const QColor &_color)
: QGraphicsItem(), player(_player), id(_id), startItem(_startItem), targetItem(_targetItem), targetLocked(false), : QGraphicsItem(), player(_player), id(_id), startItem(_startItem), targetItem(_targetItem), targetLocked(false),

View file

@ -1,9 +1,6 @@
#include "card_item.h" #include "card_item.h"
#include "../../card/card_info.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../settings/cache_settings.h"
#include "../../settings/card_counter_settings.h"
#include "../../tabs/tab_game.h"
#include "../game_scene.h" #include "../game_scene.h"
#include "../player/player.h" #include "../player/player.h"
#include "../zones/card_zone.h" #include "../zones/card_zone.h"
@ -12,12 +9,15 @@
#include "../zones/view_zone.h" #include "../zones/view_zone.h"
#include "arrow_item.h" #include "arrow_item.h"
#include "card_drag_item.h" #include "card_drag_item.h"
#include "pb/serverinfo_card.pb.h"
#include <QApplication> #include <QApplication>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QMenu> #include <QMenu>
#include <QPainter> #include <QPainter>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/protocol/pb/serverinfo_card.pb.h>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/settings/card_counter_settings.h>
CardItem::CardItem(Player *_owner, QGraphicsItem *parent, const CardRef &cardRef, int _cardid, CardZoneLogic *_zone) CardItem::CardItem(Player *_owner, QGraphicsItem *parent, const CardRef &cardRef, int _cardid, CardZoneLogic *_zone)
: AbstractCardItem(parent, cardRef, _owner, _cardid), zone(_zone), attacking(false), destroyOnZoneChange(false), : AbstractCardItem(parent, cardRef, _owner, _cardid), zone(_zone), attacking(false), destroyOnZoneChange(false),

View file

@ -9,7 +9,8 @@
#include "../zones/logic/card_zone_logic.h" #include "../zones/logic/card_zone_logic.h"
#include "abstract_card_item.h" #include "abstract_card_item.h"
#include "server/game/server_card.h"
#include <libcockatrice/network/server/remote/game/server_card.h>
class CardDatabase; class CardDatabase;
class CardDragItem; class CardDragItem;

View file

@ -1,10 +1,10 @@
#include "card_list.h" #include "card_list.h"
#include "../../card/card_info.h"
#include "card_item.h" #include "card_item.h"
#include <QDebug> #include <QDebug>
#include <algorithm> #include <algorithm>
#include <libcockatrice/card/card_info.h>
CardList::CardList(bool _contentsKnown) : QList<CardItem *>(), contentsKnown(_contentsKnown) CardList::CardList(bool _contentsKnown) : QList<CardItem *>(), contentsKnown(_contentsKnown)
{ {

View file

@ -1,16 +1,16 @@
#include "deck_view.h" #include "deck_view.h"
#include "../../card/card_info.h"
#include "../../interface/theme_manager.h" #include "../../interface/theme_manager.h"
#include "../../settings/cache_settings.h"
#include "deck_list.h"
#include "deck_list_card_node.h"
#include <QApplication> #include <QApplication>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QMouseEvent> #include <QMouseEvent>
#include <QtMath> #include <QtMath>
#include <algorithm> #include <algorithm>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/deck_list/deck_list.h>
#include <libcockatrice/deck_list/deck_list_card_node.h>
#include <libcockatrice/settings/cache_settings.h>
DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item,
const QPointF &_hotSpot, const QPointF &_hotSpot,

View file

@ -8,13 +8,13 @@
#define DECKVIEW_H #define DECKVIEW_H
#include "../board/abstract_card_drag_item.h" #include "../board/abstract_card_drag_item.h"
#include "pb/move_card_to_zone.pb.h"
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QGraphicsView> #include <QGraphicsView>
#include <QMap> #include <QMap>
#include <QMultiMap> #include <QMultiMap>
#include <QPixmap> #include <QPixmap>
#include <libcockatrice/protocol/pb/move_card_to_zone.pb.h>
class DeckList; class DeckList;
class InnerDecklistNode; class InnerDecklistNode;

View file

@ -1,29 +1,29 @@
#include "deck_view_container.h" #include "deck_view_container.h"
#include "../../database/card_database.h" #include "../../interface/card_picture_loader/card_picture_loader.h"
#include "../../database/card_database_manager.h" #include "../../interface/widgets/dialogs/dlg_load_deck.h"
#include "../../deck/deck_loader.h" #include "../../interface/widgets/dialogs/dlg_load_deck_from_clipboard.h"
#include "../../dialogs/dlg_load_deck.h" #include "../../interface/widgets/dialogs/dlg_load_deck_from_website.h"
#include "../../dialogs/dlg_load_deck_from_clipboard.h" #include "../../interface/widgets/dialogs/dlg_load_remote_deck.h"
#include "../../dialogs/dlg_load_deck_from_website.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../dialogs/dlg_load_remote_deck.h"
#include "../../picture_loader/picture_loader.h"
#include "../../server/pending_command.h"
#include "../../settings/cache_settings.h"
#include "../../tabs/tab_game.h"
#include "../game_scene.h" #include "../game_scene.h"
#include "deck_view.h" #include "deck_view.h"
#include "pb/command_deck_select.pb.h"
#include "pb/command_ready_start.pb.h"
#include "pb/command_set_sideboard_lock.pb.h"
#include "pb/command_set_sideboard_plan.pb.h"
#include "pb/response_deck_download.pb.h"
#include "trice_limits.h"
#include <QMessageBox> #include <QMessageBox>
#include <QMouseEvent> #include <QMouseEvent>
#include <QToolButton> #include <QToolButton>
#include <google/protobuf/descriptor.h> #include <google/protobuf/descriptor.h>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/deck_list/deck_loader.h>
#include <libcockatrice/protocol/pb/command_deck_select.pb.h>
#include <libcockatrice/protocol/pb/command_ready_start.pb.h>
#include <libcockatrice/protocol/pb/command_set_sideboard_lock.pb.h>
#include <libcockatrice/protocol/pb/command_set_sideboard_plan.pb.h>
#include <libcockatrice/protocol/pb/response_deck_download.pb.h>
#include <libcockatrice/protocol/pending_command.h>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/utility/trice_limits.h>
ToggleButton::ToggleButton(QWidget *parent) : QPushButton(parent), state(false) ToggleButton::ToggleButton(QWidget *parent) : QPushButton(parent), state(false)
{ {
@ -332,7 +332,7 @@ void DeckViewContainer::deckSelectFinished(const Response &r)
{ {
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext); const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
DeckLoader newDeck(QString::fromStdString(resp.deck())); DeckLoader newDeck(QString::fromStdString(resp.deck()));
PictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(newDeck.getCardRefList())); CardPictureLoader::cacheCardPixmaps(CardDatabaseManager::query()->getCards(newDeck.getCardRefList()));
setDeck(newDeck); setDeck(newDeck);
switchToDeckLoadedView(); switchToDeckLoadedView();
} }

View file

@ -7,9 +7,8 @@
#ifndef DECK_VIEW_CONTAINER_H #ifndef DECK_VIEW_CONTAINER_H
#define DECK_VIEW_CONTAINER_H #define DECK_VIEW_CONTAINER_H
#include "../../deck/deck_loader.h"
#include <QPushButton> #include <QPushButton>
#include <libcockatrice/deck_list/deck_loader.h>
class QVBoxLayout; class QVBoxLayout;
class AbstractCardItem; class AbstractCardItem;

View file

@ -1,6 +1,6 @@
#include "tabbed_deck_view_container.h" #include "tabbed_deck_view_container.h"
#include "../../tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "deck_view.h" #include "deck_view.h"
TabbedDeckViewContainer::TabbedDeckViewContainer(int _playerId, TabGame *parent) TabbedDeckViewContainer::TabbedDeckViewContainer(int _playerId, TabGame *parent)

View file

@ -1,13 +1,7 @@
#include "dlg_create_token.h" #include "dlg_create_token.h"
#include "../../database/card_database_manager.h"
#include "../../database/model/card_database_model.h"
#include "../../database/model/token/token_display_model.h"
#include "../../interface/widgets/cards/card_info_picture_widget.h" #include "../../interface/widgets/cards/card_info_picture_widget.h"
#include "../../main.h" #include "../../main.h"
#include "../../settings/cache_settings.h"
#include "deck_list.h"
#include "trice_limits.h"
#include <QCheckBox> #include <QCheckBox>
#include <QCloseEvent> #include <QCloseEvent>
@ -22,6 +16,12 @@
#include <QRadioButton> #include <QRadioButton>
#include <QTreeView> #include <QTreeView>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/card/database/model/card_database_model.h>
#include <libcockatrice/card/database/model/token/token_display_model.h>
#include <libcockatrice/deck_list/deck_list.h>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/utility/trice_limits.h>
DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *parent) DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *parent)
: QDialog(parent), predefinedTokens(_predefinedTokens) : QDialog(parent), predefinedTokens(_predefinedTokens)

View file

@ -1,7 +1,5 @@
#include "dlg_move_top_cards_until.h" #include "dlg_move_top_cards_until.h"
#include "../../database/card_database.h"
#include "../../database/card_database_manager.h"
#include "../../filters/filter_string.h" #include "../../filters/filter_string.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
@ -12,6 +10,8 @@
#include <QString> #include <QString>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWidget> #include <QWidget>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QStringList exprs, uint _numberOfHits, bool autoPlay) DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QStringList exprs, uint _numberOfHits, bool autoPlay)
: QDialog(parent) : QDialog(parent)

View file

@ -1,12 +1,11 @@
#include "dlg_roll_dice.h" #include "dlg_roll_dice.h"
#include "trice_limits.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QLabel> #include <QLabel>
#include <QSpinBox> #include <QSpinBox>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWidget> #include <QWidget>
#include <libcockatrice/utility/trice_limits.h>
DlgRollDice::DlgRollDice(QWidget *parent) : QDialog(parent) DlgRollDice::DlgRollDice(QWidget *parent) : QDialog(parent)
{ {

View file

@ -1,7 +1,8 @@
#include "game.h" #include "game.h"
#include "../tabs/tab_game.h" #include "../interface/widgets/tabs/tab_game.h"
#include "pb/event_game_joined.pb.h"
#include <libcockatrice/protocol/pb/event_game_joined.pb.h>
Game::Game(TabGame *_tab, Game::Game(TabGame *_tab,
QList<AbstractClient *> &_clients, QList<AbstractClient *> &_clients,

View file

@ -1,33 +1,34 @@
#include "game_event_handler.h" #include "game_event_handler.h"
#include "../server/abstract_client.h" #include "../interface/widgets/tabs/tab_game.h"
#include "../server/pending_command.h"
#include "../tabs/tab_game.h"
#include "abstract_game.h" #include "abstract_game.h"
#include "get_pb_extension.h"
#include "log/message_log_widget.h" #include "log/message_log_widget.h"
#include "pb/command_concede.pb.h"
#include "pb/command_delete_arrow.pb.h" #include <libcockatrice/network/client/abstract/abstract_client.h>
#include "pb/command_game_say.pb.h" #include <libcockatrice/protocol/get_pb_extension.h>
#include "pb/command_leave_game.pb.h" #include <libcockatrice/protocol/pb/command_concede.pb.h>
#include "pb/command_next_turn.pb.h" #include <libcockatrice/protocol/pb/command_delete_arrow.pb.h>
#include "pb/command_reverse_turn.pb.h" #include <libcockatrice/protocol/pb/command_game_say.pb.h>
#include "pb/command_set_active_phase.pb.h" #include <libcockatrice/protocol/pb/command_leave_game.pb.h>
#include "pb/context_connection_state_changed.pb.h" #include <libcockatrice/protocol/pb/command_next_turn.pb.h>
#include "pb/context_deck_select.pb.h" #include <libcockatrice/protocol/pb/command_reverse_turn.pb.h>
#include "pb/context_ping_changed.pb.h" #include <libcockatrice/protocol/pb/command_set_active_phase.pb.h>
#include "pb/event_game_closed.pb.h" #include <libcockatrice/protocol/pb/context_connection_state_changed.pb.h>
#include "pb/event_game_host_changed.pb.h" #include <libcockatrice/protocol/pb/context_deck_select.pb.h>
#include "pb/event_game_say.pb.h" #include <libcockatrice/protocol/pb/context_ping_changed.pb.h>
#include "pb/event_game_state_changed.pb.h" #include <libcockatrice/protocol/pb/event_game_closed.pb.h>
#include "pb/event_join.pb.h" #include <libcockatrice/protocol/pb/event_game_host_changed.pb.h>
#include "pb/event_kicked.pb.h" #include <libcockatrice/protocol/pb/event_game_say.pb.h>
#include "pb/event_leave.pb.h" #include <libcockatrice/protocol/pb/event_game_state_changed.pb.h>
#include "pb/event_player_properties_changed.pb.h" #include <libcockatrice/protocol/pb/event_join.pb.h>
#include "pb/event_reverse_turn.pb.h" #include <libcockatrice/protocol/pb/event_kicked.pb.h>
#include "pb/event_set_active_phase.pb.h" #include <libcockatrice/protocol/pb/event_leave.pb.h>
#include "pb/event_set_active_player.pb.h" #include <libcockatrice/protocol/pb/event_player_properties_changed.pb.h>
#include "pb/game_event_container.pb.h" #include <libcockatrice/protocol/pb/event_reverse_turn.pb.h>
#include <libcockatrice/protocol/pb/event_set_active_phase.pb.h>
#include <libcockatrice/protocol/pb/event_set_active_player.pb.h>
#include <libcockatrice/protocol/pb/game_event_container.pb.h>
#include <libcockatrice/protocol/pending_command.h>
GameEventHandler::GameEventHandler(AbstractGame *_game) : QObject(_game), game(_game) GameEventHandler::GameEventHandler(AbstractGame *_game) : QObject(_game), game(_game)
{ {

View file

@ -7,12 +7,12 @@
#ifndef COCKATRICE_GAME_EVENT_HANDLER_H #ifndef COCKATRICE_GAME_EVENT_HANDLER_H
#define COCKATRICE_GAME_EVENT_HANDLER_H #define COCKATRICE_GAME_EVENT_HANDLER_H
#include "pb/event_leave.pb.h"
#include "pb/serverinfo_player.pb.h"
#include "player/event_processing_options.h" #include "player/event_processing_options.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QObject> #include <QObject>
#include <libcockatrice/protocol/pb/event_leave.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
class AbstractClient; class AbstractClient;
class Response; class Response;

View file

@ -7,10 +7,9 @@
#ifndef GAME_META_INFO_H #ifndef GAME_META_INFO_H
#define GAME_META_INFO_H #define GAME_META_INFO_H
#include "pb/serverinfo_game.pb.h"
#include <QMap> #include <QMap>
#include <QObject> #include <QObject>
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
// Translation layer class to expose protobuf safely and hook it up to Qt Signals. // Translation layer class to expose protobuf safely and hook it up to Qt Signals.
// This class de-couples the domain object (i.e. the GameMetaInfo) from the network object. // This class de-couples the domain object (i.e. the GameMetaInfo) from the network object.

View file

@ -1,6 +1,5 @@
#include "game_scene.h" #include "game_scene.h"
#include "../settings/cache_settings.h"
#include "board/card_item.h" #include "board/card_item.h"
#include "phases_toolbar.h" #include "phases_toolbar.h"
#include "player/player.h" #include "player/player.h"
@ -15,6 +14,7 @@
#include <QGraphicsView> #include <QGraphicsView>
#include <QSet> #include <QSet>
#include <QtMath> #include <QtMath>
#include <libcockatrice/settings/cache_settings.h>
#include <numeric> #include <numeric>
/** /**

View file

@ -7,11 +7,10 @@
#ifndef COCKATRICE_GAME_STATE_H #ifndef COCKATRICE_GAME_STATE_H
#define COCKATRICE_GAME_STATE_H #define COCKATRICE_GAME_STATE_H
#include "../server/abstract_client.h"
#include "pb/serverinfo_game.pb.h"
#include <QObject> #include <QObject>
#include <QTimer> #include <QTimer>
#include <libcockatrice/network/client/abstract/abstract_client.h>
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
class AbstractGame; class AbstractGame;
class ServerInfo_PlayerProperties; class ServerInfo_PlayerProperties;

View file

@ -1,11 +1,11 @@
#include "game_view.h" #include "game_view.h"
#include "../settings/cache_settings.h"
#include "game_scene.h" #include "game_scene.h"
#include <QAction> #include <QAction>
#include <QResizeEvent> #include <QResizeEvent>
#include <QRubberBand> #include <QRubberBand>
#include <libcockatrice/settings/cache_settings.h>
GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, parent), rubberBand(0) GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, parent), rubberBand(0)
{ {

View file

@ -1,17 +1,17 @@
#include "message_log_widget.h" #include "message_log_widget.h"
#include "../../client/sound_engine.h" #include "../../client/sound_engine.h"
#include "../../settings/card_counter_settings.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../tabs/tab_game.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../board/translate_counter_name.h" #include "../board/translate_counter_name.h"
#include "../phase.h" #include "../phase.h"
#include "../player/player.h" #include "../player/player.h"
#include "../zones/card_zone.h" #include "../zones/card_zone.h"
#include "pb/context_move_card.pb.h"
#include "pb/context_mulligan.pb.h"
#include "pb/serverinfo_user.pb.h"
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
#include <libcockatrice/protocol/pb/context_mulligan.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
#include <libcockatrice/settings/card_counter_settings.h>
#include <utility> #include <utility>
static const QString TABLE_ZONE_NAME = "table"; static const QString TABLE_ZONE_NAME = "table";

View file

@ -8,9 +8,10 @@
#define MESSAGELOGWIDGET_H #define MESSAGELOGWIDGET_H
#include "../../client/translation.h" #include "../../client/translation.h"
#include "../../server/chat_view/chat_view.h" #include "../../interface/widgets/server/chat_view/chat_view.h"
#include "../zones/logic/card_zone_logic.h" #include "../zones/logic/card_zone_logic.h"
#include "user_level.h"
#include <libcockatrice/network/server/remote/user_level.h>
class AbstractGame; class AbstractGame;
class CardItem; class CardItem;

View file

@ -1,16 +1,16 @@
#include "phases_toolbar.h" #include "phases_toolbar.h"
#include "../interface/pixel_map_generator.h" #include "../interface/pixel_map_generator.h"
#include "pb/command_draw_cards.pb.h"
#include "pb/command_next_turn.pb.h"
#include "pb/command_set_active_phase.pb.h"
#include "pb/command_set_card_attr.pb.h"
#include <QAction> #include <QAction>
#include <QDebug> #include <QDebug>
#include <QPainter> #include <QPainter>
#include <QPen> #include <QPen>
#include <QTimer> #include <QTimer>
#include <libcockatrice/protocol/pb/command_draw_cards.pb.h>
#include <libcockatrice/protocol/pb/command_next_turn.pb.h>
#include <libcockatrice/protocol/pb/command_set_active_phase.pb.h>
#include <libcockatrice/protocol/pb/command_set_card_attr.pb.h>
PhaseButton::PhaseButton(const QString &_name, QGraphicsItem *parent, QAction *_doubleClickAction, bool _highlightable) PhaseButton::PhaseButton(const QString &_name, QGraphicsItem *parent, QAction *_doubleClickAction, bool _highlightable)
: QObject(), QGraphicsItem(parent), name(_name), active(false), highlightable(_highlightable), : QObject(), QGraphicsItem(parent), name(_name), active(false), highlightable(_highlightable),

View file

@ -1,9 +1,6 @@
#include "card_menu.h" #include "card_menu.h"
#include "../../../card/card_relation.h" #include "../../../interface/widgets/tabs/tab_game.h"
#include "../../../database/card_database_manager.h"
#include "../../../settings/card_counter_settings.h"
#include "../../../tabs/tab_game.h"
#include "../../board/card_item.h" #include "../../board/card_item.h"
#include "../../zones/logic/view_zone_logic.h" #include "../../zones/logic/view_zone_logic.h"
#include "../card_menu_action_type.h" #include "../card_menu_action_type.h"
@ -12,6 +9,10 @@
#include "move_menu.h" #include "move_menu.h"
#include "pt_menu.h" #include "pt_menu.h"
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/card/relation/card_relation.h>
#include <libcockatrice/settings/card_counter_settings.h>
CardMenu::CardMenu(Player *_player, const CardItem *_card, bool _shortcutsActive) CardMenu::CardMenu(Player *_player, const CardItem *_card, bool _shortcutsActive)
: player(_player), card(_card), shortcutsActive(_shortcutsActive) : player(_player), card(_card), shortcutsActive(_shortcutsActive)
{ {
@ -488,12 +489,4 @@ void CardMenu::setShortcutsActive()
aRemoveCounter[i]->setShortcuts(shortcuts.getShortcut("Player/aRC" + colorWords[i])); aRemoveCounter[i]->setShortcuts(shortcuts.getShortcut("Player/aRC" + colorWords[i]));
aSetCounter[i]->setShortcuts(shortcuts.getShortcut("Player/aSC" + colorWords[i])); aSetCounter[i]->setShortcuts(shortcuts.getShortcut("Player/aSC" + colorWords[i]));
} }
// Don't enable always-active shortcuts in local games, since it causes keyboard shortcuts to work inconsistently
// when there are more than 1 player.
if (!player->getGame()->getGameState()->getIsLocalGame()) {
// unattach action is only active in card menu if the active card is attached.
// make unattach shortcut always active so that it consistently works when multiple cards are selected.
player->getGame()->getTab()->addAction(aUnattach);
}
} }

View file

@ -7,7 +7,7 @@
#ifndef COCKATRICE_GRAVE_MENU_H #ifndef COCKATRICE_GRAVE_MENU_H
#define COCKATRICE_GRAVE_MENU_H #define COCKATRICE_GRAVE_MENU_H
#include "../../../interface/tearoff_menu.h" #include "../../../interface/widgets/menus/tearoff_menu.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>

View file

@ -1,7 +1,5 @@
#include "hand_menu.h" #include "hand_menu.h"
#include "../../../settings/cache_settings.h"
#include "../../../settings/shortcuts_settings.h"
#include "../../abstract_game.h" #include "../../abstract_game.h"
#include "../../zones/hand_zone.h" #include "../../zones/hand_zone.h"
#include "../player.h" #include "../player.h"
@ -9,6 +7,8 @@
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/settings/shortcuts_settings.h>
HandMenu::HandMenu(Player *_player, PlayerActions *actions, QWidget *parent) : TearOffMenu(parent), player(_player) HandMenu::HandMenu(Player *_player, PlayerActions *actions, QWidget *parent) : TearOffMenu(parent), player(_player)
{ {

View file

@ -7,7 +7,7 @@
#ifndef COCKATRICE_HAND_MENU_H #ifndef COCKATRICE_HAND_MENU_H
#define COCKATRICE_HAND_MENU_H #define COCKATRICE_HAND_MENU_H
#include "../../../interface/tearoff_menu.h" #include "../../../interface/widgets/menus/tearoff_menu.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>

View file

@ -1,14 +1,14 @@
#include "library_menu.h" #include "library_menu.h"
#include "../../../settings/cache_settings.h" #include "../../../interface/widgets/tabs/tab_game.h"
#include "../../../settings/shortcuts_settings.h"
#include "../../../tabs/tab_game.h"
#include "../../abstract_game.h" #include "../../abstract_game.h"
#include "../player.h" #include "../player.h"
#include "../player_actions.h" #include "../player_actions.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>
#include <libcockatrice/settings/cache_settings.h>
#include <libcockatrice/settings/shortcuts_settings.h>
LibraryMenu::LibraryMenu(Player *_player, QWidget *parent) : TearOffMenu(parent), player(_player) LibraryMenu::LibraryMenu(Player *_player, QWidget *parent) : TearOffMenu(parent), player(_player)
{ {

View file

@ -7,7 +7,7 @@
#ifndef COCKATRICE_LIBRARY_MENU_H #ifndef COCKATRICE_LIBRARY_MENU_H
#define COCKATRICE_LIBRARY_MENU_H #define COCKATRICE_LIBRARY_MENU_H
#include "../../../interface/tearoff_menu.h" #include "../../../interface/widgets/menus/tearoff_menu.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>

View file

@ -1,8 +1,6 @@
#include "player_menu.h" #include "player_menu.h"
#include "../../../common/pb/command_reveal_cards.pb.h" #include "../../../interface/widgets/tabs/tab_game.h"
#include "../../../database/card_database_manager.h"
#include "../../../tabs/tab_game.h"
#include "../../board/card_item.h" #include "../../board/card_item.h"
#include "../../zones/hand_zone.h" #include "../../zones/hand_zone.h"
#include "../card_menu_action_type.h" #include "../card_menu_action_type.h"
@ -10,6 +8,9 @@
#include "card_menu.h" #include "card_menu.h"
#include "hand_menu.h" #include "hand_menu.h"
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/protocol/pb/command_reveal_cards.pb.h>
PlayerMenu::PlayerMenu(Player *_player) : player(_player) PlayerMenu::PlayerMenu(Player *_player) : player(_player)
{ {
playerMenu = new TearOffMenu(); playerMenu = new TearOffMenu();

View file

@ -7,7 +7,7 @@
#ifndef COCKATRICE_PLAYER_MENU_H #ifndef COCKATRICE_PLAYER_MENU_H
#define COCKATRICE_PLAYER_MENU_H #define COCKATRICE_PLAYER_MENU_H
#include "../../../interface/tearoff_menu.h" #include "../../../interface/widgets/menus/tearoff_menu.h"
#include "../player.h" #include "../player.h"
#include "custom_zone_menu.h" #include "custom_zone_menu.h"
#include "grave_menu.h" #include "grave_menu.h"

View file

@ -7,7 +7,7 @@
#ifndef COCKATRICE_RFG_MENU_H #ifndef COCKATRICE_RFG_MENU_H
#define COCKATRICE_RFG_MENU_H #define COCKATRICE_RFG_MENU_H
#include "../../../interface/tearoff_menu.h" #include "../../../interface/widgets/menus/tearoff_menu.h"
#include <QAction> #include <QAction>
#include <QMenu> #include <QMenu>

View file

@ -1,9 +1,10 @@
#include "say_menu.h" #include "say_menu.h"
#include "../../../settings/cache_settings.h"
#include "../player.h" #include "../player.h"
#include "../player_actions.h" #include "../player_actions.h"
#include <libcockatrice/settings/cache_settings.h>
SayMenu::SayMenu(Player *_player) : player(_player) SayMenu::SayMenu(Player *_player) : player(_player)
{ {
connect(&SettingsCache::instance().messages(), &MessageSettings::messageMacrosChanged, this, &SayMenu::initSayMenu); connect(&SettingsCache::instance().messages(), &MessageSettings::messageMacrosChanged, this, &SayMenu::initSayMenu);

View file

@ -1,7 +1,7 @@
#include "player.h" #include "player.h"
#include "../../interface/theme_manager.h" #include "../../interface/theme_manager.h"
#include "../../tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../board/arrow_item.h" #include "../board/arrow_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../board/card_list.h" #include "../board/card_list.h"
@ -12,15 +12,6 @@
#include "../zones/stack_zone.h" #include "../zones/stack_zone.h"
#include "../zones/table_zone.h" #include "../zones/table_zone.h"
#include "../zones/view_zone.h" #include "../zones/view_zone.h"
#include "color.h"
#include "pb/command_attach_card.pb.h"
#include "pb/command_set_card_counter.pb.h"
#include "pb/event_create_arrow.pb.h"
#include "pb/event_create_counter.pb.h"
#include "pb/event_draw_cards.pb.h"
#include "pb/serverinfo_player.pb.h"
#include "pb/serverinfo_user.pb.h"
#include "pb/serverinfo_zone.pb.h"
#include "player_target.h" #include "player_target.h"
#include <QDebug> #include <QDebug>
@ -28,6 +19,15 @@
#include <QMetaType> #include <QMetaType>
#include <QPainter> #include <QPainter>
#include <QtConcurrent> #include <QtConcurrent>
#include <libcockatrice/protocol/pb/command_attach_card.pb.h>
#include <libcockatrice/protocol/pb/command_set_card_counter.pb.h>
#include <libcockatrice/protocol/pb/event_create_arrow.pb.h>
#include <libcockatrice/protocol/pb/event_create_counter.pb.h>
#include <libcockatrice/protocol/pb/event_draw_cards.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_player.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_zone.pb.h>
#include <libcockatrice/utility/color.h>
Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent) Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
: QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)), : QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)),

View file

@ -7,14 +7,11 @@
#ifndef PLAYER_H #ifndef PLAYER_H
#define PLAYER_H #define PLAYER_H
#include "../../card/card_info.h"
#include "../../filters/filter_string.h" #include "../../filters/filter_string.h"
#include "../../interface/tearoff_menu.h" #include "../../interface/widgets/menus/tearoff_menu.h"
#include "../board/abstract_graphics_item.h" #include "../board/abstract_graphics_item.h"
#include "../dialogs/dlg_create_token.h" #include "../dialogs/dlg_create_token.h"
#include "menu/player_menu.h" #include "menu/player_menu.h"
#include "pb/card_attributes.pb.h"
#include "pb/game_event.pb.h"
#include "player_actions.h" #include "player_actions.h"
#include "player_area.h" #include "player_area.h"
#include "player_event_handler.h" #include "player_event_handler.h"
@ -26,6 +23,9 @@
#include <QMap> #include <QMap>
#include <QPoint> #include <QPoint>
#include <QTimer> #include <QTimer>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/protocol/pb/card_attributes.pb.h>
#include <libcockatrice/protocol/pb/game_event.pb.h>
inline Q_LOGGING_CATEGORY(PlayerLog, "player"); inline Q_LOGGING_CATEGORY(PlayerLog, "player");

View file

@ -1,31 +1,32 @@
#include "player_actions.h" #include "player_actions.h"
#include "../../../common/pb/context_move_card.pb.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../card/card_relation.h" #include "../../interface/widgets/utility/get_text_with_max.h"
#include "../../client/get_text_with_max.h"
#include "../../database/card_database_manager.h"
#include "../../tabs/tab_game.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../dialogs/dlg_move_top_cards_until.h" #include "../dialogs/dlg_move_top_cards_until.h"
#include "../dialogs/dlg_roll_dice.h" #include "../dialogs/dlg_roll_dice.h"
#include "../zones/logic/view_zone_logic.h" #include "../zones/logic/view_zone_logic.h"
#include "card_menu_action_type.h" #include "card_menu_action_type.h"
#include "pb/command_attach_card.pb.h"
#include "pb/command_change_zone_properties.pb.h" #include <libcockatrice/card/database/card_database_manager.h>
#include "pb/command_concede.pb.h" #include <libcockatrice/card/relation/card_relation.h>
#include "pb/command_create_token.pb.h" #include <libcockatrice/protocol/pb/command_attach_card.pb.h>
#include "pb/command_draw_cards.pb.h" #include <libcockatrice/protocol/pb/command_change_zone_properties.pb.h>
#include "pb/command_flip_card.pb.h" #include <libcockatrice/protocol/pb/command_concede.pb.h>
#include "pb/command_game_say.pb.h" #include <libcockatrice/protocol/pb/command_create_token.pb.h>
#include "pb/command_move_card.pb.h" #include <libcockatrice/protocol/pb/command_draw_cards.pb.h>
#include "pb/command_mulligan.pb.h" #include <libcockatrice/protocol/pb/command_flip_card.pb.h>
#include "pb/command_reveal_cards.pb.h" #include <libcockatrice/protocol/pb/command_game_say.pb.h>
#include "pb/command_roll_die.pb.h" #include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include "pb/command_set_card_attr.pb.h" #include <libcockatrice/protocol/pb/command_mulligan.pb.h>
#include "pb/command_set_card_counter.pb.h" #include <libcockatrice/protocol/pb/command_reveal_cards.pb.h>
#include "pb/command_shuffle.pb.h" #include <libcockatrice/protocol/pb/command_roll_die.pb.h>
#include "pb/command_undo_draw.pb.h" #include <libcockatrice/protocol/pb/command_set_card_attr.pb.h>
#include "trice_limits.h" #include <libcockatrice/protocol/pb/command_set_card_counter.pb.h>
#include <libcockatrice/protocol/pb/command_shuffle.pb.h>
#include <libcockatrice/protocol/pb/command_undo_draw.pb.h>
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
#include <libcockatrice/utility/trice_limits.h>
// milliseconds in between triggers of the move top cards until action // milliseconds in between triggers of the move top cards until action
static constexpr int MOVE_TOP_CARD_UNTIL_INTERVAL = 100; static constexpr int MOVE_TOP_CARD_UNTIL_INTERVAL = 100;

View file

@ -7,12 +7,13 @@
#ifndef COCKATRICE_PLAYER_ACTIONS_H #ifndef COCKATRICE_PLAYER_ACTIONS_H
#define COCKATRICE_PLAYER_ACTIONS_H #define COCKATRICE_PLAYER_ACTIONS_H
#include "../../card/card_relation_type.h"
#include "event_processing_options.h" #include "event_processing_options.h"
#include "player.h" #include "player.h"
#include <QMenu> #include <QMenu>
#include <QObject> #include <QObject>
#include <libcockatrice/card/relation/card_relation_type.h>
#include <libcockatrice/protocol/pb/card_attributes.pb.h>
namespace google namespace google
{ {

View file

@ -1,34 +1,35 @@
#include "player_event_handler.h" #include "player_event_handler.h"
#include "../../tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../board/arrow_item.h" #include "../board/arrow_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../board/card_list.h" #include "../board/card_list.h"
#include "../zones/view_zone.h" #include "../zones/view_zone.h"
#include "pb/command_set_card_attr.pb.h"
#include "pb/context_move_card.pb.h"
#include "pb/context_undo_draw.pb.h"
#include "pb/event_attach_card.pb.h"
#include "pb/event_change_zone_properties.pb.h"
#include "pb/event_create_arrow.pb.h"
#include "pb/event_create_counter.pb.h"
#include "pb/event_create_token.pb.h"
#include "pb/event_del_counter.pb.h"
#include "pb/event_delete_arrow.pb.h"
#include "pb/event_destroy_card.pb.h"
#include "pb/event_draw_cards.pb.h"
#include "pb/event_dump_zone.pb.h"
#include "pb/event_flip_card.pb.h"
#include "pb/event_game_say.pb.h"
#include "pb/event_move_card.pb.h"
#include "pb/event_reveal_cards.pb.h"
#include "pb/event_roll_die.pb.h"
#include "pb/event_set_card_attr.pb.h"
#include "pb/event_set_card_counter.pb.h"
#include "pb/event_set_counter.pb.h"
#include "pb/event_shuffle.pb.h"
#include "player.h" #include "player.h"
#include <libcockatrice/protocol/pb/command_set_card_attr.pb.h>
#include <libcockatrice/protocol/pb/context_move_card.pb.h>
#include <libcockatrice/protocol/pb/context_undo_draw.pb.h>
#include <libcockatrice/protocol/pb/event_attach_card.pb.h>
#include <libcockatrice/protocol/pb/event_change_zone_properties.pb.h>
#include <libcockatrice/protocol/pb/event_create_arrow.pb.h>
#include <libcockatrice/protocol/pb/event_create_counter.pb.h>
#include <libcockatrice/protocol/pb/event_create_token.pb.h>
#include <libcockatrice/protocol/pb/event_del_counter.pb.h>
#include <libcockatrice/protocol/pb/event_delete_arrow.pb.h>
#include <libcockatrice/protocol/pb/event_destroy_card.pb.h>
#include <libcockatrice/protocol/pb/event_draw_cards.pb.h>
#include <libcockatrice/protocol/pb/event_dump_zone.pb.h>
#include <libcockatrice/protocol/pb/event_flip_card.pb.h>
#include <libcockatrice/protocol/pb/event_game_say.pb.h>
#include <libcockatrice/protocol/pb/event_move_card.pb.h>
#include <libcockatrice/protocol/pb/event_reveal_cards.pb.h>
#include <libcockatrice/protocol/pb/event_roll_die.pb.h>
#include <libcockatrice/protocol/pb/event_set_card_attr.pb.h>
#include <libcockatrice/protocol/pb/event_set_card_counter.pb.h>
#include <libcockatrice/protocol/pb/event_set_counter.pb.h>
#include <libcockatrice/protocol/pb/event_shuffle.pb.h>
PlayerEventHandler::PlayerEventHandler(Player *_player) : player(_player) PlayerEventHandler::PlayerEventHandler(Player *_player) : player(_player)
{ {
} }

View file

@ -9,8 +9,8 @@
#include "event_processing_options.h" #include "event_processing_options.h"
#include <QObject> #include <QObject>
#include <pb/game_event.pb.h> #include <libcockatrice/protocol/pb/game_event.pb.h>
#include <pb/game_event_context.pb.h> #include <libcockatrice/protocol/pb/game_event_context.pb.h>
class CardItem; class CardItem;
class CardZoneLogic; class CardZoneLogic;

View file

@ -1,6 +1,6 @@
#include "player_graphics_item.h" #include "player_graphics_item.h"
#include "../../tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../hand_counter.h" #include "../hand_counter.h"
PlayerGraphicsItem::PlayerGraphicsItem(Player *_player) : player(_player) PlayerGraphicsItem::PlayerGraphicsItem(Player *_player) : player(_player)

View file

@ -7,8 +7,6 @@
#ifndef COCKATRICE_PLAYER_INFO_H #ifndef COCKATRICE_PLAYER_INFO_H
#define COCKATRICE_PLAYER_INFO_H #define COCKATRICE_PLAYER_INFO_H
#include "../../../common/pb/serverinfo_user.pb.h"
#include "../../deck/deck_loader.h"
#include "../zones/hand_zone.h" #include "../zones/hand_zone.h"
#include "../zones/pile_zone.h" #include "../zones/pile_zone.h"
#include "../zones/stack_zone.h" #include "../zones/stack_zone.h"
@ -16,6 +14,8 @@
#include "player_target.h" #include "player_target.h"
#include <QObject> #include <QObject>
#include <libcockatrice/deck_list/deck_loader.h>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
class PlayerInfo : public QObject class PlayerInfo : public QObject
{ {

View file

@ -1,21 +1,21 @@
#include "player_list_widget.h" #include "player_list_widget.h"
#include "../../interface/pixel_map_generator.h" #include "../../interface/pixel_map_generator.h"
#include "../../server/abstract_client.h" #include "../../interface/widgets/server/user/user_context_menu.h"
#include "../../server/user/user_context_menu.h" #include "../../interface/widgets/server/user/user_list_manager.h"
#include "../../server/user/user_list_manager.h" #include "../../interface/widgets/server/user/user_list_widget.h"
#include "../../server/user/user_list_widget.h" #include "../../interface/widgets/tabs/tab_account.h"
#include "../../tabs/tab_account.h" #include "../../interface/widgets/tabs/tab_game.h"
#include "../../tabs/tab_game.h" #include "../../interface/widgets/tabs/tab_supervisor.h"
#include "../../tabs/tab_supervisor.h"
#include "pb/command_kick_from_game.pb.h"
#include "pb/serverinfo_playerproperties.pb.h"
#include "pb/session_commands.pb.h"
#include <QAction> #include <QAction>
#include <QHeaderView> #include <QHeaderView>
#include <QMenu> #include <QMenu>
#include <QMouseEvent> #include <QMouseEvent>
#include <libcockatrice/network/client/abstract/abstract_client.h>
#include <libcockatrice/protocol/pb/command_kick_from_game.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h>
#include <libcockatrice/protocol/pb/session_commands.pb.h>
PlayerListItemDelegate::PlayerListItemDelegate(QObject *const parent) : QStyledItemDelegate(parent) PlayerListItemDelegate::PlayerListItemDelegate(QObject *const parent) : QStyledItemDelegate(parent)
{ {

View file

@ -7,10 +7,9 @@
#ifndef COCKATRICE_PLAYER_MANAGER_H #ifndef COCKATRICE_PLAYER_MANAGER_H
#define COCKATRICE_PLAYER_MANAGER_H #define COCKATRICE_PLAYER_MANAGER_H
#include "pb/serverinfo_playerproperties.pb.h"
#include <QMap> #include <QMap>
#include <QObject> #include <QObject>
#include <libcockatrice/protocol/pb/serverinfo_playerproperties.pb.h>
class AbstractGame; class AbstractGame;
class Player; class Player;

View file

@ -1,13 +1,13 @@
#include "player_target.h" #include "player_target.h"
#include "../../interface/pixel_map_generator.h" #include "../../interface/pixel_map_generator.h"
#include "pb/serverinfo_user.pb.h"
#include "player.h" #include "player.h"
#include <QDebug> #include <QDebug>
#include <QPainter> #include <QPainter>
#include <QPixmapCache> #include <QPixmapCache>
#include <QtMath> #include <QtMath>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
PlayerCounter::PlayerCounter(Player *_player, int _id, const QString &_name, int _value, QGraphicsItem *parent) PlayerCounter::PlayerCounter(Player *_player, int _id, const QString &_name, int _value, QGraphicsItem *parent)
: AbstractCounter(_player, _id, _name, false, _value, false, parent) : AbstractCounter(_player, _id, _name, false, _value, false, parent)

View file

@ -1,6 +1,6 @@
#include "replay.h" #include "replay.h"
#include "../tabs/tab_game.h" #include "../interface/widgets/tabs/tab_game.h"
Replay::Replay(TabGame *_tab, GameReplay *_replay) : AbstractGame(_tab) Replay::Replay(TabGame *_tab, GameReplay *_replay) : AbstractGame(_tab)
{ {

View file

@ -1,13 +1,13 @@
#include "hand_zone.h" #include "hand_zone.h"
#include "../../interface/theme_manager.h" #include "../../interface/theme_manager.h"
#include "../../settings/cache_settings.h"
#include "../board/card_drag_item.h" #include "../board/card_drag_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../player/player.h" #include "../player/player.h"
#include "pb/command_move_card.pb.h"
#include <QPainter> #include <QPainter>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include <libcockatrice/settings/cache_settings.h>
HandZone::HandZone(HandZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent) HandZone::HandZone(HandZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent)
: SelectZone(_logic, parent), zoneHeight(_zoneHeight) : SelectZone(_logic, parent), zoneHeight(_zoneHeight)

View file

@ -1,16 +1,16 @@
#include "card_zone_logic.h" #include "card_zone_logic.h"
#include "../../../database/card_database_manager.h"
#include "../../board/card_item.h" #include "../../board/card_item.h"
#include "../../player/player.h" #include "../../player/player.h"
#include "../pile_zone.h" #include "../pile_zone.h"
#include "../view_zone.h" #include "../view_zone.h"
#include "pb/command_move_card.pb.h"
#include "pb/serverinfo_user.pb.h"
#include "view_zone_logic.h" #include "view_zone_logic.h"
#include <QAction> #include <QAction>
#include <QDebug> #include <QDebug>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
/** /**
* @param _player the player that the zone belongs to * @param _player the player that the zone belongs to

View file

@ -1,8 +1,9 @@
#include "view_zone_logic.h" #include "view_zone_logic.h"
#include "../../../settings/cache_settings.h"
#include "../../board/card_item.h" #include "../../board/card_item.h"
#include <libcockatrice/settings/cache_settings.h>
/** /**
* @param _player the player that the cards are revealed to. * @param _player the player that the cards are revealed to.
* @param _origZone the zone the cards were revealed from. * @param _origZone the zone the cards were revealed from.

View file

@ -4,12 +4,12 @@
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../player/player.h" #include "../player/player.h"
#include "logic/pile_zone_logic.h" #include "logic/pile_zone_logic.h"
#include "pb/command_move_card.pb.h"
#include "view_zone.h" #include "view_zone.h"
#include <QApplication> #include <QApplication>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QPainter> #include <QPainter>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
PileZone::PileZone(PileZoneLogic *_logic, QGraphicsItem *parent) : CardZone(_logic, parent) PileZone::PileZone(PileZoneLogic *_logic, QGraphicsItem *parent) : CardZone(_logic, parent)
{ {

View file

@ -1,11 +1,11 @@
#include "select_zone.h" #include "select_zone.h"
#include "../../settings/cache_settings.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../game_scene.h" #include "../game_scene.h"
#include <QDebug> #include <QDebug>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <libcockatrice/settings/cache_settings.h>
qreal divideCardSpaceInZone(qreal index, int cardCount, qreal totalHeight, qreal cardHeight, bool reverse) qreal divideCardSpaceInZone(qreal index, int cardCount, qreal totalHeight, qreal cardHeight, bool reverse)
{ {

View file

@ -1,16 +1,16 @@
#include "stack_zone.h" #include "stack_zone.h"
#include "../../interface/theme_manager.h" #include "../../interface/theme_manager.h"
#include "../../settings/cache_settings.h"
#include "../board/arrow_item.h" #include "../board/arrow_item.h"
#include "../board/card_drag_item.h" #include "../board/card_drag_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../player/player.h" #include "../player/player.h"
#include "logic/stack_zone_logic.h" #include "logic/stack_zone_logic.h"
#include "pb/command_move_card.pb.h"
#include <QPainter> #include <QPainter>
#include <QSet> #include <QSet>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include <libcockatrice/settings/cache_settings.h>
StackZone::StackZone(StackZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent) StackZone::StackZone(StackZoneLogic *_logic, int _zoneHeight, QGraphicsItem *parent)
: SelectZone(_logic, parent), zoneHeight(_zoneHeight) : SelectZone(_logic, parent), zoneHeight(_zoneHeight)

View file

@ -1,19 +1,19 @@
#include "table_zone.h" #include "table_zone.h"
#include "../../card/card_info.h"
#include "../../interface/theme_manager.h" #include "../../interface/theme_manager.h"
#include "../../settings/cache_settings.h"
#include "../board/arrow_item.h" #include "../board/arrow_item.h"
#include "../board/card_drag_item.h" #include "../board/card_drag_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../player/player.h" #include "../player/player.h"
#include "logic/table_zone_logic.h" #include "logic/table_zone_logic.h"
#include "pb/command_move_card.pb.h"
#include "pb/command_set_card_attr.pb.h"
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QPainter> #include <QPainter>
#include <QSet> #include <QSet>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include <libcockatrice/protocol/pb/command_set_card_attr.pb.h>
#include <libcockatrice/settings/cache_settings.h>
const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100); const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100);
const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80); const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80);

View file

@ -1,21 +1,21 @@
#include "view_zone.h" #include "view_zone.h"
#include "../../card/card_info.h"
#include "../../server/pending_command.h"
#include "../board/card_drag_item.h" #include "../board/card_drag_item.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../player/player.h" #include "../player/player.h"
#include "logic/view_zone_logic.h" #include "logic/view_zone_logic.h"
#include "pb/command_dump_zone.pb.h"
#include "pb/command_move_card.pb.h"
#include "pb/response_dump_zone.pb.h"
#include "pb/serverinfo_card.pb.h"
#include <QBrush> #include <QBrush>
#include <QDebug> #include <QDebug>
#include <QGraphicsSceneWheelEvent> #include <QGraphicsSceneWheelEvent>
#include <QPainter> #include <QPainter>
#include <QtMath> #include <QtMath>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/protocol/pb/command_dump_zone.pb.h>
#include <libcockatrice/protocol/pb/command_move_card.pb.h>
#include <libcockatrice/protocol/pb/response_dump_zone.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_card.pb.h>
#include <libcockatrice/protocol/pending_command.h>
/** /**
* @param parent the parent QGraphicsWidget containing the reveal zone * @param parent the parent QGraphicsWidget containing the reveal zone

View file

@ -13,7 +13,7 @@
#include <QGraphicsLayoutItem> #include <QGraphicsLayoutItem>
#include <QLoggingCategory> #include <QLoggingCategory>
#include <pb/commands.pb.h> #include <libcockatrice/protocol/pb/commands.pb.h>
inline Q_LOGGING_CATEGORY(ViewZoneLog, "view_zone"); inline Q_LOGGING_CATEGORY(ViewZoneLog, "view_zone");

View file

@ -2,11 +2,9 @@
#include "../../filters/syntax_help.h" #include "../../filters/syntax_help.h"
#include "../../interface/pixel_map_generator.h" #include "../../interface/pixel_map_generator.h"
#include "../../settings/cache_settings.h"
#include "../board/card_item.h" #include "../board/card_item.h"
#include "../game_scene.h" #include "../game_scene.h"
#include "../player/player.h" #include "../player/player.h"
#include "pb/command_shuffle.pb.h"
#include "view_zone.h" #include "view_zone.h"
#include <QCheckBox> #include <QCheckBox>
@ -18,6 +16,8 @@
#include <QScrollBar> #include <QScrollBar>
#include <QStyleOption> #include <QStyleOption>
#include <QStyleOptionTitleBar> #include <QStyleOptionTitleBar>
#include <libcockatrice/protocol/pb/command_shuffle.pb.h>
#include <libcockatrice/settings/cache_settings.h>
/** /**
* @param _player the player the cards were revealed to. * @param _player the player the cards were revealed to.

View file

@ -7,7 +7,6 @@
#ifndef ZONEVIEWWIDGET_H #ifndef ZONEVIEWWIDGET_H
#define ZONEVIEWWIDGET_H #define ZONEVIEWWIDGET_H
#include "../../utility/macros.h"
#include "logic/card_zone_logic.h" #include "logic/card_zone_logic.h"
#include <QCheckBox> #include <QCheckBox>
@ -15,6 +14,7 @@
#include <QGraphicsProxyWidget> #include <QGraphicsProxyWidget>
#include <QGraphicsWidget> #include <QGraphicsWidget>
#include <QLineEdit> #include <QLineEdit>
#include <libcockatrice/utility/macros.h>
class QLabel; class QLabel;
class QPushButton; class QPushButton;

View file

@ -1,6 +1,4 @@
#include "picture_loader.h" #include "card_picture_loader.h"
#include "../settings/cache_settings.h"
#include <QApplication> #include <QApplication>
#include <QBuffer> #include <QBuffer>
@ -17,48 +15,51 @@
#include <QStatusBar> #include <QStatusBar>
#include <QThread> #include <QThread>
#include <algorithm> #include <algorithm>
#include <libcockatrice/settings/cache_settings.h>
#include <utility> #include <utility>
// never cache more than 300 cards at once for a single deck // never cache more than 300 cards at once for a single deck
#define CACHED_CARD_PER_DECK_MAX 300 #define CACHED_CARD_PER_DECK_MAX 300
PictureLoader::PictureLoader() : QObject(nullptr) CardPictureLoader::CardPictureLoader() : QObject(nullptr)
{ {
worker = new PictureLoaderWorker; worker = new CardPictureLoaderWorker;
connect(&SettingsCache::instance(), &SettingsCache::picsPathChanged, this, &PictureLoader::picsPathChanged); connect(&SettingsCache::instance(), &SettingsCache::picsPathChanged, this, &CardPictureLoader::picsPathChanged);
connect(&SettingsCache::instance(), &SettingsCache::picDownloadChanged, this, &PictureLoader::picDownloadChanged); connect(&SettingsCache::instance(), &SettingsCache::picDownloadChanged, this,
&CardPictureLoader::picDownloadChanged);
connect(worker, &PictureLoaderWorker::imageLoaded, this, &PictureLoader::imageLoaded); connect(worker, &CardPictureLoaderWorker::imageLoaded, this, &CardPictureLoader::imageLoaded);
statusBar = new PictureLoaderStatusBar(nullptr); statusBar = new CardPictureLoaderStatusBar(nullptr);
QMainWindow *mainWindow = qobject_cast<QMainWindow *>(QApplication::activeWindow()); QMainWindow *mainWindow = qobject_cast<QMainWindow *>(QApplication::activeWindow());
if (mainWindow) { if (mainWindow) {
mainWindow->statusBar()->addPermanentWidget(statusBar); mainWindow->statusBar()->addPermanentWidget(statusBar);
} }
connect(worker, &PictureLoaderWorker::imageRequestQueued, statusBar, &PictureLoaderStatusBar::addQueuedImageLoad); connect(worker, &CardPictureLoaderWorker::imageRequestQueued, statusBar,
connect(worker, &PictureLoaderWorker::imageRequestSucceeded, statusBar, &CardPictureLoaderStatusBar::addQueuedImageLoad);
&PictureLoaderStatusBar::addSuccessfulImageLoad); connect(worker, &CardPictureLoaderWorker::imageRequestSucceeded, statusBar,
&CardPictureLoaderStatusBar::addSuccessfulImageLoad);
} }
PictureLoader::~PictureLoader() CardPictureLoader::~CardPictureLoader()
{ {
worker->deleteLater(); worker->deleteLater();
} }
void PictureLoader::getCardBackPixmap(QPixmap &pixmap, QSize size) void CardPictureLoader::getCardBackPixmap(QPixmap &pixmap, QSize size)
{ {
QString backCacheKey = "_trice_card_back_" + QString::number(size.width()) + "x" + QString::number(size.height()); QString backCacheKey = "_trice_card_back_" + QString::number(size.width()) + "x" + QString::number(size.height());
if (!QPixmapCache::find(backCacheKey, &pixmap)) { if (!QPixmapCache::find(backCacheKey, &pixmap)) {
qCDebug(PictureLoaderLog) << "PictureLoader: cache miss for" << backCacheKey; qCDebug(CardPictureLoaderLog) << "PictureLoader: cache miss for" << backCacheKey;
QPixmap tmpPixmap("theme:cardback"); QPixmap tmpPixmap("theme:cardback");
if (tmpPixmap.isNull()) { if (tmpPixmap.isNull()) {
qCWarning(PictureLoaderLog) << "Failed to load 'theme:cardback'! Using fallback pixmap."; qCWarning(CardPictureLoaderLog) << "Failed to load 'theme:cardback'! Using fallback pixmap.";
tmpPixmap = QPixmap(size); tmpPixmap = QPixmap(size);
tmpPixmap.fill(Qt::gray); // Fallback to a gray pixmap tmpPixmap.fill(Qt::gray); // Fallback to a gray pixmap
} else { } else {
qCDebug(PictureLoaderLog) << "Successfully loaded 'theme:cardback'."; qCDebug(CardPictureLoaderLog) << "Successfully loaded 'theme:cardback'.";
} }
pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
@ -66,20 +67,21 @@ void PictureLoader::getCardBackPixmap(QPixmap &pixmap, QSize size)
} }
} }
void PictureLoader::getCardBackLoadingInProgressPixmap(QPixmap &pixmap, QSize size) void CardPictureLoader::getCardBackLoadingInProgressPixmap(QPixmap &pixmap, QSize size)
{ {
QString backCacheKey = QString backCacheKey =
"_trice_card_back_inprogress_" + QString::number(size.width()) + "x" + QString::number(size.height()); "_trice_card_back_inprogress_" + QString::number(size.width()) + "x" + QString::number(size.height());
if (!QPixmapCache::find(backCacheKey, &pixmap)) { if (!QPixmapCache::find(backCacheKey, &pixmap)) {
qCDebug(PictureLoaderCardBackCacheFailLog) << "PictureLoader: cache miss for" << backCacheKey; qCDebug(CardPictureLoaderCardBackCacheFailLog) << "PictureLoader: cache miss for" << backCacheKey;
QPixmap tmpPixmap("theme:cardback"); QPixmap tmpPixmap("theme:cardback");
if (tmpPixmap.isNull()) { if (tmpPixmap.isNull()) {
qCWarning(PictureLoaderLog) << "Failed to load 'theme:cardback' for in-progress state! Using fallback."; qCWarning(CardPictureLoaderLog) << "Failed to load 'theme:cardback' for in-progress state! Using fallback.";
tmpPixmap = QPixmap(size); tmpPixmap = QPixmap(size);
tmpPixmap.fill(Qt::blue); // Fallback with blue color tmpPixmap.fill(Qt::blue); // Fallback with blue color
} else { } else {
qCDebug(PictureLoaderCardBackCacheFailLog) << "Successfully loaded 'theme:cardback' for in-progress state."; qCDebug(CardPictureLoaderCardBackCacheFailLog)
<< "Successfully loaded 'theme:cardback' for in-progress state.";
} }
pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
@ -87,20 +89,20 @@ void PictureLoader::getCardBackLoadingInProgressPixmap(QPixmap &pixmap, QSize si
} }
} }
void PictureLoader::getCardBackLoadingFailedPixmap(QPixmap &pixmap, QSize size) void CardPictureLoader::getCardBackLoadingFailedPixmap(QPixmap &pixmap, QSize size)
{ {
QString backCacheKey = QString backCacheKey =
"_trice_card_back_failed_" + QString::number(size.width()) + "x" + QString::number(size.height()); "_trice_card_back_failed_" + QString::number(size.width()) + "x" + QString::number(size.height());
if (!QPixmapCache::find(backCacheKey, &pixmap)) { if (!QPixmapCache::find(backCacheKey, &pixmap)) {
qCDebug(PictureLoaderCardBackCacheFailLog) << "PictureLoader: cache miss for" << backCacheKey; qCDebug(CardPictureLoaderCardBackCacheFailLog) << "PictureLoader: cache miss for" << backCacheKey;
QPixmap tmpPixmap("theme:cardback"); QPixmap tmpPixmap("theme:cardback");
if (tmpPixmap.isNull()) { if (tmpPixmap.isNull()) {
qCWarning(PictureLoaderLog) << "Failed to load 'theme:cardback' for failed state! Using fallback."; qCWarning(CardPictureLoaderLog) << "Failed to load 'theme:cardback' for failed state! Using fallback.";
tmpPixmap = QPixmap(size); tmpPixmap = QPixmap(size);
tmpPixmap.fill(Qt::red); // Fallback with red color tmpPixmap.fill(Qt::red); // Fallback with red color
} else { } else {
qCDebug(PictureLoaderCardBackCacheFailLog) << "Successfully loaded 'theme:cardback' for failed state."; qCDebug(CardPictureLoaderCardBackCacheFailLog) << "Successfully loaded 'theme:cardback' for failed state.";
} }
pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap = tmpPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
@ -108,10 +110,10 @@ void PictureLoader::getCardBackLoadingFailedPixmap(QPixmap &pixmap, QSize size)
} }
} }
void PictureLoader::getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size) void CardPictureLoader::getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size)
{ {
if (!card) { if (!card) {
qCWarning(PictureLoaderLog) << "getPixmap called with null card!"; qCWarning(CardPictureLoaderLog) << "getPixmap called with null card!";
return; return;
} }
@ -126,13 +128,13 @@ void PictureLoader::getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size
QPixmap bigPixmap; QPixmap bigPixmap;
if (QPixmapCache::find(key, &bigPixmap)) { if (QPixmapCache::find(key, &bigPixmap)) {
if (bigPixmap.isNull()) { if (bigPixmap.isNull()) {
qCDebug(PictureLoaderLog) << "Cached pixmap for key" << key << "is NULL!"; qCDebug(CardPictureLoaderLog) << "Cached pixmap for key" << key << "is NULL!";
return; return;
} }
QScreen *screen = qApp->primaryScreen(); QScreen *screen = qApp->primaryScreen();
qreal dpr = screen ? screen->devicePixelRatio() : 1.0; qreal dpr = screen ? screen->devicePixelRatio() : 1.0;
qCDebug(PictureLoaderLog) << "Scaling cached image for" << card.getName(); qCDebug(CardPictureLoaderLog) << "Scaling cached image for" << card.getName();
pixmap = bigPixmap.scaled(size * dpr, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap = bigPixmap.scaled(size * dpr, Qt::KeepAspectRatio, Qt::SmoothTransformation);
pixmap.setDevicePixelRatio(dpr); pixmap.setDevicePixelRatio(dpr);
@ -141,14 +143,14 @@ void PictureLoader::getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size
} }
// add the card to the load queue // add the card to the load queue
qCDebug(PictureLoaderLog) << "Enqueuing " << card.getName() << " for " << card.getPixmapCacheKey(); qCDebug(CardPictureLoaderLog) << "Enqueuing " << card.getName() << " for " << card.getPixmapCacheKey();
getInstance().worker->enqueueImageLoad(card); getInstance().worker->enqueueImageLoad(card);
} }
void PictureLoader::imageLoaded(const ExactCard &card, const QImage &image) void CardPictureLoader::imageLoaded(const ExactCard &card, const QImage &image)
{ {
if (image.isNull()) { if (image.isNull()) {
qCDebug(PictureLoaderLog) << "Caching NULL pixmap for" << card.getName(); qCDebug(CardPictureLoaderLog) << "Caching NULL pixmap for" << card.getName();
QPixmapCache::insert(card.getPixmapCacheKey(), QPixmap()); QPixmapCache::insert(card.getPixmapCacheKey(), QPixmap());
} else { } else {
if (card.getInfo().getUpsideDownArt()) { if (card.getInfo().getUpsideDownArt()) {
@ -164,7 +166,7 @@ void PictureLoader::imageLoaded(const ExactCard &card, const QImage &image)
} }
// imageLoaded should only be reached if the exactCard isn't already in cache. // imageLoaded should only be reached if the exactCard isn't already in cache.
// (plus there's a deduplication mechanism in PictureLoaderWorker) // (plus there's a deduplication mechanism in CardPictureLoaderWorker)
// It should be safe to connect the CardInfo here without worrying about redundant connections. // It should be safe to connect the CardInfo here without worrying about redundant connections.
connect(card.getCardPtr().data(), &QObject::destroyed, this, connect(card.getCardPtr().data(), &QObject::destroyed, this,
[cacheKey = card.getPixmapCacheKey()] { QPixmapCache::remove(cacheKey); }); [cacheKey = card.getPixmapCacheKey()] { QPixmapCache::remove(cacheKey); });
@ -172,17 +174,17 @@ void PictureLoader::imageLoaded(const ExactCard &card, const QImage &image)
card.emitPixmapUpdated(); card.emitPixmapUpdated();
} }
void PictureLoader::clearPixmapCache() void CardPictureLoader::clearPixmapCache()
{ {
QPixmapCache::clear(); QPixmapCache::clear();
} }
void PictureLoader::clearNetworkCache() void CardPictureLoader::clearNetworkCache()
{ {
getInstance().worker->clearNetworkCache(); getInstance().worker->clearNetworkCache();
} }
void PictureLoader::cacheCardPixmaps(const QList<ExactCard> &cards) void CardPictureLoader::cacheCardPixmaps(const QList<ExactCard> &cards)
{ {
QPixmap tmp; QPixmap tmp;
int max = qMin(cards.size(), CACHED_CARD_PER_DECK_MAX); int max = qMin(cards.size(), CACHED_CARD_PER_DECK_MAX);
@ -201,17 +203,17 @@ void PictureLoader::cacheCardPixmaps(const QList<ExactCard> &cards)
} }
} }
void PictureLoader::picDownloadChanged() void CardPictureLoader::picDownloadChanged()
{ {
QPixmapCache::clear(); QPixmapCache::clear();
} }
void PictureLoader::picsPathChanged() void CardPictureLoader::picsPathChanged()
{ {
QPixmapCache::clear(); QPixmapCache::clear();
} }
bool PictureLoader::hasCustomArt() bool CardPictureLoader::hasCustomArt()
{ {
auto picsPath = SettingsCache::instance().getPicsPath(); auto picsPath = SettingsCache::instance().getPicsPath();
QDirIterator it(picsPath, QDir::Dirs | QDir::NoDotAndDotDot); QDirIterator it(picsPath, QDir::Dirs | QDir::NoDotAndDotDot);

View file

@ -1,40 +1,40 @@
/** /**
* @file picture_loader.h * @file card_picture_loader.h
* @ingroup PictureLoader * @ingroup PictureLoader
* @brief TODO: Document this. * @brief TODO: Document this.
*/ */
#ifndef PICTURELOADER_H #ifndef CARD_PICTURE_LOADER_H
#define PICTURELOADER_H #define CARD_PICTURE_LOADER_H
#include "../card/card_info.h" #include "card_picture_loader_status_bar.h"
#include "picture_loader_status_bar.h" #include "card_picture_loader_worker.h"
#include "picture_loader_worker.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <libcockatrice/card/card_info.h>
inline Q_LOGGING_CATEGORY(PictureLoaderLog, "picture_loader"); inline Q_LOGGING_CATEGORY(CardPictureLoaderLog, "card_picture_loader");
inline Q_LOGGING_CATEGORY(PictureLoaderCardBackCacheFailLog, "picture_loader.card_back_cache_fail"); inline Q_LOGGING_CATEGORY(CardPictureLoaderCardBackCacheFailLog, "card_picture_loader.card_back_cache_fail");
class PictureLoader : public QObject class CardPictureLoader : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
static PictureLoader &getInstance() static CardPictureLoader &getInstance()
{ {
static PictureLoader instance; static CardPictureLoader instance;
return instance; return instance;
} }
private: private:
explicit PictureLoader(); explicit CardPictureLoader();
~PictureLoader() override; ~CardPictureLoader() override;
// Singleton - Don't implement copy constructor and assign operator // Singleton - Don't implement copy constructor and assign operator
PictureLoader(PictureLoader const &); CardPictureLoader(CardPictureLoader const &);
void operator=(PictureLoader const &); void operator=(CardPictureLoader const &);
PictureLoaderWorker *worker; CardPictureLoaderWorker *worker;
PictureLoaderStatusBar *statusBar; CardPictureLoaderStatusBar *statusBar;
public: public:
static void getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size); static void getPixmap(QPixmap &pixmap, const ExactCard &card, QSize size);

View file

@ -1,29 +1,30 @@
#include "picture_loader_local.h" #include "card_picture_loader_local.h"
#include "../database/card_database_manager.h" #include "card_picture_to_load.h"
#include "../settings/cache_settings.h"
#include "picture_to_load.h"
#include <QDirIterator> #include <QDirIterator>
#include <QMovie> #include <QMovie>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/cache_settings.h>
static constexpr int REFRESH_INTERVAL_MS = 10 * 1000; static constexpr int REFRESH_INTERVAL_MS = 10 * 1000;
PictureLoaderLocal::PictureLoaderLocal(QObject *parent) CardPictureLoaderLocal::CardPictureLoaderLocal(QObject *parent)
: QObject(parent), picsPath(SettingsCache::instance().getPicsPath()), : QObject(parent), picsPath(SettingsCache::instance().getPicsPath()),
customPicsPath(SettingsCache::instance().getCustomPicsPath()) customPicsPath(SettingsCache::instance().getCustomPicsPath())
{ {
// Hook up signals to settings // Hook up signals to settings
connect(&SettingsCache::instance(), &SettingsCache::picsPathChanged, this, &PictureLoaderLocal::picsPathChanged); connect(&SettingsCache::instance(), &SettingsCache::picsPathChanged, this,
&CardPictureLoaderLocal::picsPathChanged);
refreshIndex(); refreshIndex();
refreshTimer = new QTimer(this); refreshTimer = new QTimer(this);
connect(refreshTimer, &QTimer::timeout, this, &PictureLoaderLocal::refreshIndex); connect(refreshTimer, &QTimer::timeout, this, &CardPictureLoaderLocal::refreshIndex);
refreshTimer->start(REFRESH_INTERVAL_MS); refreshTimer->start(REFRESH_INTERVAL_MS);
} }
void PictureLoaderLocal::refreshIndex() void CardPictureLoaderLocal::refreshIndex()
{ {
customFolderIndex.clear(); customFolderIndex.clear();
@ -42,8 +43,8 @@ void PictureLoaderLocal::refreshIndex()
} }
} }
qCDebug(PictureLoaderLocalLog) << "Finished indexing local image folder CUSTOM; map now has" qCDebug(CardPictureLoaderLocalLog) << "Finished indexing local image folder CUSTOM; map now has"
<< customFolderIndex.size() << "entries."; << customFolderIndex.size() << "entries.";
} }
/** /**
@ -52,7 +53,7 @@ void PictureLoaderLocal::refreshIndex()
* @param toLoad The card to load * @param toLoad The card to load
* @return The loaded image, or an empty QImage if loading failed. * @return The loaded image, or an empty QImage if loading failed.
*/ */
QImage PictureLoaderLocal::tryLoad(const ExactCard &toLoad) const QImage CardPictureLoaderLocal::tryLoad(const ExactCard &toLoad) const
{ {
PrintingInfo setInstance = toLoad.getPrinting(); PrintingInfo setInstance = toLoad.getPrinting();
@ -67,15 +68,15 @@ QImage PictureLoaderLocal::tryLoad(const ExactCard &toLoad) const
providerId = setInstance.getUuid(); providerId = setInstance.getUuid();
} }
qCDebug(PictureLoaderLocalLog).nospace() qCDebug(CardPictureLoaderLocalLog).nospace()
<< "[card: " << cardName << " set: " << setName << "]: Attempting to load picture from local"; << "[card: " << cardName << " set: " << setName << "]: Attempting to load picture from local";
return tryLoadCardImageFromDisk(setName, correctedCardName, collectorNumber, providerId); return tryLoadCardImageFromDisk(setName, correctedCardName, collectorNumber, providerId);
} }
QImage PictureLoaderLocal::tryLoadCardImageFromDisk(const QString &setName, QImage CardPictureLoaderLocal::tryLoadCardImageFromDisk(const QString &setName,
const QString &correctedCardName, const QString &correctedCardName,
const QString &collectorNumber, const QString &collectorNumber,
const QString &providerId) const const QString &providerId) const
{ {
QImage image; QImage image;
QImageReader imgReader; QImageReader imgReader;
@ -134,7 +135,7 @@ QImage PictureLoaderLocal::tryLoadCardImageFromDisk(const QString &setName,
imgReader.setFileName(fullPath); imgReader.setFileName(fullPath);
if (imgReader.read(&image)) { if (imgReader.read(&image)) {
qCDebug(PictureLoaderLocalLog).nospace() qCDebug(CardPictureLoaderLocalLog).nospace()
<< "[card: " << correctedCardName << " set: " << setName << "] Found picture at: " << fullPath; << "[card: " << correctedCardName << " set: " << setName << "] Found picture at: " << fullPath;
return image; return image;
} }
@ -142,12 +143,12 @@ QImage PictureLoaderLocal::tryLoadCardImageFromDisk(const QString &setName,
} }
} }
qCDebug(PictureLoaderLocalLog).nospace() qCDebug(CardPictureLoaderLocalLog).nospace()
<< "[card: " << correctedCardName << " set: " << setName << "]: Picture NOT found on disk."; << "[card: " << correctedCardName << " set: " << setName << "]: Picture NOT found on disk.";
return QImage(); return QImage();
} }
void PictureLoaderLocal::picsPathChanged() void CardPictureLoaderLocal::picsPathChanged()
{ {
picsPath = SettingsCache::instance().getPicsPath(); picsPath = SettingsCache::instance().getPicsPath();
customPicsPath = SettingsCache::instance().getCustomPicsPath(); customPicsPath = SettingsCache::instance().getCustomPicsPath();

View file

@ -1,5 +1,5 @@
/** /**
* @file picture_loader_local.h * @file card_picture_loader_local.h
* @ingroup PictureLoader * @ingroup PictureLoader
* @brief TODO: Document this. * @brief TODO: Document this.
*/ */
@ -7,24 +7,23 @@
#ifndef PICTURE_LOADER_LOCAL_H #ifndef PICTURE_LOADER_LOCAL_H
#define PICTURE_LOADER_LOCAL_H #define PICTURE_LOADER_LOCAL_H
#include "../card/exact_card.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QObject> #include <QObject>
#include <QTimer> #include <QTimer>
#include <libcockatrice/card/printing/exact_card.h>
inline Q_LOGGING_CATEGORY(PictureLoaderLocalLog, "picture_loader.local"); inline Q_LOGGING_CATEGORY(CardPictureLoaderLocalLog, "card_picture_loader.local");
/** /**
* Handles searching for and loading card images from the local pics and custom image folders. * Handles searching for and loading card images from the local pics and custom image folders.
* This class maintains an index of the CUSTOM folder, to avoid repeatedly searching the entire directory. * This class maintains an index of the CUSTOM folder, to avoid repeatedly searching the entire directory.
*/ */
class PictureLoaderLocal : public QObject class CardPictureLoaderLocal : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit PictureLoaderLocal(QObject *parent); explicit CardPictureLoaderLocal(QObject *parent);
QImage tryLoad(const ExactCard &toLoad) const; QImage tryLoad(const ExactCard &toLoad) const;

View file

@ -1,9 +1,9 @@
#include "picture_loader_request_status_display_widget.h" #include "card_picture_loader_request_status_display_widget.h"
PictureLoaderRequestStatusDisplayWidget::PictureLoaderRequestStatusDisplayWidget(QWidget *parent, CardPictureLoaderRequestStatusDisplayWidget::CardPictureLoaderRequestStatusDisplayWidget(QWidget *parent,
const QUrl &_url, const QUrl &_url,
const ExactCard &card, const ExactCard &card,
const QString &setName) const QString &setName)
: QWidget(parent) : QWidget(parent)
{ {
layout = new QHBoxLayout(this); layout = new QHBoxLayout(this);

View file

@ -1,25 +1,25 @@
/** /**
* @file picture_loader_request_status_display_widget.h * @file card_picture_loader_request_status_display_widget.h
* @ingroup PictureLoader * @ingroup PictureLoader
* @brief TODO: Document this. * @brief TODO: Document this.
*/ */
#ifndef PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H #ifndef PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H
#define PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H #define PICTURE_LOADER_REQUEST_STATUS_DISPLAY_WIDGET_H
#include "picture_loader_worker_work.h" #include "card_picture_loader_worker_work.h"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QWidget> #include <QWidget>
class PictureLoaderRequestStatusDisplayWidget : public QWidget class CardPictureLoaderRequestStatusDisplayWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
PictureLoaderRequestStatusDisplayWidget(QWidget *parent, CardPictureLoaderRequestStatusDisplayWidget(QWidget *parent,
const QUrl &url, const QUrl &url,
const ExactCard &card, const ExactCard &card,
const QString &setName); const QString &setName);
void setFinished() void setFinished()
{ {

View file

@ -1,8 +1,8 @@
#include "picture_loader_status_bar.h" #include "card_picture_loader_status_bar.h"
#include "picture_loader_request_status_display_widget.h" #include "card_picture_loader_request_status_display_widget.h"
PictureLoaderStatusBar::PictureLoaderStatusBar(QWidget *parent) : QWidget(parent) CardPictureLoaderStatusBar::CardPictureLoaderStatusBar(QWidget *parent) : QWidget(parent)
{ {
layout = new QHBoxLayout(this); layout = new QHBoxLayout(this);
progressBar = new QProgressBar(this); progressBar = new QProgressBar(this);
@ -15,19 +15,19 @@ PictureLoaderStatusBar::PictureLoaderStatusBar(QWidget *parent) : QWidget(parent
cleaner = new QTimer(this); cleaner = new QTimer(this);
cleaner->setInterval(1000); cleaner->setInterval(1000);
connect(cleaner, &QTimer::timeout, this, &PictureLoaderStatusBar::cleanOldEntries); connect(cleaner, &QTimer::timeout, this, &CardPictureLoaderStatusBar::cleanOldEntries);
cleaner->start(); cleaner->start();
setLayout(layout); setLayout(layout);
} }
void PictureLoaderStatusBar::cleanOldEntries() void CardPictureLoaderStatusBar::cleanOldEntries()
{ {
if (!loadLog || !loadLog->popup) { if (!loadLog || !loadLog->popup) {
return; return;
} }
for (PictureLoaderRequestStatusDisplayWidget *statusDisplayWidget : for (CardPictureLoaderRequestStatusDisplayWidget *statusDisplayWidget :
loadLog->popup->findChildren<PictureLoaderRequestStatusDisplayWidget *>()) { loadLog->popup->findChildren<CardPictureLoaderRequestStatusDisplayWidget *>()) {
statusDisplayWidget->queryElapsedSeconds(); statusDisplayWidget->queryElapsedSeconds();
if (statusDisplayWidget->getFinished() && if (statusDisplayWidget->getFinished() &&
QDateTime::fromString(statusDisplayWidget->getStartTime()).secsTo(QDateTime::currentDateTime()) > 10) { QDateTime::fromString(statusDisplayWidget->getStartTime()).secsTo(QDateTime::currentDateTime()) > 10) {
@ -38,17 +38,17 @@ void PictureLoaderStatusBar::cleanOldEntries()
} }
} }
void PictureLoaderStatusBar::addQueuedImageLoad(const QUrl &url, const ExactCard &card, const QString &setName) void CardPictureLoaderStatusBar::addQueuedImageLoad(const QUrl &url, const ExactCard &card, const QString &setName)
{ {
loadLog->addSettingsWidget(new PictureLoaderRequestStatusDisplayWidget(loadLog, url, card, setName)); loadLog->addSettingsWidget(new CardPictureLoaderRequestStatusDisplayWidget(loadLog, url, card, setName));
progressBar->setMaximum(progressBar->maximum() + 1); progressBar->setMaximum(progressBar->maximum() + 1);
} }
void PictureLoaderStatusBar::addSuccessfulImageLoad(const QUrl &url) void CardPictureLoaderStatusBar::addSuccessfulImageLoad(const QUrl &url)
{ {
progressBar->setValue(progressBar->value() + 1); progressBar->setValue(progressBar->value() + 1);
for (PictureLoaderRequestStatusDisplayWidget *statusDisplayWidget : for (CardPictureLoaderRequestStatusDisplayWidget *statusDisplayWidget :
loadLog->popup->findChildren<PictureLoaderRequestStatusDisplayWidget *>()) { loadLog->popup->findChildren<CardPictureLoaderRequestStatusDisplayWidget *>()) {
if (statusDisplayWidget->getUrl() == url.toString()) { if (statusDisplayWidget->getUrl() == url.toString()) {
statusDisplayWidget->queryElapsedSeconds(); statusDisplayWidget->queryElapsedSeconds();
statusDisplayWidget->setFinished(); statusDisplayWidget->setFinished();

View file

@ -1,5 +1,5 @@
/** /**
* @file picture_loader_status_bar.h * @file card_picture_loader_status_bar.h
* @ingroup PictureLoader * @ingroup PictureLoader
* @brief TODO: Document this. * @brief TODO: Document this.
*/ */
@ -7,18 +7,18 @@
#ifndef PICTURE_LOADER_STATUS_BAR_H #ifndef PICTURE_LOADER_STATUS_BAR_H
#define PICTURE_LOADER_STATUS_BAR_H #define PICTURE_LOADER_STATUS_BAR_H
#include "../interface/widgets/quick_settings/settings_button_widget.h" #include "../../interface/widgets/quick_settings/settings_button_widget.h"
#include "picture_loader_worker_work.h" #include "card_picture_loader_worker_work.h"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QProgressBar> #include <QProgressBar>
#include <QWidget> #include <QWidget>
class PictureLoaderStatusBar : public QWidget class CardPictureLoaderStatusBar : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit PictureLoaderStatusBar(QWidget *parent); explicit CardPictureLoaderStatusBar(QWidget *parent);
public slots: public slots:
void addQueuedImageLoad(const QUrl &url, const ExactCard &card, const QString &setName); void addQueuedImageLoad(const QUrl &url, const ExactCard &card, const QString &setName);

View file

@ -1,20 +1,20 @@
#include "picture_loader_worker.h" #include "card_picture_loader_worker.h"
#include "../database/card_database_manager.h" #include "card_picture_loader_local.h"
#include "../settings/cache_settings.h" #include "card_picture_loader_worker_work.h"
#include "picture_loader_local.h"
#include "picture_loader_worker_work.h"
#include <QDirIterator> #include <QDirIterator>
#include <QMovie> #include <QMovie>
#include <QNetworkDiskCache> #include <QNetworkDiskCache>
#include <QNetworkReply> #include <QNetworkReply>
#include <QThread> #include <QThread>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/cache_settings.h>
#include <utility> #include <utility>
static constexpr int MAX_REQUESTS_PER_SEC = 10; static constexpr int MAX_REQUESTS_PER_SEC = 10;
PictureLoaderWorker::PictureLoaderWorker() CardPictureLoaderWorker::CardPictureLoaderWorker()
: QObject(nullptr), picDownload(SettingsCache::instance().getPicDownload()), requestQuota(MAX_REQUESTS_PER_SEC) : QObject(nullptr), picDownload(SettingsCache::instance().getPicDownload()), requestQuota(MAX_REQUESTS_PER_SEC)
{ {
networkManager = new QNetworkAccessManager(this); networkManager = new QNetworkAccessManager(this);
@ -41,28 +41,28 @@ PictureLoaderWorker::PictureLoaderWorker()
cleanStaleEntries(); cleanStaleEntries();
connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this,
&PictureLoaderWorker::saveRedirectCache); &CardPictureLoaderWorker::saveRedirectCache);
localLoader = new PictureLoaderLocal(this); localLoader = new CardPictureLoaderLocal(this);
pictureLoaderThread = new QThread; pictureLoaderThread = new QThread;
pictureLoaderThread->start(QThread::LowPriority); pictureLoaderThread->start(QThread::LowPriority);
moveToThread(pictureLoaderThread); moveToThread(pictureLoaderThread);
connect(this, &PictureLoaderWorker::imageLoadEnqueued, this, &PictureLoaderWorker::handleImageLoadEnqueued); connect(this, &CardPictureLoaderWorker::imageLoadEnqueued, this, &CardPictureLoaderWorker::handleImageLoadEnqueued);
connect(&requestTimer, &QTimer::timeout, this, &PictureLoaderWorker::resetRequestQuota); connect(&requestTimer, &QTimer::timeout, this, &CardPictureLoaderWorker::resetRequestQuota);
requestTimer.setInterval(1000); requestTimer.setInterval(1000);
requestTimer.start(); requestTimer.start();
} }
PictureLoaderWorker::~PictureLoaderWorker() CardPictureLoaderWorker::~CardPictureLoaderWorker()
{ {
saveRedirectCache(); saveRedirectCache();
pictureLoaderThread->deleteLater(); pictureLoaderThread->deleteLater();
} }
void PictureLoaderWorker::queueRequest(const QUrl &url, PictureLoaderWorkerWork *worker) void CardPictureLoaderWorker::queueRequest(const QUrl &url, CardPictureLoaderWorkerWork *worker)
{ {
QUrl cachedRedirect = getCachedRedirect(url); QUrl cachedRedirect = getCachedRedirect(url);
if (!cachedRedirect.isEmpty()) { if (!cachedRedirect.isEmpty()) {
@ -77,7 +77,7 @@ void PictureLoaderWorker::queueRequest(const QUrl &url, PictureLoaderWorkerWork
} }
} }
QNetworkReply *PictureLoaderWorker::makeRequest(const QUrl &url, PictureLoaderWorkerWork *worker) QNetworkReply *CardPictureLoaderWorker::makeRequest(const QUrl &url, CardPictureLoaderWorkerWork *worker)
{ {
// Check for cached redirects // Check for cached redirects
QUrl cachedRedirect = getCachedRedirect(url); QUrl cachedRedirect = getCachedRedirect(url);
@ -99,7 +99,7 @@ QNetworkReply *PictureLoaderWorker::makeRequest(const QUrl &url, PictureLoaderWo
return reply; return reply;
} }
void PictureLoaderWorker::resetRequestQuota() void CardPictureLoaderWorker::resetRequestQuota()
{ {
requestQuota = MAX_REQUESTS_PER_SEC; requestQuota = MAX_REQUESTS_PER_SEC;
processQueuedRequests(); processQueuedRequests();
@ -108,7 +108,7 @@ void PictureLoaderWorker::resetRequestQuota()
/** /**
* Keeps processing requests from the queue until it is empty or until the quota runs out. * Keeps processing requests from the queue until it is empty or until the quota runs out.
*/ */
void PictureLoaderWorker::processQueuedRequests() void CardPictureLoaderWorker::processQueuedRequests()
{ {
while (requestQuota > 0 && processSingleRequest()) { while (requestQuota > 0 && processSingleRequest()) {
--requestQuota; --requestQuota;
@ -119,7 +119,7 @@ void PictureLoaderWorker::processQueuedRequests()
* Immediately processes a single queued request. No-ops if the load queue is empty * Immediately processes a single queued request. No-ops if the load queue is empty
* @return If a request was processed * @return If a request was processed
*/ */
bool PictureLoaderWorker::processSingleRequest() bool CardPictureLoaderWorker::processSingleRequest()
{ {
if (!requestLoadQueue.isEmpty()) { if (!requestLoadQueue.isEmpty()) {
auto request = requestLoadQueue.takeFirst(); auto request = requestLoadQueue.takeFirst();
@ -129,17 +129,17 @@ bool PictureLoaderWorker::processSingleRequest()
return false; return false;
} }
void PictureLoaderWorker::enqueueImageLoad(const ExactCard &card) void CardPictureLoaderWorker::enqueueImageLoad(const ExactCard &card)
{ {
// Send call through a connection to ensure the handling is run on the pictureLoader thread // Send call through a connection to ensure the handling is run on the pictureLoader thread
emit imageLoadEnqueued(card); emit imageLoadEnqueued(card);
} }
void PictureLoaderWorker::handleImageLoadEnqueued(const ExactCard &card) void CardPictureLoaderWorker::handleImageLoadEnqueued(const ExactCard &card)
{ {
// deduplicate loads for the same card // deduplicate loads for the same card
if (currentlyLoading.contains(card.getPixmapCacheKey())) { if (currentlyLoading.contains(card.getPixmapCacheKey())) {
qCDebug(PictureLoaderWorkerLog()) qCDebug(CardPictureLoaderWorkerLog())
<< "Skipping enqueued" << card.getName() << "because it's already being loaded"; << "Skipping enqueued" << card.getName() << "because it's already being loaded";
return; return;
} }
@ -151,31 +151,31 @@ void PictureLoaderWorker::handleImageLoadEnqueued(const ExactCard &card)
handleImageLoaded(card, image); handleImageLoaded(card, image);
} else { } else {
// queue up to load image from remote only after local loading failed // queue up to load image from remote only after local loading failed
new PictureLoaderWorkerWork(this, card); new CardPictureLoaderWorkerWork(this, card);
} }
} }
/** /**
* Called when image loading is done. Failures are indicated by an empty QImage. * Called when image loading is done. Failures are indicated by an empty QImage.
*/ */
void PictureLoaderWorker::handleImageLoaded(const ExactCard &card, const QImage &image) void CardPictureLoaderWorker::handleImageLoaded(const ExactCard &card, const QImage &image)
{ {
currentlyLoading.remove(card.getPixmapCacheKey()); currentlyLoading.remove(card.getPixmapCacheKey());
emit imageLoaded(card, image); emit imageLoaded(card, image);
} }
void PictureLoaderWorker::cacheRedirect(const QUrl &originalUrl, const QUrl &redirectUrl) void CardPictureLoaderWorker::cacheRedirect(const QUrl &originalUrl, const QUrl &redirectUrl)
{ {
redirectCache[originalUrl] = qMakePair(redirectUrl, QDateTime::currentDateTimeUtc()); redirectCache[originalUrl] = qMakePair(redirectUrl, QDateTime::currentDateTimeUtc());
// saveRedirectCache(); // saveRedirectCache();
} }
void PictureLoaderWorker::removedCachedUrl(const QUrl &url) void CardPictureLoaderWorker::removedCachedUrl(const QUrl &url)
{ {
networkManager->cache()->remove(url); networkManager->cache()->remove(url);
} }
QUrl PictureLoaderWorker::getCachedRedirect(const QUrl &originalUrl) const QUrl CardPictureLoaderWorker::getCachedRedirect(const QUrl &originalUrl) const
{ {
if (redirectCache.contains(originalUrl)) { if (redirectCache.contains(originalUrl)) {
return redirectCache[originalUrl].first; return redirectCache[originalUrl].first;
@ -183,7 +183,7 @@ QUrl PictureLoaderWorker::getCachedRedirect(const QUrl &originalUrl) const
return {}; return {};
} }
void PictureLoaderWorker::loadRedirectCache() void CardPictureLoaderWorker::loadRedirectCache()
{ {
QSettings settings(cacheFilePath, QSettings::IniFormat); QSettings settings(cacheFilePath, QSettings::IniFormat);
@ -202,7 +202,7 @@ void PictureLoaderWorker::loadRedirectCache()
settings.endArray(); settings.endArray();
} }
void PictureLoaderWorker::saveRedirectCache() const void CardPictureLoaderWorker::saveRedirectCache() const
{ {
QSettings settings(cacheFilePath, QSettings::IniFormat); QSettings settings(cacheFilePath, QSettings::IniFormat);
@ -217,7 +217,7 @@ void PictureLoaderWorker::saveRedirectCache() const
settings.endArray(); settings.endArray();
} }
void PictureLoaderWorker::cleanStaleEntries() void CardPictureLoaderWorker::cleanStaleEntries()
{ {
QDateTime now = QDateTime::currentDateTimeUtc(); QDateTime now = QDateTime::currentDateTimeUtc();
@ -231,7 +231,7 @@ void PictureLoaderWorker::cleanStaleEntries()
} }
} }
void PictureLoaderWorker::clearNetworkCache() void CardPictureLoaderWorker::clearNetworkCache()
{ {
networkManager->cache()->clear(); networkManager->cache()->clear();
redirectCache.clear(); redirectCache.clear();

View file

@ -1,5 +1,5 @@
/** /**
* @file picture_loader_worker.h * @file card_picture_loader_worker.h
* @ingroup PictureLoader * @ingroup PictureLoader
* @brief TODO: Document this. * @brief TODO: Document this.
*/ */
@ -7,11 +7,9 @@
#ifndef PICTURE_LOADER_WORKER_H #ifndef PICTURE_LOADER_WORKER_H
#define PICTURE_LOADER_WORKER_H #define PICTURE_LOADER_WORKER_H
#include "../card/card_info.h" #include "card_picture_loader_local.h"
#include "../database/card_database.h" #include "card_picture_loader_worker_work.h"
#include "picture_loader_local.h" #include "card_picture_to_load.h"
#include "picture_loader_worker_work.h"
#include "picture_to_load.h"
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QMutex> #include <QMutex>
@ -20,6 +18,8 @@
#include <QObject> #include <QObject>
#include <QQueue> #include <QQueue>
#include <QTimer> #include <QTimer>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/card/database/card_database.h>
#define REDIRECT_HEADER_NAME "redirects" #define REDIRECT_HEADER_NAME "redirects"
#define REDIRECT_ORIGINAL_URL "original" #define REDIRECT_ORIGINAL_URL "original"
@ -27,22 +27,22 @@
#define REDIRECT_TIMESTAMP "timestamp" #define REDIRECT_TIMESTAMP "timestamp"
#define REDIRECT_CACHE_FILENAME "cache.ini" #define REDIRECT_CACHE_FILENAME "cache.ini"
inline Q_LOGGING_CATEGORY(PictureLoaderWorkerLog, "picture_loader.worker"); inline Q_LOGGING_CATEGORY(CardPictureLoaderWorkerLog, "card_picture_loader.worker");
class PictureLoaderWorkerWork; class CardPictureLoaderWorkerWork;
class PictureLoaderWorker : public QObject class CardPictureLoaderWorker : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit PictureLoaderWorker(); explicit CardPictureLoaderWorker();
~PictureLoaderWorker() override; ~CardPictureLoaderWorker() override;
void enqueueImageLoad(const ExactCard &card); // Starts a thread for the image to be loaded void enqueueImageLoad(const ExactCard &card); // Starts a thread for the image to be loaded
void queueRequest(const QUrl &url, PictureLoaderWorkerWork *worker); // Queues network requests for load threads void queueRequest(const QUrl &url, CardPictureLoaderWorkerWork *worker); // Queues network requests for load threads
void clearNetworkCache(); void clearNetworkCache();
public slots: public slots:
QNetworkReply *makeRequest(const QUrl &url, PictureLoaderWorkerWork *workThread); QNetworkReply *makeRequest(const QUrl &url, CardPictureLoaderWorkerWork *workThread);
void processQueuedRequests(); void processQueuedRequests();
bool processSingleRequest(); bool processSingleRequest();
void handleImageLoaded(const ExactCard &card, const QImage &image); void handleImageLoaded(const ExactCard &card, const QImage &image);
@ -57,12 +57,12 @@ private:
QString cacheFilePath; // Path to persistent storage QString cacheFilePath; // Path to persistent storage
static constexpr int CacheTTLInDays = 30; // TODO: Make user configurable static constexpr int CacheTTLInDays = 30; // TODO: Make user configurable
bool picDownload; bool picDownload;
QQueue<QPair<QUrl, PictureLoaderWorkerWork *>> requestLoadQueue; QQueue<QPair<QUrl, CardPictureLoaderWorkerWork *>> requestLoadQueue;
int requestQuota; int requestQuota;
QTimer requestTimer; // Timer for refreshing request quota QTimer requestTimer; // Timer for refreshing request quota
PictureLoaderLocal *localLoader; CardPictureLoaderLocal *localLoader;
QSet<QString> currentlyLoading; // for deduplication purposes. Contains pixmapCacheKey QSet<QString> currentlyLoading; // for deduplication purposes. Contains pixmapCacheKey
QUrl getCachedRedirect(const QUrl &originalUrl) const; QUrl getCachedRedirect(const QUrl &originalUrl) const;

Some files were not shown because too many files have changed in this diff Show more