Skip to content

Commit c5c201f

Browse files
Added fetching custom limits form the server
1 parent 3c7c7f3 commit c5c201f

File tree

23 files changed

+90
-44
lines changed

23 files changed

+90
-44
lines changed

src/adapters/controllers/user_controller.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ long UserController::getUsedBookStorage() const
122122
return m_userService->getUsedBookStorage();
123123
}
124124

125+
long UserController::getBookStorageLimit() const
126+
{
127+
return m_userService->getBookStorageLimit();
128+
}
129+
125130
QString UserController::getProfilePicture() const
126131
{
127132
auto profilePicture = m_userService->getProfilePicture();
@@ -164,6 +169,7 @@ void UserController::proccessUserLoadingResult(bool success)
164169
emit lastNameChanged();
165170
emit emailChanged();
166171
emit usedBookStorageChanged();
172+
emit bookStorageLimitChanged();
167173

168174
emit finishedLoadingUser(success);
169175
}

src/adapters/controllers/user_controller.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class UserController : public IUserController
3131
void setEmail(const QString& newEmail) override;
3232

3333
long getUsedBookStorage() const override;
34+
long getBookStorageLimit() const override;
3435

3536
QString getProfilePicture() const override;
3637
void setProfilePicture(const QString& path) override;

src/adapters/gateways/user_storage_gateway.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ void UserStorageGateway::renameTag(const QString& authToken, const QUuid& uuid,
6464
m_userStorageAccess->renameTag(authToken, jsonTag);
6565
}
6666

67-
void UserStorageGateway::proccessUserData(const QString& firstName,
68-
const QString& lastName,
69-
const QString& email,
70-
long usedBookStorage,
71-
const QJsonArray& tags)
67+
void UserStorageGateway::proccessUserData(
68+
const QString& firstName, const QString& lastName, const QString& email,
69+
long usedBookStorage, long bookStorageLimit, const QJsonArray& tags)
7270
{
73-
User user(firstName, lastName, email, usedBookStorage);
71+
User user(firstName, lastName, email, usedBookStorage, bookStorageLimit);
7472
for(const auto& tag : tags)
7573
{
7674
auto jsonTagObject = tag.toObject();
@@ -85,7 +83,7 @@ void UserStorageGateway::proccessUserData(const QString& firstName,
8583

8684
void UserStorageGateway::reportFailureGettingUser()
8785
{
88-
User emptyUser("invalid", "invalid", "[email protected]", 0.0);
86+
User emptyUser("invalid", "invalid", "[email protected]", 0, 0);
8987
emit finishedGettingUser(emptyUser, false);
9088
}
9189

src/adapters/gateways/user_storage_gateway.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class UserStorageGateway : public application::IUserStorageGateway
3030
private slots:
3131
void proccessUserData(const QString& firstName, const QString& lastName,
3232
const QString& email, long usedBookStorage,
33-
const QJsonArray& tags);
33+
long bookStorageLimit, const QJsonArray& tags);
3434

3535
void reportFailureGettingUser();
3636

src/adapters/interfaces/controllers/i_user_controller.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class IUserController : public QObject
2121
Q_PROPERTY(QString email READ getEmail WRITE setEmail NOTIFY emailChanged)
2222
Q_PROPERTY(long usedBookStorage READ getUsedBookStorage NOTIFY
2323
usedBookStorageChanged CONSTANT)
24+
Q_PROPERTY(long bookStorageLimit READ getBookStorageLimit NOTIFY
25+
bookStorageLimitChanged CONSTANT)
2426
Q_PROPERTY(QString profilePicture READ getProfilePicture WRITE
2527
setProfilePicture NOTIFY profilePictureChanged)
2628
Q_PROPERTY(adapters::data_models ::UserTagsModel* tagsModel READ
@@ -47,6 +49,7 @@ class IUserController : public QObject
4749
virtual void setEmail(const QString& newEmail) = 0;
4850

4951
virtual long getUsedBookStorage() const = 0;
52+
virtual long getBookStorageLimit() const = 0;
5053

5154
virtual QString getProfilePicture() const = 0;
5255
virtual void setProfilePicture(const QString& path) = 0;
@@ -59,6 +62,7 @@ class IUserController : public QObject
5962
void lastNameChanged();
6063
void emailChanged();
6164
void usedBookStorageChanged();
65+
void bookStorageLimitChanged();
6266
void profilePictureChanged();
6367
};
6468

src/adapters/interfaces/persistance/i_user_storage_access.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class IUserStorageAccess : public QObject
3434
signals:
3535
void userReady(const QString& firstName, const QString& lastName,
3636
const QString& email, long usedBookStorage,
37-
const QJsonArray& tags);
37+
long bookStorageLimit, const QJsonArray& tags);
3838
void gettingUserFailed();
3939
};
4040

src/application/interfaces/services/i_book_service.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class IBookService : public QObject
4848

4949
public slots:
5050
virtual bool refreshLastOpenedDateOfBook(const QUuid& uuid) = 0;
51-
virtual void updateUsedBookStorage(long usedStorage) = 0;
51+
virtual void updateUsedBookStorage(long usedStorage,
52+
long bookStorageLimit) = 0;
5253
virtual void setupUserData(const QString& token, const QString& email) = 0;
5354
virtual void clearUserData() = 0;
5455

src/application/interfaces/services/i_user_service.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class IUserService : public QObject
3131
virtual void setEmail(const QString& newEmail) = 0;
3232

3333
virtual long getUsedBookStorage() const = 0;
34+
virtual long getBookStorageLimit() const = 0;
3435

3536
virtual QImage getProfilePicture() const = 0;
3637
virtual void setProfilePicture(const QImage& image) = 0;
@@ -47,7 +48,7 @@ class IUserService : public QObject
4748
void tagDeletionStarted(int index);
4849
void tagDeletionEnded();
4950
void tagsChanged(int index);
50-
void usedBookStorageUpdated(long usedStorage);
51+
void bookStorageDataUpdated(long usedStorage, long bookStorageLimit);
5152

5253
public slots:
5354
virtual void setupUserData(const QString& token, const QString& email) = 0;

src/application/services/book_service.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -481,9 +481,10 @@ void BookService::processDownloadedBookCover(const QUuid& uuid,
481481
refreshUIWithNewCover(uuid, filePath);
482482
}
483483

484-
void BookService::updateUsedBookStorage(long usedStorage)
484+
void BookService::updateUsedBookStorage(long usedStorage, long bookStorageLimit)
485485
{
486486
m_usedBookStorage = usedStorage;
487+
m_bookStorageLimit = bookStorageLimit;
487488
}
488489

489490
void BookService::setupUserData(const QString& token, const QString& email)
@@ -608,7 +609,7 @@ void BookService::mergeLocalLibraryIntoRemoteLibrary(
608609
// error messages for the user saying "Storage Limit Reached" or similar
609610
long bookSize = localBook.getSizeInBytes();
610611
long totalStorageSpace = m_usedBookStorage + bytesOfDataUploaded;
611-
bool enoughSpace = totalStorageSpace + bookSize < m_maxBookStorage;
612+
bool enoughSpace = totalStorageSpace + bookSize < m_bookStorageLimit;
612613
if(!localBookExistsOnServer && enoughSpace)
613614
{
614615
m_bookStorageManager->addBook(localBook);

src/application/services/book_service.hpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ public slots:
4747
bool refreshLastOpenedDateOfBook(const QUuid& uuid) override;
4848
void setupUserData(const QString& token, const QString& email) override;
4949
void clearUserData() override;
50+
void updateUsedBookStorage(long usedStorage,
51+
long bookStorageLimit) override;
5052

5153
private slots:
5254
void processBookCover(const QPixmap* pixmap);
5355
void updateLibrary(std::vector<domain::entities::Book>& books);
5456
void processDownloadedBook(const QUuid& uuid, const QString& filePath);
5557
void processDownloadedBookCover(const QUuid& uuid, const QString& filePath);
56-
void updateUsedBookStorage(long usedStorage) override;
57-
5858
void refreshUIWithNewCover(const QUuid& uuid, const QString& path);
5959
void refreshUIForBook(const QUuid& uuid);
6060

@@ -73,11 +73,10 @@ private slots:
7373
IBookMetadataHelper* m_bookMetadataHelper;
7474
IBookStorageManager* m_bookStorageManager;
7575
std::vector<domain::entities::Book> m_books;
76+
long m_usedBookStorage = 0;
77+
long m_bookStorageLimit = 0;
7678
QTimer m_fetchChangesTimer;
7779
const int m_fetchChangedInterval = 15'000;
78-
79-
long m_usedBookStorage = 0;
80-
long m_maxBookStorage = 209715200; // 200 MiB
8180
};
8281

8382
} // namespace application::services

src/application/services/user_service.cpp

+12-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace application::services
1111

1212
UserService::UserService(IUserStorageGateway* userStorageGateway) :
1313
m_userStorageGateway(userStorageGateway),
14-
m_user("x", "y", "z", 0.0)
14+
m_user("x", "y", "z", 0, 0)
1515
{
1616
connect(m_userStorageGateway, &IUserStorageGateway::finishedGettingUser,
1717
this, &UserService::proccessUserInformation);
@@ -113,6 +113,11 @@ long UserService::getUsedBookStorage() const
113113
return m_user.getUsedBookStorage();
114114
}
115115

116+
long UserService::getBookStorageLimit() const
117+
{
118+
return m_user.getBookStorageLimit();
119+
}
120+
116121
QImage UserService::getProfilePicture() const
117122
{
118123
return m_user.getProfilePicture();
@@ -187,11 +192,13 @@ void UserService::proccessUserInformation(const domain::entities::User& user,
187192
m_user.setLastName(user.getLastName());
188193
m_user.setEmail(user.getEmail());
189194
m_user.setUsedBookStorage(user.getUsedBookStorage());
195+
m_user.setBookStorageLimit(user.getBookStorageLimit());
190196
for(const auto& tag : user.getTags())
191197
m_user.addTag(tag);
192198

193199
emit finishedLoadingUser(true);
194-
emit usedBookStorageUpdated(user.getUsedBookStorage());
200+
emit bookStorageDataUpdated(user.getUsedBookStorage(),
201+
user.getBookStorageLimit());
195202

196203
// If "rememberUser" is true, update the saved autologin user data everytime
197204
// there are changes to the user. This way, when logging in via autologin
@@ -213,7 +220,7 @@ bool UserService::tryLoadingUserFromFile()
213220
{
214221
utility::UserData userData = result.value();
215222
User user(userData.firstName, userData.lastName, userData.email,
216-
userData.usedBookStorage);
223+
userData.usedBookStorage, userData.bookStorageLimit);
217224
for(auto& tag : userData.tags)
218225
user.addTag(tag);
219226

@@ -228,8 +235,8 @@ void UserService::saveUserToFile(const domain::entities::User& user)
228235
{
229236
utility::AutomaticLoginHelper autoLoginHelper;
230237
utility::UserData userData {
231-
user.getFirstName(), user.getLastName(), user.getEmail(),
232-
user.getUsedBookStorage(), user.getTags(),
238+
user.getFirstName(), user.getLastName(), user.getEmail(),
239+
user.getUsedBookStorage(), user.getBookStorageLimit(), user.getTags(),
233240
};
234241

235242
autoLoginHelper.saveUserData(userData);

src/application/services/user_service.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class UserService : public IUserService
2828

2929
long getUsedBookStorage() const override;
3030

31+
long getBookStorageLimit() const override;
32+
3133
QImage getProfilePicture() const override;
3234
void setProfilePicture(const QImage& image) override;
3335

src/application/utility/automatic_login_helper.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ std::optional<UserData> AutomaticLoginHelper::tryAutomaticUserLoading()
4545
automaticLoginData["lastName"].toString(),
4646
automaticLoginData["email"].toString(),
4747
static_cast<long>(automaticLoginData["usedBookStorage"].toDouble()),
48+
static_cast<long>(automaticLoginData["bookStorageLimit"].toDouble()),
4849
std::vector<Tag>(),
4950
};
5051

@@ -127,6 +128,8 @@ void AutomaticLoginHelper::appendUserDataToJsonObject(QJsonObject& jsonObject,
127128
jsonObject.insert("email", userData.email);
128129
jsonObject.insert("usedBookStorage",
129130
static_cast<qint64>(userData.usedBookStorage));
131+
jsonObject.insert("bookStorageLimit",
132+
static_cast<qint64>(userData.bookStorageLimit));
130133

131134
QJsonArray tags;
132135
for(const auto& tag : userData.tags)

src/application/utility/automatic_login_helper.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct UserData
1414
QString lastName;
1515
QString email;
1616
long usedBookStorage;
17+
long bookStorageLimit;
1718
std::vector<domain::entities::Tag> tags;
1819
};
1920

src/domain/entities/user.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ namespace domain::entities
55
{
66

77
User::User(const QString& firstName, const QString& lastName,
8-
const QString& email, long usedBookStorage) :
8+
const QString& email, long usedBookStorage, long bookStorageLimit) :
99
m_firstName(firstName),
1010
m_lastName(lastName),
1111
m_email(email),
12-
m_usedBookStorage(usedBookStorage)
12+
m_usedBookStorage(usedBookStorage),
13+
m_bookStorageLimit(bookStorageLimit)
1314
{
1415
}
1516

@@ -53,6 +54,16 @@ void User::setUsedBookStorage(long newUsedBookStorage)
5354
m_usedBookStorage = newUsedBookStorage;
5455
}
5556

57+
long User::getBookStorageLimit() const
58+
{
59+
return m_bookStorageLimit;
60+
}
61+
62+
void User::setBookStorageLimit(long newBookStorageLimit)
63+
{
64+
m_bookStorageLimit = newBookStorageLimit;
65+
}
66+
5667
const QImage& User::getProfilePicture() const
5768
{
5869
return m_profilePicture;

src/domain/entities/user.hpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class User : public QObject
1313

1414
public:
1515
User(const QString& firstName, const QString& lastName,
16-
const QString& email, long usedBookStorage);
16+
const QString& email, long usedBookStorage, long bookStorageLimit);
1717

1818
const QString& getFirstName() const;
1919
void setFirstName(const QString& newFirstName);
@@ -27,6 +27,10 @@ class User : public QObject
2727
long getUsedBookStorage() const;
2828
void setUsedBookStorage(long newUsedBookStorage);
2929

30+
long getBookStorageLimit() const;
31+
void setBookStorageLimit(long newBookStorageLimit);
32+
33+
3034
const QImage& getProfilePicture() const;
3135
void setProfilePicture(const QImage& newProfilePicture);
3236

@@ -53,6 +57,7 @@ class User : public QObject
5357
QString m_lastName;
5458
QString m_email;
5559
long m_usedBookStorage;
60+
long m_bookStorageLimit;
5661
QImage m_profilePicture;
5762
std::vector<Tag> m_tags;
5863
};

src/infrastructure/persistance/user_storage_access.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,13 @@ void UserStorageAccess::proccessGetUserResult()
139139
auto lastName = jsonObj["lastName"].toString();
140140
auto usedBookStorage =
141141
static_cast<long>(jsonObj["usedBookStorage"].toDouble());
142+
auto bookStorageLimit =
143+
static_cast<long>(jsonObj["bookStorageLimit"].toDouble());
142144
auto email = jsonObj["email"].toString();
143145
auto tags = jsonObj["tags"].toArray();
144146

145-
emit userReady(firstName, lastName, email, usedBookStorage, tags);
147+
emit userReady(firstName, lastName, email, usedBookStorage,
148+
bookStorageLimit, tags);
146149

147150
// Make sure to release the reply's memory
148151
reply->deleteLater();

src/main.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ int main(int argc, char* argv[])
144144

145145

146146
// Setup other connections
147-
QObject::connect(userService, &application::IUserService::usedBookStorageUpdated,
147+
QObject::connect(userService, &application::IUserService::bookStorageDataUpdated,
148148
bookService, &application::IBookService::updateUsedBookStorage);
149149

150150

src/presentation/settings/MStoragePage.qml

+3-2
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,14 @@ MFlickWrapper
142142
{
143143
id: availableStorageText
144144
property int usedMB: (UserController.usedBookStorage / (1024 * 1024))
145+
property int storageLimitMB: (UserController.bookStorageLimit / (1024 * 1024))
145146

146147
Layout.fillWidth: true
147148
Layout.leftMargin: 20
148149
Layout.topMargin: 15
149150
text: "You are currently using <font size=4 color=" + Style.colorBasePurple + " bold><b>" +
150-
(usedMB <= 200 ? usedMB : 200) + "</b></font> MB " +
151-
"out of <font size=4 color=" + Style.colorBasePurple + " bold><b> 200 </b></font> MB!"
151+
(usedMB <= storageLimitMB ? usedMB : storageLimitMB) + "</b></font> MB " +
152+
"out of <font size=4 color=" + Style.colorBasePurple + " bold><b> " + storageLimitMB + " </b></font> MB!"
152153
wrapMode: Text.WordWrap
153154
color: Style.colorLightText
154155
font.pointSize: 15

tests/adapters_unit_tests/controllers/book_controller_tests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class BookServiceMock : public IBookService
5858
MOCK_METHOD(void, setupUserData, (const QString&, const QString&),
5959
(override));
6060
MOCK_METHOD(void, clearUserData, (), (override));
61-
MOCK_METHOD(void, updateUsedBookStorage, (long), (override));
61+
MOCK_METHOD(void, updateUsedBookStorage, (long, long), (override));
6262
};
6363

6464
struct ABookController : public ::testing::Test

tests/adapters_unit_tests/controllers/user_controller_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class UserServiceMock : public application::IUserService
2727
MOCK_METHOD(QString, getEmail, (), (const, override));
2828
MOCK_METHOD(void, setEmail, (const QString&), (override));
2929
MOCK_METHOD(long, getUsedBookStorage, (), (const, override));
30+
MOCK_METHOD(long, getBookStorageLimit, (), (const, override));
3031
MOCK_METHOD(QImage, getProfilePicture, (), (const, override));
3132
MOCK_METHOD(void, setProfilePicture, (const QImage&), (override));
3233
MOCK_METHOD(void, setupUserData, (const QString&, const QString&),

tests/application_unit_tests/services/book_service_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,7 @@ TEST_F(ABookService, SucceedsAddingALocalBookToRemoteServer)
812812
.Times(1)
813813
.WillOnce(Return(localBookMetaData));
814814

815+
bookService->updateUsedBookStorage(0, 99999999); // Setup storage limit
815816
bookService->addBook("some/path.pdf");
816817

817818

0 commit comments

Comments
 (0)