ID.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "ID.hpp"
  2. #include "yapi.hpp"
  3. QString ID::serialize() const
  4. {
  5. if (kind == dkNone)
  6. if (containerKind == dkNone)
  7. return toString(client) + "/" + QString::number(id);
  8. else
  9. return toString(client) + "/" + toString(containerKind) + ":" + QString::number(container) + "/" + QString::number(id);
  10. else
  11. if (containerKind == dkNone)
  12. return toString(client) + "/" + toString(kind) + ":" + QString::number(id);
  13. else
  14. return toString(client) + "/" + toString(containerKind) + ":" + QString::number(container) + "/" + toString(kind) + ":" + QString::number(id);
  15. }
  16. ID ID::deseralize(QString s)
  17. {
  18. auto s1 = s.split("/");
  19. if (s1.size() < 2) return {};
  20. ID res;
  21. // TODO: client kind
  22. if (s1.size() >= 3) { // has container
  23. auto s2 = s1[1].split(":");
  24. if (s2.size() >= 2) {
  25. bool ok;
  26. res.container = s2[1].toLongLong(&ok);
  27. if (!ok) res.container = 0;
  28. // TODO: container kind
  29. }
  30. s1.removeAt(1);
  31. }
  32. auto s2 = s1[1].split(":");
  33. if (s2.size() >= 2) {
  34. bool ok;
  35. res.id = s2[1].toLongLong(&ok);
  36. if (!ok) res.id = 0;
  37. }
  38. // TODO: kind
  39. return res;
  40. }
  41. refTrack ID::toTrack() const
  42. {
  43. if (kind != dkTrack) return nullptr;
  44. if (containerKind != dkNone) return nullptr; // TODO
  45. if (client == ckYandex) {
  46. if (YClient::instance == nullptr) return nullptr;
  47. return YClient::instance->track(id);
  48. }
  49. if (client == ckNone)
  50. return refTrack(new UserTrack(id));
  51. return nullptr;
  52. }
  53. refPlaylist ID::toPlaylist() const
  54. {
  55. if (containerKind != dkNone) return nullptr; // TODO
  56. if (kind == dkTrack) {
  57. if (client == ckYandex) {
  58. if (YClient::instance == nullptr) return nullptr;
  59. return refPlaylist(YClient::instance->oneTrack(id));
  60. }
  61. if (client == ckNone) {
  62. auto playlist = new DPlaylist;
  63. playlist->add(refTrack(new UserTrack(id)));
  64. return refPlaylist(playlist);
  65. }
  66. }
  67. else if (kind == dkPlaylist) {
  68. if (client == ckYandex) {
  69. if (YClient::instance == nullptr) return nullptr;
  70. if (id == -1) return YClient::instance->userDailyPlaylist()->toPlaylist();
  71. return nullptr;
  72. }
  73. if (client == ckNone) {
  74. if (YClient::instance == nullptr) return nullptr;
  75. return refPlaylist(YClient::instance->downloadsPlaylist());
  76. // TODO
  77. }
  78. }
  79. return nullptr;
  80. }