#pragma once #include #include #include #include "settings.h" class QDateEdit; class QLabel; class QLineEdit; class QPushButton; class QSpinBox; class QStackedWidget; class QVBoxLayout; class PhotoItemWidget; class ManagePostWidget; class UploadClient; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private: QWidget *buildSettingsPage(); QWidget *buildPostPage(); QWidget *buildManagePage(); void showSettings(); void showPost(); void showManage(); void saveAndTest(); void chooseImages(); void addItem(const QString &path); void removeItem(PhotoItemWidget *item); void clearItems(); void submit(); void pumpQueue(); // starts queued items up to the concurrency cap void startItem(PhotoItemWidget *item); int inFlightCount() const; // items currently preparing or uploading void refreshPosting(); // updates the Post button + summary from item states // Manage page. UploadClient *manageClient(); // lazily-built, lives as long as the window void loadManage(); // fetches the post list and thumbnails void clearManageItems(); void editItem(ManagePostWidget *item); void deleteItem(ManagePostWidget *item); // Tag autocomplete. void refreshTags(); // fetches /api/tags.json void applyTagSuggestions(); // pushes the list onto every post card Settings m_settings; QStackedWidget *m_stack = nullptr; // Settings page QLineEdit *m_baseUrl = nullptr; QLineEdit *m_username = nullptr; QLineEdit *m_password = nullptr; QSpinBox *m_concurrency = nullptr; QPushButton *m_saveButton = nullptr; QPushButton *m_settingsBack = nullptr; QLabel *m_settingsStatus = nullptr; // Post page QVBoxLayout *m_itemsLayout = nullptr; // holds the PhotoItemWidgets QList m_items; QLabel *m_emptyHint = nullptr; QPushButton *m_postButton = nullptr; QLabel *m_postSummary = nullptr; QLabel *m_lastPost = nullptr; // Bulk-post state: items waiting for a free upload slot, plus the batch's // credentials captured once at submit time. QList m_queue; QString m_batchBaseUrl; QString m_batchUsername; QString m_batchPassword; QString m_batchCacheDir; // Manage page QVBoxLayout *m_manageLayout = nullptr; // holds the ManagePostWidgets QList m_manageItems; QLabel *m_manageEmptyHint = nullptr; QLabel *m_manageStatus = nullptr; QPushButton *m_manageRefresh = nullptr; UploadClient *m_manageClient = nullptr; // lazily created, reused for manage ops // Known tag names for autocomplete, shared by the post cards and the edit // dialog. Best-effort: empty until /api/tags.json arrives. QStringList m_tagSuggestions; };