It's no longer a singleton
It's now a unique_ptr that dies together with the Application
* Add getChatLogger to EmptyApplication
* unrelated change: Access Application::instance statically
* fix logging init order
* Add changelog entry
This means it's no longer a singleton, and its lifetime is bound to our application.
This felt like a good small experiment to see how its changes would look
if we did this.
As a shortcut, `getApp` that is already a mega singleton keeps a
reference to Args, this means places that are a bit more difficult to
inject into call `getApp()->getArgs()` just like other things are
accessed.
Miniaudio now runs everything in a separate audio thread - this uses boost::asio's io_context.
Our miniaudio implementation is now also much simplified - it does not use its own resource manager or device. This might end up being stupid if sounds don't work after changing output device or locking or w/e
I've made the sound controller into an interface, meaning we can support multiple sound backends in Chatterino. I've added a Null sound backend that disables all sound. A QMediaPlayer or QSoundEffect or Qt backend could be added.
Miniaudio might idle & disable the device now too, not sure
I've added some unrelated changes in the form of a new setting type, and a new setting page helper function for it, which will hopefully make adding new enum settings easier in the future.
This setting stores its value as a string instead of an int, and uses magic_enum to convert between that string value and its enum value.
Use full path in includes
Sort includes
Move anon namespace out of chatterino namespace
Use auto * where possible
Disable convert-member-function-to-static check for all member functions
Don't use else after return
Removed empty constructor
Replace use of `boost::variant` with `std::variant`
Co-authored-by: nerix <nerixdev@outlook.de>
* Fixes a bug where avatars weren't loaded on fresh installations of Chatterino.
* Avatars now update every two weeks.
* Removes misleading `DownlaodManager` (now part of `Toasts.cpp`).
* Refactors usage of WinToast to be easier to read.
* Added version to AUMI.
* Removes manual `QString` → `std::wstring` conversions.
* Removes uses of implicit ASCII casts in `Toasts.cpp`, meaning it can be compiled with `QT_NO_CAST_FROM_ASCII`.
* refactor: remove singletons from message rendering
* chore: add changelog entry
* Disable the `cppcoreguidelines-avoid-const-or-ref-data-members` clang-tidy check
* auto *app
* Selection is a struct, not a class
* Use ChannelView's `signalHolder_` instead of `channelConnections_`
* Remove `applySettings` step, instead just connect & set each setting individually
* rename & constify some context values
* Handle empty "last message color" setting value better (as it was
originally in this pr before I removed that change :-)
* unrelated mini refactor cleanup
* let painSelection handle size_t instead of int
* Add some more comments to the MessageLayoutContext structs
---------
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
Cleanup unused code (Twitch v5)
Add json methods that simplify sending JSON. This also sets the Accepts header, since here, when JSON is sent, only JSON is accepted as a response (this is only done in Helix).
Clarify helix request creations
Cleaned some clang-tidy suggestions in Network{Request,Private}
The scripting capabilities is locked behind a cmake flag, and is not enabled by default.
Co-authored-by: nerix <nerixdev@outlook.de>
Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
* Update `CMakeLists.txt`
* Update `resources/com.chatterino.chatterino.appdata.xml`
* Update `src/common/Version.hpp`
* Update `CHANGELOG.md`
This includes changelog re-ordering changes that would normally be in a seperate PR, but this release will be an exception to that rule
* feat: crashpad on windows
* feat: inline it
* feat: more crashpad
* chore: remove qBreakpad
* fix: add mention to crashpad
* refactor: version string
* feat: add crashpad module
* refactor: build crashpad from source
* fix: minor adjustments
* chore: add changelog entry
* fix: formatting and include
* fix: format
* build: use flags similar to release profile
* ci: build with crashpad on windows
* ci: recurse submodules
* ci: always include crashpad
* fix: try 7z
for some reason zstd just doesn't run
* fix: wrong path for symbols
* fix: copy
pls don't build
* ci: use new cache key
* fix: missing pragma
* ci: add workflow without crashpad
* docs: elevate changelog entry
* fix: add link to cmake issue
* fix: windows include issue
Someone (crashpad) includes Windows.h before winsock2.h
* fix: working directory
* fix: another working directory
Thanks Greenlandicsmiley, Nerixyz, Yoitsu, and helmak for helping debug & test this
* Remove QMediaPlayer includes
* Prefer local path when generating the sound path
* Update changelog entry number
* Disable pitch & spatialization control
* feat: c++ 20
* fix: c++ 20 deprecations
* fix(msvc): warnings
* chore: add changelog entry
* fix: formatting
* Update websocketpp to the `develop` branch
* Specify other template type in FlagsEnum != operator
* Remove the user of simple template ids in our websocketpp template class
Also standardizes the file a bit by using nested namespaces, using
pragma once
* fix: turn `MAGIC_MESSAGE_SUFFIX` into a `QString`
* hacky unhacky hacky const char hack
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This change enforces strict include grouping using IncludeCategories
In addition to adding this to the .clang-format file and applying it in the tests/src and src directories, I also did the following small changes:
In ChatterSet.hpp, I changed lrucache to a <>include
In Irc2.hpp, I change common/SignalVector.hpp to a "project-include"
In AttachedWindow.cpp, NativeMessaging.cpp, WindowsHelper.hpp, BaseWindow.cpp, and StreamerMode.cpp, I disabled clang-format for the windows-includes
In WindowDescriptors.hpp, I added the missing vector include. It was previously not needed because the include was handled by another file that was previously included first.
clang-format minimum version has been bumped, so Ubuntu version used in the check-formatting job has been bumped to 22.04 (which is the latest LTS)
* fix: link to the current user in timeouts
* fix: `readability-suspicious-call-argument`
* docs: add changelog entry
* fix: link both users when replacing timeout
* Update changelog entry
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
* Add working reconnect recent messages
* Rename method to messagesUpdated
* Use audo declarations
* Add docs to new LimitedQueue methods
* Add more documentation, try atomic loading flag
* Update CHANGELOG.md
* Remove unused include
* Rename 'reconnected' signal to 'connected'
* Reserve before filtering on arbitrary update
* Extract recent messages fetching to own class
* Use std::atomic_flag instead of std::atomic_bool
* Add PostToThread include
* Add chatterino.recentmessages logging
* Remove unneeded parameters, lambda move capture
* Remove TwitchChannel::buildRecentMessages
* Add documentation, use more clear method name
* Reword changelog entry
I think it sounds better like this :)
* Rework how filling in missing messages is handled
This should hopefully prevent issues with filtered channels with old messages
that no longer exist in the underlying channel
* Check existing messages when looking for reply
* Clean up string distribution in file
* Try to improve documentation
* Use std::function for RecentMessagesApi
* Only trigger filledInMessages if we inserted
* Remove old unused lines
* Use make_shared<MessageLayout> instead of new MessageLayout
* Alphabetize QLogging categories
* Reorder CHANGELOG.md
* Use circular buffer for LimitedQueue
* Reduce copying of snapshot
* Small optimizations
* Remove unneeded lock statements
* Add LimitedQueue tests
* Fix includes for limited queue benchmark
* Update CHANGELOG.md
* Use correct boost version iterators
* Use a shared_mutex to clarify reads and writes
* Update `find`/`rfind` to return the result as a boost::optional
* Use `[[nodiscard]]` where applicable
* Update comments
* Add a couple more doc comments
* Replace size with get
get is a safe (locked & checked) version of at
* Use std::vector in LimitedQueueSnapshot
* Update LimitedQueue benchmarks
* Add mutex guard to buffer accessors
We do not know whether T is an atomic type or not
so we can't safely say that we can copy the value
at a certain address of the buffer.
See https://stackoverflow.com/a/2252478
* Update doc comments, add first/last getters
* Make limit_ const
* Omit `else` if the if-case always returns
* Title case category comments
* Remove `at`
* Fix `get` comment
* Privatize/comment/lock property accessors
- `limit` is now private
- `space` is now private
- `full` has been removed
- `empty` now locks
* Remove `front` function
* Remove `back` method
* Add comment to `first`
* Add comment to `last`
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
added new `GIT_MODIFIED` variable - used to determine whether the vcs tree was compiled or not at the time of building the app
added information about running in DEBUG mode which might be very helpful to determine whether one is running a DEBUG build, e.g. in the process of troubleshooting/determining crash causes
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>