diff --git a/Stuckfish.vcxproj b/Stuckfish.vcxproj
index 24ea28c..7ca21d7 100644
--- a/Stuckfish.vcxproj
+++ b/Stuckfish.vcxproj
@@ -20,39 +20,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -111,24 +109,24 @@
- Libraries\include
- Libraries\lib;$(LibraryPath)
- Sources;Sources\App;Sources\UI;$(SourcePath)
+ C:\Users\Aman\source\repos\stuckfish\include\App;C:\Users\Aman\source\repos\stuckfish\include\UI;$(IncludePath)
+ include\lib;$(LibraryPath)
+ C:\Users\Aman\source\repos\stuckfish\src\UI;C:\Users\Aman\source\repos\stuckfish\src\App;C:\Users\Aman\source\repos\stuckfish\src
- Libraries\include
- Libraries\lib;$(LibraryPath)
- Sources;Sources\App;Sources\UI;$(SourcePath)
+ C:\Users\Aman\source\repos\stuckfish\include\App;C:\Users\Aman\source\repos\stuckfish\include\UI;$(IncludePath)
+ include\lib;$(LibraryPath)
+ C:\Users\Aman\source\repos\stuckfish\src\UI;C:\Users\Aman\source\repos\stuckfish\src\App;C:\Users\Aman\source\repos\stuckfish\src
- Libraries\include;$(IncludePath)
- Libraries\lib;$(LibraryPath)
- Sources\UI;Sources\App;Sources;$(SourcePath)
+ include\UI;include\App;$(IncludePath)
+ include\lib;$(LibraryPath)
+ src\UI;src\App;src;$(SourcePath)
- Libraries\include;$(IncludePath)
- Libraries\lib;$(LibraryPath)
- Sources\UI;Sources\App;Sources;$(SourcePath)
+ include\UI;include\App;$(IncludePath)
+ include\lib;$(LibraryPath)
+ src\UI;src\App;src;$(SourcePath)true
@@ -142,7 +140,7 @@
trueWIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)true
- imgui;%(AdditionalIncludeDirectories)
+ thirdparty\imgui;thirdparty\;%(AdditionalIncludeDirectories)stdcpp17
@@ -159,7 +157,7 @@
trueWIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)true
- imgui;%(AdditionalIncludeDirectories)
+ thirdparty\imgui;thirdparty;%(AdditionalIncludeDirectories)stdcpp17
@@ -177,7 +175,7 @@
true_DEBUG;_CONSOLE;%(PreprocessorDefinitions)true
- imgui;%(AdditionalIncludeDirectories)
+ thirdparty\imgui;thirdparty\;%(AdditionalIncludeDirectories)stdcpp17
@@ -194,7 +192,7 @@
trueNDEBUG;_CONSOLE;%(PreprocessorDefinitions)true
- imgui;%(AdditionalIncludeDirectories)
+ thirdparty\imgui;thirdparty;%(AdditionalIncludeDirectories)stdcpp17
diff --git a/include/App/Logic.hpp b/include/App/Logic.hpp
new file mode 100644
index 0000000..d07af11
--- /dev/null
+++ b/include/App/Logic.hpp
@@ -0,0 +1,46 @@
+/******************************************************************************
+ * File: Logic.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: This file contains the API requests methods
+ *****************************************************************************/
+
+#pragma once
+
+#include
+#include
+#include
+#include "rapidjson/document.h"
+#include "rapidjson/error/en.h"
+
+using namespace rapidjson;
+
+namespace Stuckfish
+{
+ // consider creating a C-style structure to hold games data and a vector of this structure in Logic.
+ struct GamesData
+ {
+ std::string pgn;
+ std::string timeClass;
+ std::string gameResult;
+ std::string whiteRating;
+ std::string blackRating;
+ std::string whiteUsername;
+ std::string blackUsername;
+ };
+
+ class Logic
+ {
+ public:
+ Logic() : _gamesData()
+ {};
+
+ bool IsChessDotComUser(const std::string& username);
+ void GamesPlayedWithinPeriod(const std::string& username, const std::string& year, const std::string& month);
+ void GetInfosFromListOfGamesPlayed(const std::string& username, const Document& doc);
+
+ private:
+ std::vector _gamesData;
+ };
+}
+
diff --git a/include/App/Stuckfish.hpp b/include/App/Stuckfish.hpp
new file mode 100644
index 0000000..83be76b
--- /dev/null
+++ b/include/App/Stuckfish.hpp
@@ -0,0 +1,96 @@
+/******************************************************************************
+ * File: Stuckfish.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: This file contains the Core class and setup methods
+ *****************************************************************************/
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+#include "imgui.h"
+#include "imgui_impl_glfw.h"
+#include "imgui_impl_opengl3.h"
+#include "imgui_stdlib.h"
+
+#include "fonts.hpp"
+#include "Page.hpp"
+
+#include
+
+#if defined(IMGUI_IMPL_OPENGL_ES2)
+#include
+#endif
+
+#include // Will drag system OpenGL headers
+
+
+#ifdef __EMSCRIPTEN__
+ #include "../emscripten/emscripten_mainloop_stub.h"
+#endif
+
+#define GLSL_VERSION "#version 330"
+
+
+namespace Stuckfish
+{
+ struct WindowSpecs
+ {
+ std::string name = "Stuckfish";
+ uint32_t width = 1500;
+ uint32_t height = 800;
+ };
+
+ class Core
+ {
+ public:
+ Core(const WindowSpecs& win_specs = WindowSpecs());
+ ~Core();
+
+ void Run(void);
+
+ static Core& Get(void);
+
+ template
+ void PushLayer(Args&&... args) {
+ static_assert(std::is_base_of::value, "Pushed type is not subclass of Page!");
+ _pageStack.emplace_back(std::make_shared(std::forward(args)...));
+ }
+
+ /*template
+ T& GetLayer() {
+ return dynamic_cast(*(_pageStack.front()));
+ }*/
+
+ std::vector>& GetPageStack(void)
+ {
+ return _pageStack;
+ }
+
+ void DisplayErrorPopup(const char *error_message);
+ void RemoveErrorPopup(void);
+
+ public:
+ ImFont* _robotoFontHeader = nullptr;
+ ImFont* _robotoFontBody = nullptr;
+ ImFont* _robotoFontBodyMedium = nullptr;
+
+ WindowSpecs _specs;
+ Logic _appLogic;
+ UserData _userData;
+ private:
+ void Init(void);
+ void Quit(void);
+
+ private:
+ GLFWwindow* _window = nullptr;
+
+ std::vector> _pageStack;
+ };
+
+ std::unique_ptr CreateApplication(void);
+};
\ No newline at end of file
diff --git a/include/UI/GamesPlayedPage.hpp b/include/UI/GamesPlayedPage.hpp
new file mode 100644
index 0000000..70ea3bc
--- /dev/null
+++ b/include/UI/GamesPlayedPage.hpp
@@ -0,0 +1,32 @@
+/******************************************************************************
+ * File: GamesPlayedPage.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: This file contains the required method to render the 2nd Page
+ *****************************************************************************/
+
+#pragma once
+
+#include "Stuckfish.hpp"
+
+namespace Stuckfish
+{
+ class GamesPlayedPage : public Page
+ {
+ public:
+ GamesPlayedPage(Core& app, Logic& logic, UserData& userData) : _app(app), _logic(logic), _userdata(userData)
+ {};
+
+ void OnUpdate() override;
+ void OnUIRender() override;
+ void OnAttach() override;
+ void OnDetach() override;
+
+ private:
+ Core& _app;
+ Logic& _logic;
+ UserData& _userdata;
+
+ bool _hasRetrievedGames = false;
+ };
+}
diff --git a/include/UI/Page.hpp b/include/UI/Page.hpp
new file mode 100644
index 0000000..49fd717
--- /dev/null
+++ b/include/UI/Page.hpp
@@ -0,0 +1,97 @@
+/******************************************************************************
+ * File: Page.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: Page was meant to be an interface for other pages...
+ *****************************************************************************/
+
+#pragma once
+
+#include "Logic.hpp"
+#include
+
+namespace Stuckfish
+{
+ class Core;
+}
+
+namespace Stuckfish
+{
+ const float confirmButtonSizeX = 200.0f;
+ const float confirmButtonSizeY = 35.0f;
+ const float popupConfirmButtonSizeX = 50.0f;
+ const float popupConfirmButtonSizeY = 0.0f;
+
+ const float roundingValue = 5.0f;
+
+ const float inputFieldWidth = 400;
+
+ enum class WindowTitle
+ {
+ USERINFO_PAGE,
+ LOADING_PAGE,
+ GAMESPLAYED_PAGE,
+ ERROR_POPUP
+ };
+
+ enum class Buttons
+ {
+ CONFIRM,
+ OK
+ };
+
+ enum class Errors
+ {
+ EMPTY_USERNAME,
+ USERNAME_NOT_FOUND
+ };
+
+ inline const char* WindowTitlesToString(WindowTitle t) {
+ switch (t) {
+ case WindowTitle::USERINFO_PAGE: return "User Info Page";
+ case WindowTitle::LOADING_PAGE: return "Loading Page";
+ case WindowTitle::GAMESPLAYED_PAGE: return "Games Played Page";
+ case WindowTitle::ERROR_POPUP: return "Error Popup";
+ default: return "[Unknown Page]";
+ }
+ }
+
+ inline const char* ButtonsToString(Buttons b) {
+ switch (b) {
+ case Buttons::CONFIRM: return "Confirm";
+ case Buttons::OK: return "OK";
+ default: return "[Unknown Button]";
+ }
+ }
+
+ inline const char* ErrorsToString(Errors e) {
+ switch (e) {
+ case Errors::EMPTY_USERNAME: return "Empty username.";
+ case Errors::USERNAME_NOT_FOUND: return "Cannot find the username on Chess.com";
+ default: return "[Unknown Error]";
+ }
+ }
+
+ struct UserData
+ {
+ UserData(const std::string& name = "") : username(name)
+ {};
+
+ std::string username;
+ };
+
+ class Page
+ {
+ public:
+
+ virtual ~Page() = default; // virtual destructor as the class will be inherited.
+ virtual void OnUpdate() {};
+ virtual void OnUIRender() {};
+ virtual void OnAttach() {};
+ virtual void OnDetach() {};
+
+ public:
+ bool _errorOccured = false;
+ std::string _errorMessage = "";
+ };
+}
\ No newline at end of file
diff --git a/include/UI/UserInfosPage.hpp b/include/UI/UserInfosPage.hpp
new file mode 100644
index 0000000..c585bf3
--- /dev/null
+++ b/include/UI/UserInfosPage.hpp
@@ -0,0 +1,29 @@
+/******************************************************************************
+ * File: UserInfosPage.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: This file contains the required methods to render the 1st page
+ *****************************************************************************/
+
+#include "Page.hpp"
+
+namespace Stuckfish
+{
+ class UserInfosPage : public Page
+ {
+ public:
+ UserInfosPage(Core& app, Logic& logic, UserData& userData) : _app(app), _logic(logic), _userdata(userData)
+ {}
+
+ void OnUpdate() override;
+ void OnUIRender() override;
+ void OnAttach() override;
+ void OnDetach() override;
+
+ private:
+ Core& _app;
+ Logic& _logic;
+ UserData& _userdata;
+ };
+}
+
diff --git a/include/UI/fonts.hpp b/include/UI/fonts.hpp
new file mode 100644
index 0000000..b3068b9
--- /dev/null
+++ b/include/UI/fonts.hpp
@@ -0,0 +1,23 @@
+/******************************************************************************
+ * File: fonts.hpp
+ * Authors: see AUTHORS file
+ * Date: May 3, 2024
+ * Description: This file contains all the data related to the fonts we are using
+ *****************************************************************************/
+
+#pragma once
+
+extern unsigned char roboto_regular[168260];
+extern unsigned char roboto_medium[168644];
+
+class FontSizes
+{
+public:
+ static const float LargeHeaderFontSize;
+ static const float MediumHeaderFontSize;
+ static const float SmallHeaderFontSize;
+
+ static const float LargeBodyFontSize;
+ static const float MediumBodyFontSize;
+ static const float SmallBodyFontSize;
+};
diff --git a/packages/libcpr.1.10.5/.signature.p7s b/packages/libcpr.1.10.5/.signature.p7s
new file mode 100644
index 0000000..f0de702
Binary files /dev/null and b/packages/libcpr.1.10.5/.signature.p7s differ
diff --git a/packages/libcpr.1.10.5/README.md b/packages/libcpr.1.10.5/README.md
new file mode 100644
index 0000000..f6accae
--- /dev/null
+++ b/packages/libcpr.1.10.5/README.md
@@ -0,0 +1,173 @@
+# C++ Requests: Curl for People
+
+[![Documentation](https://img.shields.io/badge/docs-online-informational?style=flat&link=https://docs.libcpr.org/)](https://docs.libcpr.org/)
+![CI](https://github.com/libcpr/cpr/workflows/CI/badge.svg)
+[![Gitter](https://badges.gitter.im/libcpr/community.svg)](https://gitter.im/libcpr/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
+## Announcements
+
+* This project is being maintained by [Fabian Sauter](https://github.com/com8) and [Kilian Traub](https://github.com/KingKili).
+* For quick help, and discussion libcpr also offer a [gitter](https://gitter.im/libcpr/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link) chat.
+
+## Supported Releases
+| Release | Min. C++ Standard | Status | Notes |
+|----------|-------------------|--------|-------|
+| master | `cpp17` | ![alt text][preview] | |
+| 1.10.x | `cpp17` | ![alt text][supported] | |
+| 1.9.x | `cpp11` | ![alt text][supported] | Supported until 01.01.2025 |
+| <= 1.8.x | `cpp11` | ![alt text][unsupported] | |
+
+[unsupported]: https://img.shields.io/badge/-unsupported-red "unsupported"
+[supported]: https://img.shields.io/badge/-supported-green "supported"
+[preview]: https://img.shields.io/badge/-preview-orange "preview"
+
+## TLDR
+
+C++ Requests is a simple wrapper around [libcurl](http://curl.haxx.se/libcurl) inspired by the excellent [Python Requests](https://github.com/kennethreitz/requests) project.
+
+Despite its name, libcurl's easy interface is anything but, and making mistakes, misusing it is a common source of error and frustration. Using the more expressive language facilities of `C++17` (or `C++11` in case you use cpr < 1.10.0), this library captures the essence of making network calls into a few concise idioms.
+
+Here's a quick GET request:
+
+```c++
+#include
+
+int main(int argc, char** argv) {
+ cpr::Response r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
+ cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC},
+ cpr::Parameters{{"anon", "true"}, {"key", "value"}});
+ r.status_code; // 200
+ r.header["content-type"]; // application/json; charset=utf-8
+ r.text; // JSON text string
+ return 0;
+}
+```
+
+And here's [less functional, more complicated code, without cpr](https://gist.github.com/whoshuu/2dc858b8730079602044).
+
+## Documentation
+
+[![Documentation](https://img.shields.io/badge/docs-online-informational?style=for-the-badge&link=https://docs.libcpr.org/)](https://docs.libcpr.org/)
+You can find the latest documentation [here](https://docs.libcpr.org/). It's a work in progress, but it should give you a better idea of how to use the library than the [tests](https://github.com/libcpr/cpr/tree/master/test) currently do.
+
+## Features
+
+C++ Requests currently supports:
+
+* Custom headers
+* Url encoded parameters
+* Url encoded POST values
+* Multipart form POST upload
+* File POST upload
+* Basic authentication
+* Bearer authentication
+* Digest authentication
+* NTLM authentication
+* Connection and request timeout specification
+* Timeout for low speed connection
+* Asynchronous requests
+* :cookie: support!
+* Proxy support
+* Callback interfaces
+* PUT methods
+* DELETE methods
+* HEAD methods
+* OPTIONS methods
+* PATCH methods
+* Thread Safe access to [libCurl](https://curl.haxx.se/libcurl/c/threadsafe.html)
+* OpenSSL and WinSSL support for HTTPS requests
+
+## Planned
+
+For a quick overview about the planed features, have a look at the next [Milestones](https://github.com/libcpr/cpr/milestones).
+
+## Usage
+
+### CMake
+
+#### fetch_content:
+If you already have a CMake project you need to integrate C++ Requests with, the primary way is to use `fetch_content`.
+Add the following to your `CMakeLists.txt`.
+
+
+```cmake
+include(FetchContent)
+FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/libcpr/cpr.git
+ GIT_TAG 0817715923c9705e68994eb52ef9df3f6845beba) # The commit hash for 1.10.x. Replace with the latest from: https://github.com/libcpr/cpr/releases
+FetchContent_MakeAvailable(cpr)
+```
+
+This will produce the target `cpr::cpr` which you can link against the typical way:
+
+```cmake
+target_link_libraries(your_target_name PRIVATE cpr::cpr)
+```
+
+That should do it!
+There's no need to handle `libcurl` yourself. All dependencies are taken care of for you.
+All of this can be found in an example [**here**](https://github.com/libcpr/example-cmake-fetch-content).
+
+#### find_package():
+If you prefer not to use `fetch_content`, you can download, build, and install the library and then use CMake `find_package()` function to integrate it into a project.
+
+**Note:** this feature is feasible only if CPR_USE_SYSTEM_CURL is set. (see [#645](https://github.com/libcpr/cpr/pull/645))
+```Bash
+$ git clone https://github.com/libcpr/cpr.git
+$ cd cpr && mkdir build && cd build
+$ cmake .. -DCPR_USE_SYSTEM_CURL=ON
+$ cmake --build .
+$ sudo cmake --install .
+```
+In your `CMakeLists.txt`:
+```cmake
+find_package(cpr REQUIRED)
+add_executable(your_target_name your_target_name.cpp)
+target_link_libraries(your_target_name PRIVATE cpr::cpr)
+```
+
+### Bazel
+
+Please refer to [hedronvision/bazel-make-cc-https-easy](https://github.com/hedronvision/bazel-make-cc-https-easy).
+
+### Packages for Linux Distributions
+
+Alternatively, you may install a package specific to your Linux distribution. Since so few distributions currently have a package for cpr, most users will not be able to run your program with this approach.
+
+Currently, we are aware of packages for the following distributions:
+
+* [Arch Linux (AUR)](https://aur.archlinux.org/packages/cpr)
+
+If there's no package for your distribution, try making one! If you do, and it is added to your distribution's repositories, please submit a pull request to add it to the list above. However, please only do this if you plan to actively maintain the package.
+
+### NuGet Package
+
+For Windows, there is also a libcpr NuGet package available. Currently, x86 and x64 builds are supported with release and debug configuration.
+
+The package can be found here: [NuGet.org](https://www.nuget.org/packages/libcpr/)
+
+## Requirements
+
+The only explicit requirements are:
+
+* a `C++17` compatible compiler such as Clang or GCC. The minimum required version of GCC is unknown, so if anyone has trouble building this library with a specific version of GCC, do let us know
+* in case you only have a `C++11` compatible compiler available, all versions below cpr 1.9.x are for you. The 1.10.0 release of cpr switches to `C++17` as a requirement.
+* If you would like to perform https requests `OpenSSL` and its development libraries are required.
+
+## Building cpr - Using vcpkg
+
+You can download and install cpr using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
+```Bash
+git clone https://github.com/Microsoft/vcpkg.git
+cd vcpkg
+./bootstrap-vcpkg.sh
+./vcpkg integrate install
+./vcpkg install cpr
+```
+The `cpr` port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
+
+## Building cpr - Using Conan
+
+You can download and install `cpr` using the [Conan](https://conan.io/) package manager. Setup your CMakeLists.txt (see [Conan documentation](https://docs.conan.io/en/latest/integrations/build_system.html) on how to use MSBuild, Meson and others).
+An example can be found [**here**](https://github.com/libcpr/example-cmake-conan).
+
+The `cpr` package in Conan is kept up to date by Conan contributors. If the version is out of date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index) on the `conan-center-index` repository.
diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config b/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config
new file mode 100644
index 0000000..d235fbd
--- /dev/null
+++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config
@@ -0,0 +1,196 @@
+#! /bin/sh
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, , et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at https://curl.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+# SPDX-License-Identifier: curl
+#
+###########################################################################
+
+prefix="C:/Program Files (x86)/cpr"
+exec_prefix=${prefix}
+includedir=${prefix}/include
+cppflag_curl_staticlib=
+
+usage()
+{
+ cat <&2
+ exit 1
+ fi
+ ;;
+
+ --configure)
+ echo
+ ;;
+
+ *)
+ echo "unknown option: $1"
+ usage 1
+ ;;
+ esac
+ shift
+done
+
+exit 0
diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h
new file mode 100644
index 0000000..167d7c2
--- /dev/null
+++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h
@@ -0,0 +1,41 @@
+#ifndef CPR_ACCEPT_ENCODING_H
+#define CPR_ACCEPT_ENCODING_H
+
+#include
+#include
+#include