diff --git a/src/database.js b/src/database.js index e182638..a3eeca7 100644 --- a/src/database.js +++ b/src/database.js @@ -251,6 +251,27 @@ async function getServerConfig() { return ENDPOINT.findOne(); } +async function getNewsFeed(user, numberOfPosts) { + verifyConnected(); + return POST.find({ + $or: [ + {pid: user.followed_users}, + {pid: user.pid} + ], + }).limit(numberOfPosts).sort({ created_at: -1}); +} + +async function getNewsFeedAfterTimestamp(user, numberOfPosts, post) { + verifyConnected(); + return POST.find({ + $or: [ + {pid: user.followed_users}, + {pid: user.pid} + ], + created_at: { $lt: post.created_at } + }).limit(numberOfPosts).sort({ created_at: -1}); +} + module.exports = { connect, getCommunities, @@ -281,5 +302,7 @@ module.exports = { getCommunityPostsAfterTimestamp, getServerConfig, pushNewNotificationByPID, - pushNewNotificationToAll + pushNewNotificationToAll, + getNewsFeed, + getNewsFeedAfterTimestamp, }; \ No newline at end of file diff --git a/src/services/juxt-web/index.js b/src/services/juxt-web/index.js index ae91ba8..678b3ff 100644 --- a/src/services/juxt-web/index.js +++ b/src/services/juxt-web/index.js @@ -37,6 +37,8 @@ ctr.use('/titles/show', routes.CTR_SHOW); ctr.use('/communities', routes.CTR_COMMUNITIES); ctr.use('/users', routes.CTR_USER); ctr.use('/posts', routes.CTR_POST); +ctr.use('/news', routes.CTR_NEWS); +ctr.use('/activity-feed', routes.CTR_FEED); ctr.use('/', routes.CTR_WEB); admin.use('/', routes.WEB_ADMIN); diff --git a/src/services/juxt-web/routes/ctr/feed.js b/src/services/juxt-web/routes/ctr/feed.js new file mode 100644 index 0000000..c43ae31 --- /dev/null +++ b/src/services/juxt-web/routes/ctr/feed.js @@ -0,0 +1,86 @@ +var express = require('express'); +var xml = require('object-to-xml'); +const database = require('../../../../database'); +const util = require('../../../../authentication'); +var moment = require('moment'); +var router = express.Router(); + +router.get('/', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2'); + database.connect().then(async e => { + + let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); + + if(pid === null) + pid = 1000000000; + let user = await database.getUserByPID(pid); + let communityMap = await util.data.getCommunityHash(); + let posts = await database.getNewsFeed(user, 3); + res.render('ctr/feed.ejs', { + moment: moment, + user: user, + posts: posts, + communityMap: communityMap, + }); + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + +router.get('/loadposts', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2'); + database.connect().then(async e => { + let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); + let post = await database.getPostByID(req.query.postID); + if(pid === null) + pid = 1000000000; + let user = await database.getUserByPID(pid); + let communityMap = await util.data.getCommunityHash(); + let posts; + if(post !== null) + posts = await database.getNewsFeedAfterTimestamp(user, 3, post); + + if(posts.length > 0) + { + res.render('ctr/more_posts.ejs', { + communityMap: communityMap, + moment: moment, + database: database, + user: user, + newPosts: posts, + }); + } + else + { + res.sendStatus(204); + } + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + +module.exports = router; diff --git a/src/services/juxt-web/routes/ctr/notifications.js b/src/services/juxt-web/routes/ctr/notifications.js new file mode 100644 index 0000000..2446140 --- /dev/null +++ b/src/services/juxt-web/routes/ctr/notifications.js @@ -0,0 +1,44 @@ +var express = require('express'); +var xml = require('object-to-xml'); +const database = require('../../../../database'); +const util = require('../../../../authentication'); +var moment = require('moment'); +var router = express.Router(); + +router.get('/', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2'); + database.connect().then(async e => { + + //let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]); + let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); + + if(pid === null) + pid = 1000000000; + let user = await database.getUserByPID(pid); + res.render('ctr/notifications.ejs', { + moment: moment, + user: user, + }); + user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { + notification.read = true; + }); + user.markModified('notification_list'); + user.save(); + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + +module.exports = router; diff --git a/src/services/juxt-web/routes/ctr/posts.js b/src/services/juxt-web/routes/ctr/posts.js index ecf7bc3..eaf7a00 100644 --- a/src/services/juxt-web/routes/ctr/posts.js +++ b/src/services/juxt-web/routes/ctr/posts.js @@ -104,7 +104,7 @@ router.post('/new', upload.none(), async function (req, res, next) { }; const newPost = new POST(document); newPost.save(); - res.redirect('/communities/' + community.community_id); + res.redirect('/communities/' + community.community_id + '/new'); } } catch (e) diff --git a/src/services/juxt-web/routes/ctr/userpage.js b/src/services/juxt-web/routes/ctr/userpage.js index 6254325..6eb634c 100644 --- a/src/services/juxt-web/routes/ctr/userpage.js +++ b/src/services/juxt-web/routes/ctr/userpage.js @@ -89,7 +89,7 @@ router.get('/show', function (req, res) { database.connect().then(async e => { let user = await database.getUserByPID(userID); let newPosts = await database.getPostsByUserID(user.pid); - let numPosts = await database.getNumberPostsByUserID(user.pid); + let numPosts = await database.getNumberUserPostsByID(user.pid); if(isAJAX) { res.render('ctr/user_page_ajax.ejs', { // EJS variable and server-side variable diff --git a/src/services/juxt-web/routes/index.js b/src/services/juxt-web/routes/index.js index 8206197..dccde16 100644 --- a/src/services/juxt-web/routes/index.js +++ b/src/services/juxt-web/routes/index.js @@ -12,6 +12,8 @@ module.exports = { CTR_COMMUNITIES: require('./ctr/communities'), CTR_USER: require('./ctr/userpage'), CTR_POST: require('./ctr/posts'), + CTR_FEED: require('./ctr/feed'), + CTR_NEWS: require('./ctr/notifications'), WEB_ADMIN: require('./admin/home'), WEB_API: require('./admin/api'), }; \ No newline at end of file diff --git a/src/services/juxt-web/routes/portal/feed.js b/src/services/juxt-web/routes/portal/feed.js index e6d20af..524a4d7 100644 --- a/src/services/juxt-web/routes/portal/feed.js +++ b/src/services/juxt-web/routes/portal/feed.js @@ -15,9 +15,13 @@ router.get('/', function (req, res) { if(pid === null) pid = 1000000000; let user = await database.getUserByPID(pid); + let communityMap = await util.data.getCommunityHash(); + let posts = await database.getNewsFeed(user, 3); res.render('portal/feed.ejs', { moment: moment, user: user, + posts: posts, + communityMap: communityMap, }); user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { notification.read = true; @@ -41,4 +45,48 @@ router.get('/', function (req, res) { }); }); +router.get('/loadposts', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2'); + database.connect().then(async e => { + let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); + let post = await database.getPostByID(req.query.postID); + if(pid === null) + pid = 1000000000; + let user = await database.getUserByPID(pid); + let communityMap = await util.data.getCommunityHash(); + let posts; + if(post !== null) + posts = await database.getNewsFeedAfterTimestamp(user, 3, post); + + if(posts.length > 0) + { + res.render('portal/more_posts.ejs', { + communityMap: communityMap, + moment: moment, + database: database, + user: user, + newPosts: posts, + }); + } + else + { + res.sendStatus(204); + } + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + module.exports = router; diff --git a/src/services/juxt-web/routes/portal/posts.js b/src/services/juxt-web/routes/portal/posts.js index ecf7bc3..eaf7a00 100644 --- a/src/services/juxt-web/routes/portal/posts.js +++ b/src/services/juxt-web/routes/portal/posts.js @@ -104,7 +104,7 @@ router.post('/new', upload.none(), async function (req, res, next) { }; const newPost = new POST(document); newPost.save(); - res.redirect('/communities/' + community.community_id); + res.redirect('/communities/' + community.community_id + '/new'); } } catch (e) diff --git a/src/webfiles/ctr/all_communities.ejs b/src/webfiles/ctr/all_communities.ejs new file mode 100644 index 0000000..3415261 --- /dev/null +++ b/src/webfiles/ctr/all_communities.ejs @@ -0,0 +1,60 @@ + + + + + 3DS Testing + + + + + +
+
+
+

+ Check out the communities for the games that you play or games that you're curious about! +

+
+
+

Communities

+
+
+
+
+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/src/webfiles/ctr/communities.ejs b/src/webfiles/ctr/communities.ejs index c3c7b48..f945eac 100644 --- a/src/webfiles/ctr/communities.ejs +++ b/src/webfiles/ctr/communities.ejs @@ -25,6 +25,9 @@ + + + + + + \ No newline at end of file diff --git a/src/webfiles/portal/community.ejs b/src/webfiles/portal/community.ejs index a3abed1..7fbb651 100644 --- a/src/webfiles/portal/community.ejs +++ b/src/webfiles/portal/community.ejs @@ -211,7 +211,7 @@

<%= moment(post.created_at).fromNow() %>

-
+
<%= post.empathy_count %> Yeahs
diff --git a/src/webfiles/portal/css/juxt.css b/src/webfiles/portal/css/juxt.css index 588ca1a..c641cc4 100644 --- a/src/webfiles/portal/css/juxt.css +++ b/src/webfiles/portal/css/juxt.css @@ -1036,11 +1036,10 @@ h4 { } .community-page-post-wrapper { - padding-top: 25px; - margin-left: 137px; + /* padding-top: 25px; */ + margin-left: 130px; margin-bottom: 90px; width: 760px; - } .community-page-post-screenshot { @@ -1158,11 +1157,11 @@ h4 { } .no-posts-text { - margin-left: 42%; + margin-left: 43%; font-size: xx-large; color: rgba(113,141,148,1); padding-bottom: 65px; - padding-top: 45px; + padding-top: 50px; } h3 { @@ -1667,6 +1666,8 @@ textarea { .announcements-banner { background-image: url('data:image/png;base64,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'); background-size: cover; + user-select: none; + cursor: pointer; } .announcements-banner-text { diff --git a/src/webfiles/portal/feed.ejs b/src/webfiles/portal/feed.ejs index d391095..925546a 100644 --- a/src/webfiles/portal/feed.ejs +++ b/src/webfiles/portal/feed.ejs @@ -23,9 +23,55 @@
-

Activity Feed

+
+

Activity Feed

+
+ <% if(posts.length === 0) {%> +

It's empty here. Try following someone!

+ <%} else { %> + + <% posts.forEach(function(post) { %> + +
+ <% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %> +

<%= post.body %>

+ <%} else { %> + <% if(post.screenshot !== '') { %> + + <%}%> + <% if(post.painting !== '') { %> + + <%}%> + <% if(post.url) { %> +

Video Playback is not yet supported on the 3DS

+ <%}%> + <% if(post.body) { %> +
+

<%= post.body %>

+
+ <%}%> + <%}%> +
+ <% }); %> + <%}%> +
+
-
diff --git a/src/webfiles/portal/js/juxt.js b/src/webfiles/portal/js/juxt.js index 7f186ef..58f8f2d 100644 --- a/src/webfiles/portal/js/juxt.js +++ b/src/webfiles/portal/js/juxt.js @@ -590,6 +590,29 @@ function loadCommunityPosts() { wiiuSound.playSoundByName("SE_WAVE_MENU", 1); wiiuBrowser.showLoadingIcon(!1); } +function loadFeedPosts() { + wiiuBrowser.showLoadingIcon(!0); + var postID = document.getElementsByClassName('post-user-info-wrapper')[document.getElementsByClassName('post-user-info-wrapper').length - 1].id + var xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (this.readyState === 4 && this.status === 200) { + document.getElementsByClassName('community-page-posts-wrapper')[0].innerHTML += this.responseText; + initCommunityUsers(); + } + else if(this.readyState === 4 && this.status === 204) + { + document.getElementById('load-more-posts-button').style.display = 'none'; + } + else if (this.readyState === 4){ + wiiuErrorViewer.openByCodeAndMessage(5983000 + this.status, 'Error: "' + this.statusText + '"\nPlease send code to Jemma on Discord with what you were doing'); + } + }; + xhttp.open("GET", '/activity-feed/loadposts?postID=' + postID, true); + xhttp.send(); + + wiiuSound.playSoundByName("SE_WAVE_MENU", 1); + wiiuBrowser.showLoadingIcon(!1); +} function switchUserPageTabs(type) { document.getElementById('user-page-posts-tab').classList.remove('selected'); document.getElementById('user-page-friends-tab').classList.remove('selected'); diff --git a/src/webfiles/portal/more_posts.ejs b/src/webfiles/portal/more_posts.ejs index f9e3d90..8c7ff3b 100644 --- a/src/webfiles/portal/more_posts.ejs +++ b/src/webfiles/portal/more_posts.ejs @@ -10,7 +10,7 @@

<%= post.screen_name %>

<%= moment(post.created_at).fromNow() %> - <%= communityMap.get(post.title_id) %>

-
+
<%= post.empathy_count %> Yeahs
diff --git a/src/webfiles/portal/user_page.ejs b/src/webfiles/portal/user_page.ejs index f495cf7..8f82211 100644 --- a/src/webfiles/portal/user_page.ejs +++ b/src/webfiles/portal/user_page.ejs @@ -33,11 +33,11 @@
<%if(parentUser.followed_users.indexOf(user.pid) !== -1){ %>
style="display: none" <%}%>> -

Following

+

Following

<%} else {%>
style="display: none" <%}%>> -

Follow User

+

Follow User

<%}%>