mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
b9ecd0e112
* chore: better gh templates * chore: add about - sysinfo to gh issues * fix: Webui freeze on auth error * Split Git Remote to own field * Move CONTRIBUTING.md
3.7 KiB
3.7 KiB
Translations
You can participate in the translation.
Development Setup
TODO: Be more specific, provide a Visual Studio Code workspace with plugins and pre configured build tasks
Get Hyperion to compile: Compile HowTo
Workflow
Issue
TODO
Pull requests
- Create a feature branch from the default branch (
master
) and merge back against that branch. - It's OK to have multiple small commits as you work on the PR - GitHub automatically squashes them before merging.
- Make sure tests pass.
- If adding a new feature:
- Provide a convincing reason to add this feature. Ideally, you should open a suggestion issue first and have it approved before working on it.
- If fixing bug:
- If you are resolving an open issue, add
(fix #xxxx)
(#xxxx
being the issue ID) in your PR title for a better release log, e.g.chore(feat): implement SSR (fix #1234)
. - Provide a detailed description of the bug in the PR.
- If you are resolving an open issue, add
Code Specification
- use QT wherever it's possible (except there is a good reason)
- use unix line endings (not windows)
- indent your code with TABs instead of spaces
- your files should end with a newline
- names are camel case
- use utf8 file encoding (ANSI encoding is strictly forbidden!)
- use speaking names for variables.
- avoid code dups -> if you write similar code blocks more the 2 times -> refactoring!
- avoid compiler macros (#ifdef #define ...) where possible
- class member variables must prefixed with underscore
int _myMemberVar
- initializer list on constructors:
bad:
MyClass::MyClass()
: myVarA(0), myVarB("eee"), myVarC(true)
{
}
MyClass::MyClass() : myVarA(0),
myVarB("eee"),
myVarC(true)
{
}
good:
MyClass::MyClass()
: myVarA(0)
, myVarB("eee")
, myVarC(true)
{
}
- pointer declaration
bad:
int *foo;
int * fooFoo;
good:
int* foo;
Logger
Hyperion has a own logger class with different log levels.
- Use macros in include/utils/logger.h
- Don't use the Logger class directly unless there is a good reason to do so.
// *** including
#include <utils/logger.h>
// creating
// get a logger, this will create a logger named MAIN with min loglevel INFO, DEBUG messages won't displayed
Logger * log_main = Logger::getInstance("MAIN");
// get a logger, this will create a logger named MAIN with min loglevel DEBUG, all messages displayed
Logger * log_main = Logger::getInstance("MAIN", Logger::DEBUG);
// using
// basic
Debug( log_main, "hello folks!");
Info( log_main, "hello again!");
Warning( log_main, "something is crazy");
Error( log_main, "oh to crazy, aborting");
// quick logging, when only one message exists and want no typing overhead - or usage in static functions
Info( Logger::getInstance("LedDevice"), "Leddevice %s started", "PublicStreetLighting");
// a bit mor complex - with printf like format
Info( log_main, "hello %s, you have %d messages", "Dax", 25);
// conditional messages
WarningIf( (value>threshold), log_main, "Alert, your value is greater then %d", threshold );
The amount of "%" mus match with following arguments
The Placeholders
- %s for strings (this are cstrings, when having std::string use myStdString.c_str() to convert)
- %d for integer numbers
- %f for float numbers
- more placeholders possible, see here
Log Level
- Debug - used when message is more or less for the developer or for trouble shooting
- Info - used for not absolutly developer stuff messages for what's going on
- Warning - warn if something is not as it should be, but didn't harm
- Error - used when an error occurs
Commit specification
TODO