From f2edbba4cf4a227bbb4af9208b061606b57a59bb Mon Sep 17 00:00:00 2001 From: Morgan McMillian Date: Fri, 21 Oct 2016 06:09:34 -0700 Subject: [PATCH] start user profile display --- assets/.assets.index | 6 +- assets/ProfilePage.qml | 159 +++++++++++++++++++++++++++++++++ assets/StreamTab.qml | 18 +++- assets/icons/default_cover.png | Bin 0 -> 25459 bytes assets/icons/ic_cancel.png | Bin 0 -> 2524 bytes assets/icons/ic_compose.png | Bin 0 -> 1664 bytes buildnum | 2 +- config.pri | 4 + src/Pnut.cpp | 32 +++++++ src/Pnut.h | 4 + translations/Goober.ts | 55 +++++++++--- 11 files changed, 264 insertions(+), 16 deletions(-) create mode 100644 assets/ProfilePage.qml create mode 100644 assets/icons/default_cover.png create mode 100644 assets/icons/ic_cancel.png create mode 100644 assets/icons/ic_compose.png diff --git a/assets/.assets.index b/assets/.assets.index index a116554..32fa53d 100644 --- a/assets/.assets.index +++ b/assets/.assets.index @@ -1,9 +1,12 @@ 1 -27 +31 icons/comments.png +icons/default_cover.png icons/globe.png icons/ic_add.png icons/ic_add_bookmarks.png +icons/ic_cancel.png +icons/ic_compose.png icons/ic_del_bookmarks.png icons/ic_favorite.png icons/ic_reload.png @@ -24,6 +27,7 @@ main.qml moment.js NewPostSheet.qml PostItem.qml +ProfilePage.qml RefreshItem.qml StreamTab.qml ThreadPage.qml diff --git a/assets/ProfilePage.qml b/assets/ProfilePage.qml new file mode 100644 index 0000000..873a14c --- /dev/null +++ b/assets/ProfilePage.qml @@ -0,0 +1,159 @@ +import bb.cascades 1.4 +import org.labsquare 1.0 + +Page { + + property variant user + property variant theme : Application.themeSupport.theme.colorTheme.style + + signal follow(string uid) + signal unfollow(string uid) + + Container { + Container { + layout: DockLayout {} + horizontalAlignment: HorizontalAlignment.Fill + preferredHeight: cover.height + Container { + Container { + opacity: 0.5 + WebImageView { + id: cover + preferredWidth: 1440 + scalingMethod: ScalingMethod.AspectFit + //imageSource: "asset:///icons/default_cover.png" + url: user.content.cover_image.link + } + } + } + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + topPadding: ui.sdu(3) + leftPadding: ui.sdu(3) + Container { + background: (theme === VisualStyle.Bright) ? Color.create("#e9e9e9") : Color.create("#282828") + WebImageView { + //imageSource: "asset:///icons/laughing_man.png" + url: user.content.avatar_image.link + maxHeight: ui.du(14) + maxWidth: ui.du(14) + } + } + Container { + leftPadding: ui.sdu(3) + rightPadding: ui.sdu(3) + horizontalAlignment: HorizontalAlignment.Fill + //background: (theme === VisualStyle.Bright) ? Color.create("#e9e9e9") : Color.create("#282828") + Container { + Label { + //text: "Morgan McMillian" + text: user.name + textStyle.fontWeight: FontWeight.Bold + textStyle.fontSize: FontSize.Large + + } + } + Container { + Label { + //text: "thrrgilag" + text: user.username + textStyle.fontSize: FontSize.Medium + + } + + } + } + + } + + } + Container { + topPadding: ui.sdu(3) + leftPadding: ui.sdu(3) + layout: DockLayout {} + horizontalAlignment: HorizontalAlignment.Fill + Container { + Label { + //text: "Bio goes here." + text: user.content.text + multiline: true + } + } + Container { + horizontalAlignment: HorizontalAlignment.Right + rightPadding: ui.sdu(3) + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + horizontalAlignment: HorizontalAlignment.Right + Label { + text: qsTr("Following") + + } + Label { + text: user.counts.following + } + } + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + horizontalAlignment: HorizontalAlignment.Right + Label { + text: qsTr("Followers") + + } + Label { + text: user.counts.followers + } + } + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + horizontalAlignment: HorizontalAlignment.Right + Label { + text: qsTr("Posts") + + } + Label { + text: user.counts.posts + } + } + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + horizontalAlignment: HorizontalAlignment.Right + Label { + text: qsTr("Bookmarks") + + } + Label { + text: user.counts.bookmarks + } + } + } + + } + + } + + actions: [ + ActionItem { + title: (user.you_follow) ? qsTr("Unfollow") : qsTr("Follow") + ActionBar.placement: ActionBarPlacement.OnBar + onTriggered: { + if (user.you_follow) { + unfollow(user.id) + } else { + follow(user.id) + } + } + imageSource: (user.you_follow) ? "asset:///icons/ic_cancel.png" : "asset:///icons/ic_add.png" + } + ] +} diff --git a/assets/StreamTab.qml b/assets/StreamTab.qml index 7b943da..44ba7fa 100644 --- a/assets/StreamTab.qml +++ b/assets/StreamTab.qml @@ -51,6 +51,14 @@ NavigationPane { pnut.getThread(postModel.data(indexPath).thread_id); nav.push(page); } + function viewProfile(userobj) { + console.log("narf: " + JSON.stringify(userobj)) + var page = profilePage.createObject(); + page.user = userobj + page.follow.connect(pnut.followUser) + page.unfollow.connect(pnut.unfollowUser) + nav.push(page); + } function sendReply(text, pid) { pnut.sendReply(text, pid); } @@ -79,7 +87,7 @@ NavigationPane { newPostSheet.open(); newPostSheet.input.requestFocus(); } - imageSource: "asset:///icons/ic_add.png" + imageSource: "asset:///icons/ic_compose.png" }, ActionItem { title: qsTr("Load Newer") @@ -117,6 +125,10 @@ NavigationPane { id: threadPage source: "ThreadPage.qml" }, + ComponentDefinition { + id: profilePage + source: "ProfilePage.qml" + }, NewPostSheet { id: newPostSheet onSendPost: { @@ -143,12 +155,12 @@ NavigationPane { onStreamReceived: { switch (rtype) { case Pnut.STREAM_OLDER: - streamView.scrollToPosition(ScrollPosition.End, ScrollAnimation.None); + //streamView.scrollToPosition(ScrollPosition.End, ScrollAnimation.None); postModel.append(stream); break; case Pnut.STREAM_NEWER: postModel.insert(0, stream); - streamView.scrollToPosition(ScrollPosition.Beginning, ScrollAnimation.None); + //streamView.scrollToPosition(ScrollPosition.Beginning, ScrollAnimation.None); break; } pnut.beforeId = postModel.value(postModel.size() - 1).id; diff --git a/assets/icons/default_cover.png b/assets/icons/default_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..220c85972cfe57dc7bc2ebbbe40a1fa02ba6ad3b GIT binary patch literal 25459 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 literal 0 HcmV?d00001 diff --git a/assets/icons/ic_cancel.png b/assets/icons/ic_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..0780b21586fea4e88f3ed2add8b9dcc750b3970c GIT binary patch literal 2524 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"username"); emit authorizationRequired(); } + else if (endpoint == ":follow") + { + qDebug() << "Follow successful!"; + req_map.remove(id); + emit followSuccess(data); + } + else if (endpoint == ":unfollow") + { + qDebug() << "Unfollow successful!"; + req_map.remove(id); + emit unfollowSuccess(data); + } + else { + qDebug() << "GOT SOMETHING NEW!"; + qDebug() << endpoint; + } break; } case Pnut::CREATED: @@ -356,3 +372,19 @@ void Pnut::logout() req_map[++req_id] = ":logout"; deleteRequest(url, parameters, req_id); } + +void Pnut::followUser(QString uid) +{ + QUrl url(PNUT_API_ROOT + "/users/" + uid + "/follow"); + KQOAuthParameters parameters; + req_map[++req_id] = ":follow"; + putRequest(url, parameters, req_id); +} + +void Pnut::unfollowUser(QString uid) +{ + QUrl url(PNUT_API_ROOT + "/users/" + uid + "/follow"); + KQOAuthParameters parameters; + req_map[++req_id] = ":unfollow"; + deleteRequest(url, parameters, req_id); +} diff --git a/src/Pnut.h b/src/Pnut.h index e856cc5..d53e436 100644 --- a/src/Pnut.h +++ b/src/Pnut.h @@ -70,6 +70,8 @@ public: Q_INVOKABLE void sendPost(QString text); Q_INVOKABLE void sendReply(QString text, int pid); Q_INVOKABLE void getUser(QString uid); + Q_INVOKABLE void followUser(QString uid); + Q_INVOKABLE void unfollowUser(QString uid); Q_INVOKABLE void getUserInfo(); Q_INVOKABLE void getThread(QString pid); Q_INVOKABLE void setBookmark(QString pid); @@ -88,6 +90,8 @@ Q_SIGNALS: void authorizationReceived(); void streamReceived(QVariantList stream, Pnut::RequestType rtype); void threadReceived(QVariantList thread); + void followSuccess(QByteArray user); + void unfollowSuccess(QByteArray user); private: static const QString PNUT_API_ROOT; diff --git a/translations/Goober.ts b/translations/Goober.ts index ddbb1f1..9b72508 100644 --- a/translations/Goober.ts +++ b/translations/Goober.ts @@ -30,41 +30,74 @@ PostItem - + Reply - + Reply All - + Add Bookmark - + Delete Bookmark - + Repost - + Delete Repost - + Quote + + ProfilePage + + + Following + + + + + Followers + + + + + Posts + + + + + Bookmarks + + + + + Unfollow + + + + + Follow + + + RefreshItem @@ -76,22 +109,22 @@ StreamTab - + New Post - + Load Newer - + Reload - + Load Older