소스 검색

UI: Use STL random as fallback

For Linux distros still living in the stone ages, use the old
randomization code. Fixes CI not building. We can change it later when
we finalize good random stuff.
jp9000 4 년 전
부모
커밋
a73586b8b1
2개의 변경된 파일15개의 추가작업 그리고 0개의 파일을 삭제
  1. 14 0
      UI/auth-youtube.cpp
  2. 1 0
      UI/auth-youtube.hpp

+ 14 - 0
UI/auth-youtube.cpp

@@ -7,7 +7,9 @@
 #include <QDesktopServices>
 #include <QHBoxLayout>
 #include <QUrl>
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
 #include <QRandomGenerator>
+#endif
 
 #ifdef WIN32
 #include <windows.h>
@@ -193,6 +195,7 @@ void YoutubeAuth::ResetChat()
 
 QString YoutubeAuth::GenerateState()
 {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
 	char state[YOUTUBE_API_STATE_LENGTH + 1];
 	QRandomGenerator *rng = QRandomGenerator::system();
 	int i;
@@ -202,6 +205,17 @@ QString YoutubeAuth::GenerateState()
 	state[i] = 0;
 
 	return state;
+#else
+	std::uniform_int_distribution<> distr(0, allowedCount);
+	std::string result;
+	result.reserve(YOUTUBE_API_STATE_LENGTH);
+	std::generate_n(std::back_inserter(result), YOUTUBE_API_STATE_LENGTH,
+			[&] {
+				return static_cast<char>(
+					allowedChars[distr(randomSeed)]);
+			});
+	return result.c_str();
+#endif
 }
 
 // Static.

+ 1 - 0
UI/auth-youtube.hpp

@@ -20,6 +20,7 @@ class YoutubeAuth : public OAuthStreamKey {
 	Q_OBJECT
 
 	bool uiLoaded = false;
+	std::mt19937 randomSeed;
 	std::string section;
 
 #ifdef BROWSER_AVAILABLE