diff --git a/package-lock.json b/package-lock.json index 31353c1..db527b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@sveltestrap/sveltestrap": "^6.2.4", "@themesberg/flowbite": "^1.3.0", "cropperjs": "^1.6.2", + "date-fns": "^3.6.0", "sass": "^1.70.0", "socket.io": "^4.7.5", "socket.io-client": "^4.7.5", @@ -1626,6 +1627,15 @@ "type": "^1.0.1" } }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", diff --git a/package.json b/package.json index e6b34b2..bbf404b 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@sveltestrap/sveltestrap": "^6.2.4", "@themesberg/flowbite": "^1.3.0", "cropperjs": "^1.6.2", + "date-fns": "^3.6.0", "sass": "^1.70.0", "socket.io": "^4.7.5", "socket.io-client": "^4.7.5", diff --git a/src/app.html b/src/app.html index 4d84bd6..2bd8b1c 100644 --- a/src/app.html +++ b/src/app.html @@ -87,7 +87,15 @@ background: transparent; border: 0; height: 10%; + transition: 0.15s ease-in; } + + button:disabled{ + color: rgba(255, 255, 255, 0.329); + text-shadow: 0 0 20px rgba(0, 0, 0, 0.322); + } + + button, select, option { @@ -169,5 +177,16 @@ border-radius: 15px; } + .backgroundBlur{ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(10px); + z-index: 4; + } + diff --git a/src/lib/chat.js b/src/lib/chat.js index 7f1e302..7fdc3de 100644 --- a/src/lib/chat.js +++ b/src/lib/chat.js @@ -1,4 +1,7 @@ - export async function getLastMessages(chatId,msgLoaded){ +// import formatDistanceToNow from 'date-fns/formatDistanceToNow'; +// import ruLocale from 'date-fns/locale/ru'; + +export async function getLastMessages(chatId,msgLoaded){ let token = localStorage.getItem('BPChat') const response = await fetch(`https://docs.black-phoenix.ru/api/chat/get_some_messages/${chatId}?messages_loaded=${msgLoaded}&messages_to_get=15`, @@ -20,12 +23,16 @@ } else{ msgMassive.reverse(); - let utc = msgMassive[0].created_at - console.log(utc) - let newutc = new Date(utc) - console.log(utc) - console.log(newutc) - + + // for(let i = 0; i < msgMassive.length; i++){ + // let utc = msgMassive[i].created_at + // let newutc = new Date(utc) + // //console.log(utc) + // const formattedDate = formatDistanceToNow(new Date(newutc), { addSuffix: true, locale: ruLocale }); + // //console.log(newutc) + // console.log(formattedDate) + // msgMassive[i].created_at = formattedDate + // } return msgMassive } } @@ -175,4 +182,58 @@ console.log(response); } } - \ No newline at end of file + + export async function getAllUsers(nameToFind){ + + const response = await fetch(`https://docs.black-phoenix.ru/api/users?username=${nameToFind}`,{ + method:"GET", + credentials:'include' + }) + + if(response.ok){ + let data = await response.json() + let anotherData = data.users + + if(anotherData == null){ + return [] + } + return data.users + } + + } + + export async function createNewChat(chatName, excludeUser, token){ + console.log(token, "token") + const response = await fetch(`https://docs.black-phoenix.ru/api/chat/create_chat?user_to_exclude=${excludeUser}&chat_name=${chatName}`,{ + method: 'POST', + credentials: 'include', + headers: {'Authorization': token }, + }) + + if(response.ok){ + let data = await response.json() + let id = data.chat_id + return id + } + else{ + console.log(response) + } + + } + + export async function deleteChat(chatId, token){ + + const response = await fetch(`https://docs.black-phoenix.ru/api/chat/delete_chat/${chatId}`,{ + method: 'DELETE', + credentials: 'include', + headers: {'Authorization': token }, + }) + + if(response.ok){ + return "Чат удален" + } + + else{ + console.log(response) + } + } \ No newline at end of file diff --git a/src/lib/websocket.js b/src/lib/websocket.js index 30e4e87..5cb802d 100644 --- a/src/lib/websocket.js +++ b/src/lib/websocket.js @@ -1,89 +1,46 @@ -// import io from 'socket.io-client'; +export default function createWebSocket(url, token, onMessageCallback, maxRetries = 10) { + let socket; + let retries = 0; + let messageQueue = []; + token = token.split(" ")[1]; -// export default function createWebSocket(url, token, onMessageCallback) { -// const socket = io(url, { -// auth: { -// token: "123" -// }, -// //withCredentials: true, -// }); + function connect() { + socket = new WebSocket(url, [token]); -// socket.on('message', (message) => { -// console.log('Получено сообщение:', message); -// }); - -// function sendMessage(message) { -// socket.emit('message', message); -// } - -// return socket; -// } + socket.addEventListener('message', (event) => { + const jsonData = JSON.parse(event.data) + onMessageCallback(jsonData) + }); -// export default function createWebSocket(url, token , onMessageCallback) { + socket.onopen = () => { + console.log('WebSocket is open now.') + retries = 0 //сброс попыток -// const socket = new WebSocket(url, { -// headers:{ Authorization: token } -// }) - -// socket.addEventListener('message', (event) => { -// const jsonData = JSON.parse(event.data); -// onMessageCallback(jsonData); -// //console.log(jsonData) -// }); - -// return socket; -// } + while (messageQueue.length > 0) { + socket.send(messageQueue.shift()); + } + }; -// import SockJS from 'sockjs-client'; + socket.onclose = (event) => { + console.log('WebSocket is closed now.', event) + if (retries < maxRetries) { + retries++ + const timeout = Math.min(1000 * Math.pow(2, retries), 30000) + setTimeout(() => { + console.log(`Reconnecting... attempt ${retries}`) + connect() + }, timeout) + } else { + console.log('Max retries reached. Could not reconnect.') + } + }; -// export default function createWebSocket(url,token , onMessageCallback) { -// const sock = new SockJS(url, null, { -// headers: { -// 'Authorization': token -// } -// }); + socket.onerror = (error) => { + console.error('WebSocket error observed:', error) + }; + } -// //socket.onmessage = (event) => { -// // const jsonData = JSON.parse(event.data); -// // onMessageCallback(jsonData); -// // //console.log(jsonData) -// //}; + connect() -// sock.onopen = function() { -// console.log('open'); -// sock.send('test'); -// }; - -// sock.onmessage = function(e) { -// console.log('message', e.data); -// sock.close(); -// }; - -// sock.onclose = function() { -// console.log('close'); -// }; - -// return sock; -// } - -export default function createWebSocket(url, token, onMessageCallback) { - token = token.split(" ")[1] - //console.log(token) - const socket = new WebSocket(url, [token]) - - socket.addEventListener('message', (event) => { - const jsonData = JSON.parse(event.data); - onMessageCallback(jsonData); - //console.log(jsonData)S - }); - - socket.onopen = (event) => { - console.log('WebSocket is open now.'); - }; - - socket.addEventListener('close', (event) =>{ - console.log(event) - }) - - return socket; - } \ No newline at end of file + return socket +} diff --git a/src/routes/Header.svelte b/src/routes/Header.svelte index b82b664..b785c55 100644 --- a/src/routes/Header.svelte +++ b/src/routes/Header.svelte @@ -1,4 +1,6 @@ - +
лого @@ -38,8 +40,8 @@
аватарка
- {#if isOpen} -