From 6ccbaad41c92cda5f637eef1cada933180bbcaea Mon Sep 17 00:00:00 2001 From: Przemek Pawlas <3606072+Destroy666x@users.noreply.github.com> Date: Wed, 18 Sep 2024 09:46:39 +0200 Subject: [PATCH] Add enhanced relative time to variable tab cells --- CMakeLists.txt | 2 ++ data/locale/de-DE.ini | 2 +- data/locale/en-US.ini | 10 ++++-- data/locale/es-ES.ini | 2 +- data/locale/fr-FR.ini | 2 +- data/locale/ja-JP.ini | 4 +-- data/locale/pt-BR.ini | 4 +-- data/locale/ru-RU.ini | 2 +- data/locale/tr-TR.ini | 2 +- data/locale/zh-CN.ini | 2 +- lib/utils/duration-control.cpp | 2 +- lib/utils/duration.cpp | 2 +- lib/utils/time-helpers.cpp | 63 ++++++++++++++++++++++++++++++++++ lib/utils/time-helpers.hpp | 8 +++++ lib/variables/variable-tab.cpp | 9 ++--- 15 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 lib/utils/time-helpers.cpp create mode 100644 lib/utils/time-helpers.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ba2972ee..3bee1280 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,6 +255,8 @@ target_sources( lib/utils/tab-helpers.hpp lib/utils/temp-variable.cpp lib/utils/temp-variable.hpp + lib/utils/time-helpers.cpp + lib/utils/time-helpers.hpp lib/utils/ui-helpers.cpp lib/utils/ui-helpers.hpp lib/utils/utility.cpp diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index 356e8118..cfbccb35 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -895,7 +895,7 @@ AdvSceneSwitcher.firstBootMessage="
Dies scheint das erste AdvSceneSwitcher.deprecatedTabWarning="Die Entwicklung für dieses Tab wurde gestoppt!\nBitte stattdessen zur Verwendung des Makros-Tab übergehen.\nDieser Hinweis kann im Allgemein-Tab deaktiviert werden." AdvSceneSwitcher.unit.milliseconds="Millisekunden" -AdvSceneSwitcher.unit.secends="Sekunden" +AdvSceneSwitcher.unit.seconds="Sekunden" AdvSceneSwitcher.unit.minutes="Minuten" AdvSceneSwitcher.unit.hours="Stunden" AdvSceneSwitcher.duration.condition.none="Kein Dauer-Modifikator" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 25f75aa0..14d45a4f 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="Value" AdvSceneSwitcher.variableTab.saveLoadBehavior.header="Save/Load behavior" AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="Default to \"%1\"" AdvSceneSwitcher.variableTab.lastUsed.header="Last used" -AdvSceneSwitcher.variableTab.lastUsed.text="%1 seconds ago" AdvSceneSwitcher.variableTab.lastUsed.text.never="Never" AdvSceneSwitcher.variableTab.lastChanged.header="Last changed" -AdvSceneSwitcher.variableTab.lastChanged.text="%1 seconds ago" AdvSceneSwitcher.variableTab.lastChanged.text.none="No change since launch" AdvSceneSwitcher.variableTab.lastChanged.tooltip="Times changed: %1\n\nPrevious value: %2" @@ -1926,15 +1924,21 @@ AdvSceneSwitcher.firstBootMessage="
This seems to be the fi AdvSceneSwitcher.deprecatedTabWarning="Development for this tab stopped!\nPlease consider transitioning to using Macros instead.\nThis hint can be disabled on the General tab." AdvSceneSwitcher.unit.milliseconds="milliseconds" -AdvSceneSwitcher.unit.secends="seconds" +AdvSceneSwitcher.unit.seconds="seconds" AdvSceneSwitcher.unit.minutes="minutes" AdvSceneSwitcher.unit.hours="hours" +AdvSceneSwitcher.unit.days="days" +AdvSceneSwitcher.unit.weeks="weeks" +AdvSceneSwitcher.unit.months="months" +AdvSceneSwitcher.unit.years="years" AdvSceneSwitcher.duration.condition.none="No duration modifier" AdvSceneSwitcher.duration.condition.more="For at least" AdvSceneSwitcher.duration.condition.equal="For exactly" AdvSceneSwitcher.duration.condition.less="For at most" AdvSceneSwitcher.duration.condition.within="Within the last" +AdvSceneSwitcher.time.relative="%1 %2 ago" + AdvSceneSwitcher.audio.monitor.none="Monitor Off" AdvSceneSwitcher.audio.monitor.monitorOnly="Monitor Only (mute output)" AdvSceneSwitcher.audio.monitor.both="Monitor and Output" diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 8edb4329..a65e243a 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -740,7 +740,7 @@ AdvSceneSwitcher.firstBootMessage="
Esta parece ser la prim AdvSceneSwitcher.deprecatedTabWarning="¡Se detuvo el desarrollo de esta pestaña!\nConsidere cambiar a macros en su lugar.\nEsta sugerencia se puede desactivar en la pestaña General". AdvSceneSwitcher.unit.milliseconds="milisegundos" -AdvSceneSwitcher.unit.secends="segundos" +AdvSceneSwitcher.unit.seconds="segundos" AdvSceneSwitcher.unit.minutes="minutos" AdvSceneSwitcher.unit.hours="horas" AdvSceneSwitcher.duration.condition.none="Sin límite de tiempo" diff --git a/data/locale/fr-FR.ini b/data/locale/fr-FR.ini index e88bb759..ad5822a4 100644 --- a/data/locale/fr-FR.ini +++ b/data/locale/fr-FR.ini @@ -1182,7 +1182,7 @@ AdvSceneSwitcher.firstBootMessage="
Il semble que ce soit l AdvSceneSwitcher.deprecatedTabWarning="Le développement de cet onglet est terminé !\nVeuillez envisager de passer à l'utilisation des Macros à la place.\nCette astuce peut être désactivée dans l'onglet Général." AdvSceneSwitcher.unit.milliseconds="millisecondes" -AdvSceneSwitcher.unit.secends="secondes" +AdvSceneSwitcher.unit.seconds="secondes" AdvSceneSwitcher.unit.minutes="minutes" AdvSceneSwitcher.unit.hours="heures" AdvSceneSwitcher.duration.condition.none="Aucun modificateur de durée" diff --git a/data/locale/ja-JP.ini b/data/locale/ja-JP.ini index 52a0aa5b..98b82428 100644 --- a/data/locale/ja-JP.ini +++ b/data/locale/ja-JP.ini @@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="値" AdvSceneSwitcher.variableTab.saveLoadBehavior.header="保存・読み込みの動作" AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="デフォルト\"%1\"" AdvSceneSwitcher.variableTab.lastUsed.header="最後に使用された" -AdvSceneSwitcher.variableTab.lastUsed.text="%1 秒前" ; AdvSceneSwitcher.variableTab.lastUsed.text.never="Never" AdvSceneSwitcher.variableTab.lastChanged.header="最終変更" -AdvSceneSwitcher.variableTab.lastChanged.text="%1 秒前" AdvSceneSwitcher.variableTab.lastChanged.text.none="起動以来変更なし" AdvSceneSwitcher.variableTab.lastChanged.tooltip="変更された時間: %1\n\n以前の値: %2" @@ -1920,7 +1918,7 @@ AdvSceneSwitcher.firstBootMessage="
高機能シーンス AdvSceneSwitcher.deprecatedTabWarning="このタブの開発は停止しました!\n代わりにマクロの使用に移行することを検討してください。\nこのヒントは [全般] タブで無効にすることができます。" AdvSceneSwitcher.unit.milliseconds="ミリ秒" -AdvSceneSwitcher.unit.secends="秒" +AdvSceneSwitcher.unit.seconds="秒" AdvSceneSwitcher.unit.minutes="分" AdvSceneSwitcher.unit.hours="時間" AdvSceneSwitcher.duration.condition.none="期間修飾子なし" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index b011a05d..c1907e42 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -82,10 +82,8 @@ AdvSceneSwitcher.variableTab.value.header="Valor" AdvSceneSwitcher.variableTab.saveLoadBehavior.header="Comportamento de Salvar/Carregar" AdvSceneSwitcher.variableTab.saveLoadBehavior.text.default="Padrão para \"%1\"" AdvSceneSwitcher.variableTab.lastUsed.header="Último uso" -AdvSceneSwitcher.variableTab.lastUsed.text="%1 segundos atrás" AdvSceneSwitcher.variableTab.lastUsed.text.never="Nunca" AdvSceneSwitcher.variableTab.lastChanged.header="Última alteração" -AdvSceneSwitcher.variableTab.lastChanged.text="%1 segundos atrás" AdvSceneSwitcher.variableTab.lastChanged.text.none="Sem alterações desde o lançamento" AdvSceneSwitcher.variableTab.lastChanged.tooltip="Vezes alteradas: %1\n\nValor anterior: %2" @@ -1888,7 +1886,7 @@ AdvSceneSwitcher.firstBootMessage="
Parece que esta é a pr AdvSceneSwitcher.deprecatedTabWarning="Desenvolvimento para esta aba interrompido!\nPor favor, considere a transição para o uso de Macros em vez disso.\nEsta dica pode ser desativada na aba Geral." AdvSceneSwitcher.unit.milliseconds="milissegundos" -AdvSceneSwitcher.unit.secends="segundos" +AdvSceneSwitcher.unit.seconds="segundos" AdvSceneSwitcher.unit.minutes="minutos" AdvSceneSwitcher.unit.hours="horas" AdvSceneSwitcher.duration.condition.none="Nenhum modificador de duração" diff --git a/data/locale/ru-RU.ini b/data/locale/ru-RU.ini index 603178f1..add18aa4 100644 --- a/data/locale/ru-RU.ini +++ b/data/locale/ru-RU.ini @@ -399,6 +399,6 @@ AdvSceneSwitcher.status.active="Активный" AdvSceneSwitcher.status.inactive="Неактивен" AdvSceneSwitcher.unit.milliseconds="миллисекунды" -AdvSceneSwitcher.unit.secends="секунды" +AdvSceneSwitcher.unit.seconds="секунды" AdvSceneSwitcher.unit.minutes="минуты" AdvSceneSwitcher.unit.hours="часы" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index d8d968ed..93e076db 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -645,7 +645,7 @@ AdvSceneSwitcher.stopped="Eklenti durdu" AdvSceneSwitcher.firstBootMessage="
Gelişmiş Sahne Değiştirici ilk kez başlatılıyor gibi görünüyor.
Lütfen Wiki için kılavuzlar ve örnekler listesi.
Yapmayın. eklentinin konu!
这似乎是第一次
AdvSceneSwitcher.deprecatedTabWarning="此选项卡的开发已停止!请考虑转换为使用宏来代替。\n可以在“常规”选项卡上禁用此提示."
AdvSceneSwitcher.unit.milliseconds="毫秒"
-AdvSceneSwitcher.unit.secends="秒"
+AdvSceneSwitcher.unit.seconds="秒"
AdvSceneSwitcher.unit.minutes="分钟"
AdvSceneSwitcher.unit.hours="小时"
AdvSceneSwitcher.duration.condition.none="没有时间限制"
diff --git a/lib/utils/duration-control.cpp b/lib/utils/duration-control.cpp
index d79a74c8..3f9d1fd5 100644
--- a/lib/utils/duration-control.cpp
+++ b/lib/utils/duration-control.cpp
@@ -8,7 +8,7 @@ namespace advss {
static void populateUnits(QComboBox *list)
{
- list->addItem(obs_module_text("AdvSceneSwitcher.unit.secends"));
+ list->addItem(obs_module_text("AdvSceneSwitcher.unit.seconds"));
list->addItem(obs_module_text("AdvSceneSwitcher.unit.minutes"));
list->addItem(obs_module_text("AdvSceneSwitcher.unit.hours"));
}
diff --git a/lib/utils/duration.cpp b/lib/utils/duration.cpp
index 73ae35a5..a6365ca7 100644
--- a/lib/utils/duration.cpp
+++ b/lib/utils/duration.cpp
@@ -115,7 +115,7 @@ static std::string durationUnitToString(Duration::Unit u)
{
switch (u) {
case Duration::Unit::SECONDS:
- return obs_module_text("AdvSceneSwitcher.unit.secends");
+ return obs_module_text("AdvSceneSwitcher.unit.seconds");
case Duration::Unit::MINUTES:
return obs_module_text("AdvSceneSwitcher.unit.minutes");
case Duration::Unit::HOURS:
diff --git a/lib/utils/time-helpers.cpp b/lib/utils/time-helpers.cpp
new file mode 100644
index 00000000..d723ff11
--- /dev/null
+++ b/lib/utils/time-helpers.cpp
@@ -0,0 +1,63 @@
+#include "time-helpers.hpp"
+#include "obs-module-helper.hpp"
+
+namespace advss {
+
+static QString combineRelativeTimeParts(const double unitCount,
+ const char *unitName)
+{
+ QString combined = obs_module_text("AdvSceneSwitcher.time.relative");
+
+ return combined.arg(QString::number(unitCount, 'g', 2)).arg(unitName);
+}
+
+QString FormatRelativeTime(const double seconds)
+{
+ // 365.2425 days
+ double divided = seconds / 31556952;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided,
+ obs_module_text("AdvSceneSwitcher.unit.years"));
+ }
+
+ // 30.436875 days
+ divided = seconds / 2629746;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided,
+ obs_module_text("AdvSceneSwitcher.unit.months"));
+ }
+
+ divided = seconds / 604800;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided,
+ obs_module_text("AdvSceneSwitcher.unit.weeks"));
+ }
+
+ divided = seconds / 86400;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided, obs_module_text("AdvSceneSwitcher.unit.days"));
+ }
+
+ divided = seconds / 3600;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided,
+ obs_module_text("AdvSceneSwitcher.unit.hours"));
+ }
+
+ divided = seconds / 60;
+ if (divided >= 1) {
+ return combineRelativeTimeParts(
+ divided,
+ obs_module_text("AdvSceneSwitcher.unit.minutes"));
+ }
+
+ return combineRelativeTimeParts(
+ seconds, obs_module_text("AdvSceneSwitcher.unit.seconds"));
+}
+
+} // namespace advss
diff --git a/lib/utils/time-helpers.hpp b/lib/utils/time-helpers.hpp
new file mode 100644
index 00000000..ce297b0f
--- /dev/null
+++ b/lib/utils/time-helpers.hpp
@@ -0,0 +1,8 @@
+#pragma once
+#include