Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
b21f8f8
feat: Add interactive HTML/CSS UI prototype for streamlined design
rainmanjam Nov 26, 2025
267e055
feat: streamline UI with connection config dialog and enhanced UX
rainmanjam Nov 26, 2025
cea3f38
fix: connection status and settings persistence issues
rainmanjam Nov 26, 2025
df4e83e
fix: resolve XSS vulnerabilities in ui-prototype JavaScript files
rainmanjam Nov 26, 2025
2f5249a
fix: replace Math.random() and reduce code duplication in profiles.js
rainmanjam Nov 26, 2025
805df53
feat: remove ui-prototype and add comprehensive test infrastructure
rainmanjam Nov 26, 2025
80d9d3d
fix: resolve ShellCheck warnings in test scripts
rainmanjam Nov 26, 2025
0972081
refactor: eliminate code duplication in connection-config-dialog
rainmanjam Nov 26, 2025
300f22d
fix: resolve Restreamer API compatibility issues in user journey tests
rainmanjam Nov 26, 2025
bb0f68a
feat: add cross-platform user journey tests with 100% pass rate
rainmanjam Nov 27, 2025
2eb123f
feat: implement profile edit dialog and comprehensive UI functionality
rainmanjam Nov 27, 2025
e28e12c
fix: resolve cross-platform build errors
rainmanjam Nov 27, 2025
4746180
fix: use Qt6 checkStateChanged signal instead of deprecated stateChanged
rainmanjam Nov 27, 2025
b227355
fix: use QCheckBox::toggled signal for cross-Qt version compatibility
rainmanjam Nov 27, 2025
f702f61
chore: bump version to 0.9.6
rainmanjam Nov 27, 2025
a8fc50b
style: format CMake files with gersemi
rainmanjam Nov 27, 2025
0ff224d
fix: address 23 security and safety issues from code analysis
rainmanjam Nov 28, 2025
bf99e21
fix: remove redundant NULL check to satisfy cppcheck
rainmanjam Nov 28, 2025
a205b6e
feat: add new API endpoints and enhanced monitoring features
rainmanjam Nov 28, 2025
d1bd296
fix: address SonarCloud security and code quality issues
rainmanjam Nov 28, 2025
3c0124e
test: add comprehensive unit tests for new API endpoints
rainmanjam Nov 28, 2025
75bb532
fix: resolve heap corruption and misleading test output
rainmanjam Nov 28, 2025
08f6135
test: add comprehensive API test coverage for SonarCloud quality gate
rainmanjam Nov 28, 2025
7ebe64c
fix: add NULL pointer check for output_urls in restreamer_api_create_…
rainmanjam Nov 28, 2025
9f802da
fix: add empty string validation for process_id in restreamer_api_get…
rainmanjam Nov 28, 2025
5e2c9c5
fix: add delays between iterations in lifecycle test for platform com…
rainmanjam Nov 28, 2025
a2460bb
fix: address SonarCloud code quality warnings and security issues
rainmanjam Nov 28, 2025
77a0648
fix: address security hotspots flagged by SonarCloud
rainmanjam Nov 28, 2025
e467fe8
test: add comprehensive API test coverage for SonarCloud quality gate
rainmanjam Nov 28, 2025
4d7c372
fix: disable new test suites by default until they are stabilized
rainmanjam Nov 28, 2025
2eb84da
fix: revert mock server list_files response format change
rainmanjam Nov 28, 2025
dbc2881
fix: disable new test suites from CTest until stabilized
rainmanjam Nov 28, 2025
f26d713
test: add comprehensive output profile tests for coverage improvement
rainmanjam Nov 28, 2025
9c819d9
refactor: extract stream parsing to reduce nesting depth
rainmanjam Nov 28, 2025
4ef2827
chore: remove unused is_valid_state_transition function
rainmanjam Nov 28, 2025
48b5b3e
test: add comprehensive API test coverage (83+ new tests)
rainmanjam Nov 28, 2025
36ca99c
refactor: reduce cognitive complexity in parse_stream_info
rainmanjam Nov 29, 2025
b4b7c44
test: add comprehensive tests for API helpers, endpoints, parsing, an…
rainmanjam Nov 29, 2025
79cbbb4
fix: expose internal functions for testing via STATIC_TESTABLE macro
rainmanjam Nov 29, 2025
3b9653f
fix: align test struct definition with actual restreamer_api struct
rainmanjam Nov 29, 2025
05d7982
fix: correct test expectations to match actual implementation behavior
rainmanjam Nov 29, 2025
a2c9b42
fix: use strtoul for parsing unsigned 32-bit values from JSON strings
rainmanjam Nov 29, 2025
3c5dd8f
fix: reject negative numbers in json_get_string_as_uint32
rainmanjam Nov 29, 2025
b96fb93
ui: improve connection status bar layout and sizing
rainmanjam Nov 29, 2025
af373d2
refactor: rename Profile to Channel and Destination to Output
rainmanjam Nov 29, 2025
085fef7
fix: reduce code duplication and add test coverage for SonarCloud
rainmanjam Nov 29, 2025
d3752cb
test: add multistream coverage tests for remove_destination and build…
rainmanjam Nov 29, 2025
2c96b61
fix: resolve Windows build and Ubuntu runtime test failures
rainmanjam Nov 29, 2025
0433232
fix: resolve Windows pointer truncation warnings in test_channel_temp…
rainmanjam Nov 29, 2025
ac5c11b
fix: address SonarCloud security warnings in restreamer-channel.c
rainmanjam Nov 29, 2025
7bc8c76
chore: remove obsolete tracking and planning documents for 1.0.0 release
rainmanjam Nov 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .secrets.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# OBS Polyemesis - Secrets Template
# Copy this to .secrets and fill in your values
# IMPORTANT: .secrets is in .gitignore and will NOT be committed

# Datarhei Restreamer Configuration
RESTREAMER_HOST="rs.rainmanjam.com"
RESTREAMER_PORT="443"
RESTREAMER_USE_HTTPS="true"
RESTREAMER_USERNAME="admin"
RESTREAMER_PASSWORD="your-password-here"

# Optional: Test stream keys (if different from main credentials)
TEST_STREAM_KEY_VERTICAL=""
TEST_STREAM_KEY_HORIZONTAL=""

# Optional: Additional test servers
# TEST_RESTREAMER_2_HOST=""
# TEST_RESTREAMER_2_PORT=""
# TEST_RESTREAMER_2_USERNAME=""
# TEST_RESTREAMER_2_PASSWORD=""
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed
- **UI Streamlining**
- Replaced collapsible connection section with persistent connection status bar
- Shows connection status with visual indicator (⚫ Connected/Disconnected)
- "Configure" button opens dedicated connection settings dialog
- More prominent and always-visible connection status
- Removed CollapsibleSection widget (no longer needed)
- Simplified codebase by removing ~200 lines of accordion UI code
- Profiles section now always visible for immediate access
- Connection Configuration Dialog
- Dedicated modal dialog for connection settings
- Fields: Restreamer URL, Username, Password, Connection Timeout
- Auto-test connection on dialog open if settings exist
- Real-time connection testing with detailed error messages
- Context-aware hints for common connection issues (port, auth, network)
- Support for custom ports (not just 443/80)
- Flexible URL formats: full URL, host:port, or hostname only
- Smart protocol detection (HTTPS for domains, HTTP for localhost)
- Improved port flexibility for non-Let's Encrypt users
- Tooltip shows port specification examples
- Help text reminds users about custom ports
- Default ports: 443 for HTTPS, 80 for HTTP

### Fixed
- Configure button text now fully visible (increased minimum width)
- Connection settings properly isolated in dialog (no longer scattered in dock)

## [0.9.0] - 2025-11-12

### Added
Expand Down
46 changes: 21 additions & 25 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,7 @@ endif()
if(ENABLE_FRONTEND_API)
find_package(obs-frontend-api REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::obs-frontend-api)
target_sources(
${CMAKE_PROJECT_NAME}
PRIVATE
src/obs-bridge.c
src/obs-bridge.h
)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE src/obs-bridge.c src/obs-bridge.h)
endif()

if(ENABLE_QT)
Expand All @@ -103,8 +98,7 @@ if(ENABLE_QT)
get_target_property(_qt_opengl_libs WrapOpenGL::WrapOpenGL INTERFACE_LINK_LIBRARIES)
if(_qt_opengl_libs)
list(FILTER _qt_opengl_libs EXCLUDE REGEX ".*AGL.*")
set_target_properties(WrapOpenGL::WrapOpenGL PROPERTIES
INTERFACE_LINK_LIBRARIES "${_qt_opengl_libs}")
set_target_properties(WrapOpenGL::WrapOpenGL PROPERTIES INTERFACE_LINK_LIBRARIES "${_qt_opengl_libs}")
endif()
endif()

Expand Down Expand Up @@ -142,8 +136,8 @@ target_sources(
src/restreamer-output.c
src/restreamer-multistream.c
src/restreamer-multistream.h
src/restreamer-output-profile.c
src/restreamer-output-profile.h
src/restreamer-channel.c
src/restreamer-channel.h
)

if(ENABLE_QT)
Expand All @@ -157,8 +151,14 @@ if(ENABLE_QT)
src/obs-service-loader.h
src/obs-theme-utils.cpp
src/obs-theme-utils.h
src/collapsible-section.cpp
src/collapsible-section.h
src/channel-widget.cpp
src/channel-widget.h
src/output-widget.cpp
src/output-widget.h
src/connection-config-dialog.cpp
src/connection-config-dialog.h
src/channel-edit-dialog.cpp
src/channel-edit-dialog.h
# Temporarily disabled - requires OBS WebSocket plugin headers
# src/websocket-api.cpp
# src/websocket-api.h
Expand Down Expand Up @@ -197,15 +197,15 @@ if(APPLE)
set(_qt_version "0.0.0")
endif()
# Apply workaround only for OBS < 29.1 and Qt < 6.2
if(
(ENABLE_QT)
AND (
("${_obs_version}" VERSION_LESS "29.1")
OR ("${_qt_version}" VERSION_LESS "6.2")
if((ENABLE_QT) AND (("${_obs_version}" VERSION_LESS "29.1") OR ("${_qt_version}" VERSION_LESS "6.2")))
message(
WARNING
"Applying AGL linker workaround for OBS Studio < 29.1 or Qt < 6.2. This may be fragile; upgrade dependencies if possible."
)
target_link_options(
${CMAKE_PROJECT_NAME}
PRIVATE "LINKER:-U,_CGLChoosePixelFormat" "LINKER:-U,_aglChoosePixelFormat"
)
)
message(WARNING "Applying AGL linker workaround for OBS Studio < 29.1 or Qt < 6.2. This may be fragile; upgrade dependencies if possible.")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "LINKER:-U,_CGLChoosePixelFormat" "LINKER:-U,_aglChoosePixelFormat")
endif()

# Post-build step to fix library dependencies on macOS
Expand All @@ -217,14 +217,10 @@ if(APPLE)
COMMENT "Displaying library dependencies for verification"
VERBATIM
)

elseif(UNIX AND NOT APPLE)
set_target_properties(
${CMAKE_PROJECT_NAME}
PROPERTIES
BUILD_WITH_INSTALL_RPATH FALSE
INSTALL_RPATH "$ORIGIN"
INSTALL_RPATH_USE_LINK_PATH FALSE
PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH "$ORIGIN" INSTALL_RPATH_USE_LINK_PATH FALSE
)
endif()

Expand Down
Loading
Loading