Horizon
pool_remote_box.hpp
1 #pragma once
2 #include <gtkmm.h>
3 #include <set>
4 #include <mutex>
5 #include "util/uuid.hpp"
6 #include "common/common.hpp"
7 #include "nlohmann/json.hpp"
8 #include <git2/sys/repository.h>
9 #include "util/status_dispatcher.hpp"
10 
11 namespace horizon {
12 using json = nlohmann::json;
13 
14 class PoolRemoteBox : public Gtk::Box {
15 public:
16  PoolRemoteBox(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, class PoolNotebook *nb);
17  static PoolRemoteBox *create(class PoolNotebook *nb);
18 
19  void merge_item(ObjectType ty, const UUID &uu);
20  void merge_3d_model(const std::string &filename);
21  void handle_refresh_prs();
22  bool prs_refreshed_once = false;
23 
24 private:
25  class PoolNotebook *notebook = nullptr;
26 
27  class ListColumns : public Gtk::TreeModelColumnRecord {
28  public:
29  ListColumns()
30  {
31  Gtk::TreeModelColumnRecord::add(name);
32  Gtk::TreeModelColumnRecord::add(type);
33  Gtk::TreeModelColumnRecord::add(uuid);
34  Gtk::TreeModelColumnRecord::add(filename);
35  }
36  Gtk::TreeModelColumn<Glib::ustring> name;
37  Gtk::TreeModelColumn<ObjectType> type;
38  Gtk::TreeModelColumn<UUID> uuid;
39  Gtk::TreeModelColumn<std::string> filename;
40  };
41  ListColumns list_columns;
42 
43  Glib::RefPtr<Gtk::ListStore> item_store;
44  Gtk::TreeView *merge_items_view = nullptr;
45  Gtk::Label *merge_items_placeholder_label = nullptr;
46  Gtk::Label *pr_body_placeholder_label = nullptr;
47  Gtk::Button *upgrade_button = nullptr;
48  Gtk::Button *create_pr_button = nullptr;
49  Gtk::Button *refresh_prs_button = nullptr;
50  Gtk::Revealer *upgrade_revealer = nullptr;
51  Gtk::Label *upgrade_label = nullptr;
52  Gtk::Spinner *upgrade_spinner = nullptr;
53  Gtk::Label *gh_repo_link_label = nullptr;
54  Gtk::Label *gh_signed_in_label = nullptr;
55  Gtk::Button *merge_items_clear_button = nullptr;
56  Gtk::Button *merge_items_remove_button = nullptr;
57  Gtk::Entry *pr_title_entry = nullptr;
58  Gtk::TextView *pr_body_textview = nullptr;
59  Gtk::ListBox *pull_requests_listbox = nullptr;
60  Gtk::Spinner *pr_spinner = nullptr;
61  StatusDispatcher pr_status_dispatcher;
62 
63 
64  void handle_remote_upgrade();
65  void handle_create_pr();
66  void update_body_placeholder_label();
67 
68 
69  void remote_upgrade_thread();
70  void create_pr_thread();
71  void refresh_prs_thread();
72  void checkout_master(git_repository *repo);
73 
74  Glib::Dispatcher git_thread_dispatcher;
75 
76  enum class GitThreadMode { UPGRADE, PULL_REQUEST };
77  GitThreadMode git_thread_mode = GitThreadMode::UPGRADE;
78  bool git_thread_busy = false;
79  std::string git_thread_status;
80  bool git_thread_error = false;
81  json pull_requests;
82  std::mutex git_thread_mutex;
83 
84  std::string gh_owner;
85  std::string gh_repo;
86 
87  std::set<std::pair<ObjectType, UUID>> items_merge;
88  std::set<std::string> models_merge;
89  void update_items_merge();
90  std::set<std::pair<ObjectType, UUID>> get_referenced(ObjectType ty, const UUID &uu);
91  bool exists_in_pool(class Pool &pool, ObjectType ty, const UUID &uu);
92 
93  void update_prs();
94 
95  std::string gh_username;
96  std::string gh_password;
97 
98  std::string pr_title;
99  std::string pr_body;
100 };
101 } // namespace horizon
horizon::PoolRemoteBox
Definition: pool_remote_box.hpp:14
nlohmann::json
basic_json<> json
default JSON class
Definition: json_fwd.hpp:61
horizon::PoolNotebook
Definition: pool_notebook.hpp:24
nlohmann::basic_json
a class to store JSON values
Definition: json.hpp:161
horizon::UUID
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
horizon::Pool
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:21
horizon::StatusDispatcher
Definition: status_dispatcher.hpp:8