diff --git a/changelog.md b/changelog.md
index 89b8a1976..452705f00 100644
--- a/changelog.md
+++ b/changelog.md
@@ -7,6 +7,11 @@ h5 {
margin-left: 0px;
}
+.page .taskList {
+ display:block;
+ break-inside:auto;
+}
+
.taskList li input {
list-style-type : none;
margin-left : -0.52cm;
@@ -35,15 +40,42 @@ pre {
margin-top : 0.1cm;
}
+.page ul + h5 {
+ margin-top: 0.25cm;
+}
+
+.page p + h5 {
+ margin-top: 0.25cm;
+}
+
.page .openSans {
font-family: 'Open Sans';
font-size: 0.9em;
}
+
+
```
## changelog
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
+### Saturday 10/12/2022 - v3.4.2
+{{taskList
+
+##### Jeddai
+
+* [x] Fix broken tags editor
+
+* [x] Reduce server load to fix some saving issues
+
+Fixes issues [#2322](https://github.com/naturalcrit/homebrewery/issues/2322)
+
+##### G-Ambatte
+
+* [x] Account page help link for Google Drive errors
+
+Fixes issues [#2520](https://github.com/naturalcrit/homebrewery/issues/2520)
+}}
### Monday 05/12/2022 - v3.4.1
{{taskList
@@ -142,12 +174,7 @@ Fixes issues [#2135](https://github.com/naturalcrit/homebrewery/issues/2135)
* [x] Fix brew settings being lost on first save
Fixes issues [#2427](https://github.com/naturalcrit/homebrewery/issues/2427)
-}}
-\column
-
-
-{{taskList
##### Gazook:
* [x] Several updates to bug reporting and error popups
@@ -197,6 +224,10 @@ Fixes issues [#2317](https://github.com/naturalcrit/homebrewery/issues/2317), [
Fixes issues: [#1797](https://github.com/naturalcrit/homebrewery/issues/1797), [#2315](https://github.com/naturalcrit/homebrewery/issues/2315), [#2326](https://github.com/naturalcrit/homebrewery/issues/2326), [#2328](https://github.com/naturalcrit/homebrewery/issues/2328)
}}
+
+
+\page
+
### Wednesday 31/08/2022 - v3.2.1
{{taskList
@@ -223,8 +254,6 @@ Fixes issues [#2317](https://github.com/naturalcrit/homebrewery/issues/2317), [
Fixes issues: [#2301](https://github.com/naturalcrit/homebrewery/issues/2301), [#2303](https://github.com/naturalcrit/homebrewery/issues/2303), [#2121](https://github.com/naturalcrit/homebrewery/issues/2121)
}}
-\page
-
### Saturday 27/08/2022 - v3.2.0
{{taskList
diff --git a/client/homebrew/pages/accountPage/accountPage.jsx b/client/homebrew/pages/accountPage/accountPage.jsx
index 644ab13d8..77f246a8b 100644
--- a/client/homebrew/pages/accountPage/accountPage.jsx
+++ b/client/homebrew/pages/accountPage/accountPage.jsx
@@ -42,7 +42,6 @@ const AccountPage = createClass({
},
renderUiItems : function() {
- // console.log(this.props.uiItems);
return <>
Account Information
@@ -51,12 +50,16 @@ const AccountPage = createClass({
Homebrewery Information
-
Brews on Homebrewery: {this.props.uiItems.mongoCount || '-'}
+
Brews on Homebrewery: {this.props.uiItems.mongoCount}
Google Information
Linked to Google: {this.props.uiItems.googleId ? 'YES' : 'NO'}
- {this.props.uiItems.googleId ?
Brews on Google Drive: {this.props.uiItems.fileCount || '-'}
: '' }
+ {this.props.uiItems.googleId &&
+
+ Brews on Google Drive: {this.props.uiItems.googleCount ?? <>Unable to retrieve files - follow these steps to renew your Google credentials.>}
+
+ }
>;
},
diff --git a/package-lock.json b/package-lock.json
index 37db3aa82..b2499d137 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "homebrewery",
- "version": "3.4.1",
+ "version": "3.4.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "homebrewery",
- "version": "3.4.1",
+ "version": "3.4.2",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index 3838a5b66..a6a25de1e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "homebrewery",
"description": "Create authentic looking D&D homebrews using only markdown",
- "version": "3.4.1",
+ "version": "3.4.2",
"engines": {
"node": "16.11.x"
},
diff --git a/server/app.js b/server/app.js
index 10ef184cd..b24054187 100644
--- a/server/app.js
+++ b/server/app.js
@@ -279,7 +279,6 @@ app.get('/edit/:id', asyncHandler(getBrew('edit')), (req, res, next)=>{
title : req.brew.title || 'Untitled Brew',
description : req.brew.description || 'No description.',
image : req.brew.thumbnail || defaultMetaTags.image,
-
type : 'article'
};
@@ -340,7 +339,7 @@ app.get('/account', asyncHandler(async (req, res, next)=>{
data.title = 'Account Information Page';
let auth;
- let files;
+ let googleCount = [];
if(req.account) {
if(req.account.googleId) {
try {
@@ -352,9 +351,9 @@ app.get('/account', asyncHandler(async (req, res, next)=>{
}
if(auth.credentials.access_token) {
try {
- files = await GoogleActions.listGoogleBrews(auth);
+ googleCount = await GoogleActions.listGoogleBrews(auth);
} catch (e) {
- files = undefined;
+ googleCount = undefined;
console.log('List Google files failed!');
console.log(e);
}
@@ -362,18 +361,19 @@ app.get('/account', asyncHandler(async (req, res, next)=>{
}
const query = { authors: req.account.username, googleId: { $exists: false } };
- const brews = await HomebrewModel.find(query, 'id')
+ const mongoCount = await HomebrewModel.countDocuments(query)
.catch((err)=>{
+ mongoCount = 0;
console.log(err);
});
data.uiItems = {
- username : req.account.username,
- issued : req.account.issued,
- mongoCount : brews.length,
- googleId : Boolean(req.account.googleId),
- authCheck : Boolean(req.account.googleId && auth.credentials.access_token),
- fileCount : files?.length || '-'
+ username : req.account.username,
+ issued : req.account.issued,
+ googleId : Boolean(req.account.googleId),
+ authCheck : Boolean(req.account.googleId && auth.credentials.access_token),
+ mongoCount : mongoCount,
+ googleCount : googleCount?.length
};
}
diff --git a/server/googleActions.js b/server/googleActions.js
index 3b2c360b3..e5fa9cc89 100644
--- a/server/googleActions.js
+++ b/server/googleActions.js
@@ -253,7 +253,6 @@ const GoogleActions = {
text : file.data,
description : obj.data.description,
- tags : obj.data.properties.tags ? obj.data.properties.tags : '',
systems : obj.data.properties.systems ? obj.data.properties.systems.split(',') : [],
authors : [],
published : obj.data.properties.published ? obj.data.properties.published == 'true' : false,
diff --git a/server/homebrew.api.js b/server/homebrew.api.js
index 8d19e915c..abcbfc7de 100644
--- a/server/homebrew.api.js
+++ b/server/homebrew.api.js
@@ -45,7 +45,7 @@ const getId = (req)=>{
return { id, googleId };
};
-const getBrew = (accessType)=>{
+const getBrew = (accessType, stubOnly = false)=>{
// Create middleware with the accessType passed in as part of the scope
return async (req, res, next)=>{
// Get relevant IDs for the brew
@@ -61,9 +61,12 @@ const getBrew = (accessType)=>{
}
});
stub = stub?.toObject();
+ if(accessType === 'edit' && stub?.authors?.length > 0 && !stub?.authors.includes(req.account?.username)) {
+ throw 'Current logged in user does not have access to this brew.';
+ }
// If there is a google id, try to find the google brew
- if(googleId || stub?.googleId) {
+ if(!stubOnly && (googleId || stub?.googleId)) {
let googleError;
const googleBrew = await GoogleActions.getGoogleBrew(googleId || stub?.googleId, id, accessType)
.catch((err)=>{
@@ -77,11 +80,11 @@ const getBrew = (accessType)=>{
}
// If after all of that we still don't have a brew, throw an exception
- if(!stub) {
+ if(!stub && !stubOnly) {
throw 'Brew not found in Homebrewery database or Google Drive';
}
- if(typeof stub.tags === 'string') {
+ if(typeof stub?.tags === 'string') {
stub.tags = [];
}
@@ -261,23 +264,22 @@ const updateBrew = async (req, res)=>{
brew.authors = _.uniq(_.concat(brew.authors, req.account.username));
}
- // Fetch the brew from the database again (if it existed there to begin with), and assign the existing brew to it
- brew = _.assign(await HomebrewModel.findOne({ _id: brew._id }), brew);
-
- if(!brew.markModified) {
- // If it wasn't in the database, create a new db brew
- brew = new HomebrewModel(brew);
+ // define a function to catch our save errors
+ const saveError = (err)=>{
+ console.error(err);
+ res.status(err.status || 500).send(err.message || 'Unable to save brew to Homebrewery database');
+ };
+ let saved;
+ if(!brew._id) {
+ // if the brew does not have a stub id, create and save it, then write the new value back to the brew.
+ saved = await new HomebrewModel(brew).save().catch(saveError);
+ brew = saved?.toObject();
+ } else {
+ // if the brew does have a stub id, update it using the stub id as the key.
+ brew = _.assign(await HomebrewModel.findOne({ _id: brew._id }), brew);
+ saved = await brew.save()
+ .catch(saveError);
}
-
- brew.markModified('authors');
- brew.markModified('systems');
-
- // Save the database brew
- const saved = await brew.save()
- .catch((err)=>{
- console.error(err);
- res.status(err.status || 500).send(err.message || 'Unable to save brew to Homebrewery database');
- });
if(!saved) return;
// Call and wait for afterSave to complete
const after = await afterSave();
@@ -353,8 +355,8 @@ const deleteBrew = async (req, res, next)=>{
};
router.post('/api', asyncHandler(newBrew));
-router.put('/api/:id', asyncHandler(getBrew('edit')), asyncHandler(updateBrew));
-router.put('/api/update/:id', asyncHandler(getBrew('edit')), asyncHandler(updateBrew));
+router.put('/api/:id', asyncHandler(getBrew('edit', true)), asyncHandler(updateBrew));
+router.put('/api/update/:id', asyncHandler(getBrew('edit', true)), asyncHandler(updateBrew));
router.delete('/api/:id', asyncHandler(deleteBrew));
router.get('/api/remove/:id', asyncHandler(deleteBrew));