diff --git a/index.html b/index.html index 258288b..a1af88b 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,16 @@ - - - - - + + + Open Chess + + + + + + + - - - Vite App
+ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..002fc2d Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000..b3930d0 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..9b1aa73 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..e177c36 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..9aef431 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png new file mode 100644 index 0000000..b6793dc Binary files /dev/null and b/public/mstile-150x150.png differ diff --git a/public/pwa-192x192.png b/public/pwa-192x192.png index cd3ee45..a5e3952 100644 Binary files a/public/pwa-192x192.png and b/public/pwa-192x192.png differ diff --git a/public/pwa-512x512.png b/public/pwa-512x512.png index 200cb73..c1ae31d 100644 Binary files a/public/pwa-512x512.png and b/public/pwa-512x512.png differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..14267e9 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / \ No newline at end of file diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 0000000..b0d0491 --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,122 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..7983c08 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/pwa-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/pwa-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/src/components/InvitePlayers.vue b/src/components/InvitePlayers.vue index 000727f..0947a21 100644 --- a/src/components/InvitePlayers.vue +++ b/src/components/InvitePlayers.vue @@ -67,6 +67,8 @@ import { getFriends, getFriendRequest, createGameWithCurrent, + checkFriendRequest, + FriendRequestStatus, } from "../util/parse" export default { @@ -86,6 +88,7 @@ export default { }, async mounted() { await this.updateFriends() + await checkFriendRequest() }, methods: { async addFriendClickHander(ev) { @@ -116,9 +119,8 @@ export default { const newFriends = await getFriends() if (newFriends && newFriends.length > 0) this.friends = newFriends - const friends_requests = await getFriendRequest(user) - // request Friends - const friendRequestIds = friends_requests.map(request => request.objectId) + const friends_requests = await getFriendRequest(user, FriendRequestStatus.pending) + // set friendsequests if (friends_requests) this.friendRequests = friends_requests } }, diff --git a/src/main.ts b/src/main.ts index e439382..9e0a233 100644 --- a/src/main.ts +++ b/src/main.ts @@ -151,8 +151,6 @@ const store = createStore({ }) const app = createApp(App) -console.log(process.env.NODE_ENV) - if (process.env.NODE_ENV === "production") { Sentry.init({ app, diff --git a/src/registerSW.js b/src/registerSW.js new file mode 100644 index 0000000..d42ac9e --- /dev/null +++ b/src/registerSW.js @@ -0,0 +1 @@ +if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/sw.js', { scope: '/' })})} \ No newline at end of file diff --git a/src/util/parse.ts b/src/util/parse.ts index dfa30de..1e20759 100644 --- a/src/util/parse.ts +++ b/src/util/parse.ts @@ -29,7 +29,6 @@ export interface SingeUpUserData { } // Parse interfaces - export interface ParseObject { id: string get?: (varName: string) => any | any[] @@ -37,6 +36,7 @@ export interface ParseObject { add?: (varName: string, varValue: any) => void relation?: (relationName: string) => any save?: () => Promise + destroy?: () => Promise new (): any [index: string]: string | number | undefined | ((index?: string, index2?: any) => any) } @@ -51,7 +51,9 @@ export interface ParseGame extends ParseObject { getUserColor?: (id: string) => ChessColor } -export interface ParseFriendRequest extends ParseObject {} +export interface ParseFriendRequest extends ParseObject { + getFriend: () => false | ParseUser +} /** * Initalises the Parse connection and adds default Object @@ -102,7 +104,7 @@ function createParseGameObject() { function createParseFriendRequestObject(): ParseFriendRequest { return Parse.Object.extend("FriendRequests", { - getFriend(): false | any { + getFriend(): false | ParseUser { const current = getCurrentUser() const from = this.get("fromUser") const to = this.get("toUser") @@ -380,13 +382,11 @@ export async function answerFriendRequest( "status", acceptRequest ? FriendRequestStatus.accepted : FriendRequestStatus.rejected ) - // update user - const userFriends = currentUser.relation("friends") - userFriends.add(friend) try { await friendRequest.save() - await currentUser.save() + // update user + await addFriend(friend) return true } catch (error) { @@ -406,21 +406,19 @@ export async function answerFriendRequest( */ export async function getFriendRequest( toUser: ParseUser, - fromUser?: ParseUser -): Promise { + filter?: FriendRequestStatus +): Promise { const friendRequest = createParseFriendRequestObject() const requestObject = new friendRequest() // query const toQuery = new Parse.Query(requestObject) toQuery.equalTo("toUser", toUser) - toQuery.equalTo("status", FriendRequestStatus.pending) - if (!_.isUndefined(fromUser)) toQuery.equalTo("fromUser", fromUser) + if (!_.isUndefined(filter)) toQuery.equalTo("status", filter) const fromQuery = new Parse.Query(requestObject) fromQuery.equalTo("fromUser", toUser) - fromQuery.equalTo("status", FriendRequestStatus.pending) - if (!_.isUndefined(fromUser)) toQuery.equalTo("toUser", fromUser) + if (!_.isUndefined(filter)) fromQuery.equalTo("status", filter) const query = Parse.Query.or(toQuery, fromQuery) query.include(["toUser", "fromUser"]) @@ -450,39 +448,69 @@ export async function getFriends(): Promise { return false } -export async function currentFriendRequests(): Promise { - const current = getCurrentUser() - const query = new Parse.Query(Parse.User) - const friendQuery = new Parse.Query(Parse.User) +export async function addFriend(friend: ParseUser): Promise { + const currentUser = getCurrentUser() - if (current) { - const currentFriends = await getFriends() + if (currentUser) { + const friendRel = currentUser.relation("friends") + friendRel.add(friend) - if (currentFriends) { - // applie filter to Querys - friendQuery.equalTo("objectId", current.id) - query.matchesQuery("friends", friendQuery) - try { - let friendRequests = await query.find() - // const friendIds = friendRequests. - const removedFriends = _.remove(friendRequests, value => { - const currUserId = value.id - var returnValue = false - - currentFriends.map(friend => { - if (friend.id === currUserId) returnValue = true - return false - }) - - return returnValue + try { + await currentUser.save() + return true + } catch (error) { + console.error(error) + return false + } + } + return false +} + +export async function destroyFriendRequest(request: ParseFriendRequest): Promise { + try { + await request.destroy() + return true + } catch (error) { + console.error(error) + return false + } +} + +export async function checkFriendRequest(): Promise { + const currentUser = getCurrentUser() + const friends = await getFriends() + + if (currentUser && friends) { + const friendRequests = await getFriendRequest(currentUser) + const newFriendRequest = friendRequests.filter(request => { + const requestFriend = request.getFriend() + let add = true + + if (requestFriend) { + let id = requestFriend.id + friends.map(friend => { + if (friend.id === id) add = false }) + } - return friendRequests - } catch (error) { - console.error("error: ", error) - return false + return add + }) + + // checking all friendrequest for accepts or rejects + newFriendRequest.map(async friendRequest => { + const status = friendRequest.get("status") + const friend = friendRequest.getFriend() + + if (friend) { + if (status === FriendRequestStatus.accepted) { + await addFriend(friend) + await destroyFriendRequest(friendRequest) + } else if (status === FriendRequestStatus.rejected) + await destroyFriendRequest(friendRequest) } - } + }) + + return true } return false } diff --git a/vite.config.ts b/vite.config.ts index c10aaca..a9eddf7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,12 @@ import { VitePWA } from "vite-plugin-pwa" import replace from "@rollup/plugin-replace" import fs from "fs" +/** + mode: "development", + base: "/", + registerType: process.env.CLAIMS === "true" ? "autoUpdate" : undefined, +*/ + const config: UserConfig = { // base: process.env.BASE_URL || 'https://github.com/', build: { @@ -12,13 +18,11 @@ const config: UserConfig = { plugins: [ Vue(), VitePWA({ - mode: "development", - base: "/", - registerType: process.env.CLAIMS === "true" ? "autoUpdate" : undefined, - includeAssets: ["favicon.svg"], // <== don't add slash, for testing + includeAssets: ["favicon.svg", "favicon.ico", "robots.txt", "apple-touch-icon.png"], // <== don't add slash, for testing manifest: { name: "Open-Chess", short_name: "Open-Chess", + description: "Open Source Chess app", theme_color: "#ffffff", icons: [ {