instagram_task.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #include <include/task/instagram_task.hpp>
  2. using namespace Scheduler;
  3. namespace TaskIndex {
  4. static const uint8_t HEADER = 0;
  5. static const uint8_t DESCRIPTION = 1;
  6. static const uint8_t DATETIME = 2;
  7. static const uint8_t PROMOTE_SHARE = 3;
  8. static const uint8_t LINK_IN_BIO = 4;
  9. static const uint8_t HASHTAGS = 5;
  10. static const uint8_t REQUESTED_BY = 6;
  11. static const uint8_t REQUESTED_BY_PHRASE = 7;
  12. static const uint8_t FILES = 8;
  13. static const uint8_t USER = 9;
  14. static const uint8_t IS_VIDEO = 10;
  15. } // namespace TaskIndex
  16. /**
  17. * @constructor
  18. * @param [in] {KFileData} k_file
  19. */
  20. InstagramTask::InstagramTask(KFileData k_file) : files({k_file}) {}
  21. /**
  22. * @constructor
  23. * @param [in] {QVector<KFileData>} k_files
  24. */
  25. InstagramTask::InstagramTask(QVector<KFileData> k_files) : files(k_files) {}
  26. /**
  27. * @brief InstagramTask::defineTaskArguments
  28. */
  29. void InstagramTask::defineTaskArguments() {
  30. std::vector<std::unique_ptr<TaskArgumentBase>> args{};
  31. args.emplace_back(std::make_unique<
  32. TaskArgument<QString>>("header", Type::TEXT, QString{}));
  33. args.emplace_back(std::make_unique<
  34. TaskArgument<QString>>("description", Type::TEXT, QString{}));
  35. args.emplace_back(std::make_unique<
  36. TaskArgument<QString>>("datetime", Type::DATETIME, QString{}));
  37. args.emplace_back(std::make_unique<
  38. TaskArgument<QString>>("promote_share", Type::TEXT, QString{}));
  39. args.emplace_back(std::make_unique<
  40. TaskArgument<QString>>("link_in_bio", Type::TEXT, QString{}));
  41. args.emplace_back(std::make_unique<
  42. TaskArgument<QString>>("hashtags", Type::TEXT, QString{}));
  43. args.emplace_back(std::make_unique<
  44. TaskArgument<
  45. std::vector<QString>>>("requested_by", Type::STRINGVECTOR, std::vector<QString>{}));
  46. args.emplace_back(std::make_unique<
  47. TaskArgument<QString>>("requested_by_phrase", Type::TEXT, QString{}));
  48. args.emplace_back(std::make_unique<
  49. TaskArgument<
  50. std::vector<KFileData>>>("files", Type::FILEVECTOR, std::vector<KFileData>{})),
  51. args.emplace_back(std::make_unique<
  52. TaskArgument<QString>>("user", Type::TEXT, QString{}));
  53. args.emplace_back(std::make_unique<
  54. TaskArgument<bool>>("is_video", Type::BOOLEAN, bool{}));
  55. m_arguments = args;
  56. }
  57. /**
  58. * @brief InstagramTask::setArgument
  59. * @param name
  60. * @param value
  61. */
  62. void InstagramTask::setArgument(QString name, TypeVariant value) {
  63. TaskIterator it =
  64. std::find_if(m_arguments.begin(), m_arguments.end(), [name](auto argument) { return argument.text() == name; });
  65. if (it != m_arguments.end()) {
  66. if (isIndex(value.index(), VariantIndex::QSTRING)) {
  67. it->get()->setValue(value);
  68. } else if (isIndex(value.index(), VariantIndex::BOOLEAN)) {
  69. it->get()->setValue(QString::number(std::get<VariantIndex::BOOLEAN>(value)));
  70. } else if (isIndex(value.index(), VariantIndex::INTEGER)) {
  71. it->get()->setValue(QString::number(std::get<VariantIndex::INTEGER>(value)));
  72. } else {
  73. // Could not set argument value
  74. // TODO: Log here
  75. }
  76. }
  77. }
  78. /**
  79. * @brief InstagramTask::setArgument
  80. * @param name
  81. * @param file
  82. */
  83. void InstagramTask::setArgument(QString name, Scheduler::KFileData file) {
  84. TaskIterator it =
  85. std::find_if(m_arguments.begin(), m_arguments.end(), [name](auto argument) { return argument.text() == name; });
  86. if (it != m_arguments.end() && it->get()->getTypeIndex() == Scheduler::VariantIndex::FILEVEC) {
  87. it->get()->insert(file);
  88. } else {
  89. // Could not add file to container
  90. }
  91. }
  92. /**
  93. * @brief InstagramTask::getTaskArgument
  94. * @param name
  95. * @return
  96. */
  97. TypeVariant InstagramTask::getTaskArgument(QString name) {
  98. TaskIterator it =
  99. std::find_if(m_arguments.begin(), m_arguments.end(), [name](auto argument) { return argument.text() == name; });
  100. if (it != m_arguments.end()) {
  101. return it->get()->getValue();
  102. }
  103. return ""; // Perhaps we should throw
  104. }
  105. /**
  106. * @brief InstagramTask::getArgumentValues
  107. * @return
  108. */
  109. ArgumentValues InstagramTask::getArgumentValues() {
  110. ArgumentValues values{static_cast<int>(m_arguments.size())};
  111. for (const auto& argument : m_arguments) {
  112. if (!argument->isContainer()) {
  113. values.push_back(argument->getStringValue());
  114. }
  115. }
  116. return values;
  117. }
  118. /**
  119. * @brief InstagramTask::getTaskArguments
  120. * @return
  121. */
  122. const TaskArguments InstagramTask::getTaskArguments() { return m_arguments; }
  123. /**
  124. * @brief InstagramTask::getFiles
  125. * @return
  126. */
  127. const QVector<KFileData> InstagramTask::getFiles() { return files; }
  128. /**
  129. * @brief InstagramTask::setDefaultValues
  130. */
  131. void InstagramTask::setDefaultValues() {
  132. m_arguments.at(TaskIndex::HEADER)
  133. ->setValue("Learn to speak like native Korean speakers 🙆‍♀️🇰🇷");
  134. m_arguments.at(TaskIndex::PROMOTE_SHARE)
  135. ->setValue("Share the post through IG story if you enjoy the phrase 🙋‍♀️");
  136. m_arguments.at(TaskIndex::LINK_IN_BIO)
  137. ->setValue("Subscribe to my YouTube channel (link 🔗in bio) to learn more about Korean language and culture ❤");
  138. m_arguments.at(TaskIndex::REQUESTED_BY_PHRASE)
  139. ->setValue("The phrase was requested by ");
  140. }
  141. /**
  142. * @brief getType
  143. * @return {Scheduler::TaskType} The type of task
  144. */
  145. Scheduler::TaskType getType() { return Scheduler::TaskType::INSTAGRAM; };
  146. /**
  147. * @brief InstagramTask::clear
  148. */
  149. void InstagramTask::clear() {
  150. for (const auto& argument : m_arguments) {
  151. argument->clear();
  152. }
  153. }
  154. /**
  155. * @brief InstagramTask::hasFiles
  156. * @return
  157. */
  158. bool InstagramTask::hasFiles() {
  159. return !files.empty();
  160. }
  161. /**
  162. * @destructor
  163. */
  164. InstagramTask::~InstagramTask() {}