play_time_manager.h 964 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // SPDX-FileCopyrightText: 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <QString>
  5. #include <map>
  6. #include "common/common_funcs.h"
  7. #include "common/common_types.h"
  8. #include "common/polyfill_thread.h"
  9. namespace PlayTime {
  10. using ProgramId = u64;
  11. using PlayTime = u64;
  12. using PlayTimeDatabase = std::map<ProgramId, PlayTime>;
  13. class PlayTimeManager {
  14. public:
  15. explicit PlayTimeManager();
  16. ~PlayTimeManager();
  17. YUZU_NON_COPYABLE(PlayTimeManager);
  18. YUZU_NON_MOVEABLE(PlayTimeManager);
  19. u64 GetPlayTime(u64 program_id) const;
  20. void ResetProgramPlayTime(u64 program_id);
  21. void SetProgramId(u64 program_id);
  22. void Start();
  23. void Stop();
  24. private:
  25. PlayTimeDatabase database;
  26. u64 running_program_id;
  27. std::jthread play_time_thread;
  28. void AutoTimestamp(std::stop_token stop_token);
  29. void Save();
  30. };
  31. QString ReadablePlayTime(qulonglong time_seconds);
  32. } // namespace PlayTime