From 4daf0ee4e6d1bcde0cd38cfafcea6ab780fbd300 Mon Sep 17 00:00:00 2001
From: SpoopyTim <tim@horizonapp.net>
Date: Tue, 27 Feb 2024 13:08:16 +0000
Subject: [PATCH] Version 1.2.0 Release

---
 CHANGELOG.md           |  6 ++++++
 pyproject.toml         |  2 +-
 src/strandr/strandr.py | 13 +++++++++++--
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1cdb38c..03916e5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 
 * None
 
+## [1.2.0] - 2024-02-27
+
+### Added
+
+- Refresh rate config
+
 ## [1.1.0] - 2024-02-27
 
 ### Added
diff --git a/pyproject.toml b/pyproject.toml
index 878e221..4f4a783 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "strandr"
-version = "1.1.0"
+version = "1.2.0"
 readme = "README.md"
 authors = [
     { name="HorizonApp Packages", email="packages@horizonapp.net" },
diff --git a/src/strandr/strandr.py b/src/strandr/strandr.py
index 1dfdae8..76152f7 100644
--- a/src/strandr/strandr.py
+++ b/src/strandr/strandr.py
@@ -39,14 +39,15 @@ class STRandR:
         displays = {}
         resolutions = {}
 
-        display_pattern = re.compile(r'(\S+) connected.*?(\d+)x(\d+)\+(\d+)\+(\d+)')
+        display_pattern = re.compile(r'(\S+) connected.*?(\d+)x(\d+)\+(\d+)\+(\d+).*?(\d+)mm x (\d+)mm')
+        refresh_rate_pattern = re.compile(r'\s+(\d+)x(\d+)(?:\s+(\d+\.\d+))?(?:\*)?(?:\+)?')
 
         current_display = None
         display_resolutions = []
         for line in xrandr_output.splitlines():
             display_match = display_pattern.match(line)
             if display_match:
-                display_name, width, height, x_pos, y_pos = display_match.groups()
+                display_name, width, height, x_pos, y_pos, physical_width, physical_height = display_match.groups()
                 current_display = display_name
                 displays[current_display] = {
                     'primary': ('primary' in line or False),
@@ -57,6 +58,14 @@ class STRandR:
                     'rotation': self.get_rotation(line)
                 }
                 display_resolutions.append(f"{width}x{height}")
+            elif refresh_rate_pattern and current_display and "*" in line:
+                refresh_rate_match = refresh_rate_pattern.match(line)
+                
+                if refresh_rate_match:
+                    resolution_width, resolution_height, current = refresh_rate_match.groups()
+                    if current:
+                        refresh_rate = float(current)
+                        displays[current_display]['refresh-rate'] = refresh_rate
         for resolution in display_resolutions:
             resolutions[resolution] = {'scaling': '1x1'}
 
-- 
GitLab