diff --git a/src/components/Chat/AnnouncementDiscussion.tsx b/src/components/Chat/AnnouncementDiscussion.tsx
index cc6af24..5603de0 100644
--- a/src/components/Chat/AnnouncementDiscussion.tsx
+++ b/src/components/Chat/AnnouncementDiscussion.tsx
@@ -6,7 +6,7 @@ import { objectToBase64 } from "../../qdn/encryption/group-encryption";
import ShortUniqueId from "short-unique-id";
import { LoadingSnackbar } from "../Snackbar/LoadingSnackbar";
import { getBaseApi, getFee } from "../../background";
-import { decryptPublishes, getTempPublish, saveTempPublish } from "./GroupAnnouncements";
+import { decryptPublishes, getTempPublish, handleUnencryptedPublishes, saveTempPublish } from "./GroupAnnouncements";
import { AnnouncementList } from "./AnnouncementList";
import { Spacer } from "../../common/Spacer";
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
@@ -22,7 +22,8 @@ export const AnnouncementDiscussion = ({
secretKey,
setSelectedAnnouncement,
show,
- myName
+ myName,
+ isPrivate
}) => {
const [isSending, setIsSending] = useState(false);
const [isLoading, setIsLoading] = useState(false);
@@ -49,7 +50,7 @@ export const AnnouncementDiscussion = ({
}
};
- const getData = async ({ identifier, name }) => {
+ const getData = async ({ identifier, name }, isPrivate) => {
try {
const res = await fetch(
@@ -57,7 +58,7 @@ export const AnnouncementDiscussion = ({
);
if(!res?.ok) return
const data = await res.text();
- const response = await decryptPublishes([{ data }], secretKey);
+ const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey);
const messageData = response[0];
setData((prev) => {
@@ -132,10 +133,10 @@ export const AnnouncementDiscussion = ({
extra: {},
message: htmlContent,
};
- const secretKeyObject = await getSecretKey(false, true);
- const message64: any = await objectToBase64(message);
+ const secretKeyObject = isPrivate === false ? null : await getSecretKey(false, true);
+ const message64: any = await objectToBase64(message);
- const encryptSingle = await encryptChatMessage(
+ const encryptSingle = isPrivate === false ? message64 : await encryptChatMessage(
message64,
secretKeyObject
);
@@ -169,7 +170,7 @@ export const AnnouncementDiscussion = ({
};
const getComments = React.useCallback(
- async (selectedAnnouncement) => {
+ async (selectedAnnouncement, isPrivate) => {
try {
setIsLoading(true);
@@ -190,7 +191,7 @@ export const AnnouncementDiscussion = ({
setComments(responseData);
setIsLoading(false);
for (const data of responseData) {
- getData({ name: data.name, identifier: data.identifier });
+ getData({ name: data.name, identifier: data.identifier }, isPrivate);
}
} catch (error) {
} finally {
@@ -220,7 +221,7 @@ export const AnnouncementDiscussion = ({
setComments((prev)=> [...prev, ...responseData]);
setIsLoading(false);
for (const data of responseData) {
- getData({ name: data.name, identifier: data.identifier });
+ getData({ name: data.name, identifier: data.identifier }, isPrivate);
}
} catch (error) {
@@ -245,11 +246,12 @@ export const AnnouncementDiscussion = ({
}, [tempPublishedList, comments]);
React.useEffect(() => {
- if (selectedAnnouncement && secretKey && !firstMountRef.current) {
- getComments(selectedAnnouncement);
+ if(!secretKey && isPrivate) return
+ if (selectedAnnouncement && !firstMountRef.current && isPrivate !== null) {
+ getComments(selectedAnnouncement, isPrivate);
firstMountRef.current = true
}
- }, [selectedAnnouncement, secretKey]);
+ }, [selectedAnnouncement, secretKey, isPrivate]);
return (
{
.then((response) => {
if (!response?.error) {
res(response);
- // if(hasInitialized.current){
- // setMessages((prev) => [...prev, ...formatted]);
- // } else {
- // const formatted = response.map((item) => ({
- // ...item,
- // id: item.signature,
- // text: item.text,
- // unread: false
- // }));
- // setMessages(formatted);
- // hasInitialized.current = true;
- // }
+
return;
}
rej(response.error);
@@ -117,6 +106,20 @@ export const decryptPublishes = async (encryptedMessages: any[], secretKey) => {
});
} catch (error) {}
};
+export const handleUnencryptedPublishes = (publishes) => {
+ let publishesData = []
+ publishes.forEach((pub)=> {
+ try {
+ const decodedData = JSON.parse(atob(pub))
+ if(decodedData){
+ publishesData.push({decryptedData: decodedData})
+ }
+ } catch (error) {
+
+ }
+ })
+ return publishesData
+};
export const GroupAnnouncements = ({
selectedGroup,
secretKey,
@@ -127,6 +130,7 @@ export const GroupAnnouncements = ({
isAdmin,
hide,
myName,
+ isPrivate
}) => {
const [messages, setMessages] = useState([]);
const [isSending, setIsSending] = useState(false);
@@ -160,7 +164,7 @@ export const GroupAnnouncements = ({
})();
}, [selectedGroup]);
- const getAnnouncementData = async ({ identifier, name, resource }) => {
+ const getAnnouncementData = async ({ identifier, name, resource }, isPrivate) => {
try {
let data = dataPublishes.current[`${name}-${identifier}`];
if (
@@ -180,9 +184,9 @@ export const GroupAnnouncements = ({
data = data.data;
}
- const response = await decryptPublishes([{ data }], secretKey);
-
+ const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey);
const messageData = response[0];
+ if(!messageData) return
setAnnouncementData((prev) => {
return {
...prev,
@@ -195,11 +199,11 @@ export const GroupAnnouncements = ({
};
useEffect(() => {
- if (!secretKey || hasInitializedWebsocket.current) return;
+ if ((!secretKey && isPrivate) || hasInitializedWebsocket.current || isPrivate === null) return;
setIsLoading(true);
// initWebsocketMessageGroup()
hasInitializedWebsocket.current = true;
- }, [secretKey]);
+ }, [secretKey, isPrivate]);
const encryptChatMessage = async (data: string, secretKeyObject: any) => {
try {
@@ -257,12 +261,12 @@ export const GroupAnnouncements = ({
}
};
- const setTempData = async () => {
+ const setTempData = async (selectedGroup) => {
try {
const getTempAnnouncements = await getTempPublish();
if (getTempAnnouncements?.announcement) {
let tempData = [];
- Object.keys(getTempAnnouncements?.announcement || {}).map((key) => {
+ Object.keys(getTempAnnouncements?.announcement || {}).filter((annKey)=> annKey?.startsWith(`grp-${selectedGroup}-anc`)).map((key) => {
const value = getTempAnnouncements?.announcement[key];
tempData.push(value.data);
});
@@ -289,9 +293,9 @@ export const GroupAnnouncements = ({
extra: {},
message: htmlContent,
};
- const secretKeyObject = await getSecretKey(false, true);
- const message64: any = await objectToBase64(message);
- const encryptSingle = await encryptChatMessage(
+ const secretKeyObject = isPrivate === false ? null : await getSecretKey(false, true);
+ const message64: any = await objectToBase64(message);
+ const encryptSingle = isPrivate === false ? message64 : await encryptChatMessage(
message64,
secretKeyObject
);
@@ -313,7 +317,7 @@ export const GroupAnnouncements = ({
data: dataToSaveToStorage,
key: "announcement",
});
- setTempData();
+ setTempData(selectedGroup);
clearEditorContent();
}
// send chat message
@@ -331,7 +335,7 @@ export const GroupAnnouncements = ({
};
const getAnnouncements = React.useCallback(
- async (selectedGroup) => {
+ async (selectedGroup, isPrivate) => {
try {
const offset = 0;
@@ -346,7 +350,7 @@ export const GroupAnnouncements = ({
});
const responseData = await response.json();
- setTempData();
+ setTempData(selectedGroup);
setAnnouncements(responseData);
setIsLoading(false);
for (const data of responseData) {
@@ -354,7 +358,7 @@ export const GroupAnnouncements = ({
name: data.name,
identifier: data.identifier,
resource: data,
- });
+ }, isPrivate);
}
} catch (error) {
} finally {
@@ -365,11 +369,12 @@ export const GroupAnnouncements = ({
);
React.useEffect(() => {
- if (selectedGroup && secretKey && !hasInitialized.current && !hide) {
- getAnnouncements(selectedGroup);
+ if(!secretKey && isPrivate) return
+ if (selectedGroup && !hasInitialized.current && !hide && isPrivate !== null) {
+ getAnnouncements(selectedGroup, isPrivate);
hasInitialized.current = true;
}
- }, [selectedGroup, secretKey, hide]);
+ }, [selectedGroup, secretKey, hide, isPrivate]);
const loadMore = async () => {
try {
@@ -389,7 +394,7 @@ export const GroupAnnouncements = ({
setAnnouncements((prev) => [...prev, ...responseData]);
setIsLoading(false);
for (const data of responseData) {
- getAnnouncementData({ name: data.name, identifier: data.identifier });
+ getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate);
}
} catch (error) {}
};
@@ -414,7 +419,7 @@ export const GroupAnnouncements = ({
getAnnouncementData({
name: data.name,
identifier: data.identifier,
- });
+ }, isPrivate);
} catch (error) {}
}
setAnnouncements(responseData);
@@ -429,7 +434,7 @@ export const GroupAnnouncements = ({
for (const data of newArray) {
try {
- getAnnouncementData({ name: data.name, identifier: data.identifier });
+ getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate);
} catch (error) {}
}
setAnnouncements((prev) => [...newArray, ...prev]);
@@ -449,14 +454,14 @@ export const GroupAnnouncements = ({
}, [checkNewMessages]);
useEffect(() => {
- if (!secretKey || hide) return;
+ if ((!secretKey && isPrivate) || hide || isPrivate === null) return;
checkNewMessagesFunc();
return () => {
if (interval?.current) {
clearInterval(interval.current);
}
};
- }, [checkNewMessagesFunc, hide]);
+ }, [checkNewMessagesFunc, hide, isPrivate]);
const combinedListTempAndReal = useMemo(() => {
// Combine the two lists
@@ -475,7 +480,6 @@ export const GroupAnnouncements = ({
return sortedList;
}, [tempPublishedList, announcements]);
-
if (selectedAnnouncement) {
return (
);
diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx
index 588015f..c4b302a 100644
--- a/src/components/Group/Group.tsx
+++ b/src/components/Group/Group.tsx
@@ -866,6 +866,17 @@ export const Group = ({
+ const getAdminsForPublic = async(selectedGroup)=> {
+ try {
+ const { names, addresses, both } =
+ await getGroupAdmins(selectedGroup?.groupId)
+ setAdmins(addresses);
+ setAdminsWithNames(both);
+ } catch (error) {
+ //error
+ }
+ }
+
useEffect(() => {
if (selectedGroup && isPrivate !== null) {
if(isPrivate){
@@ -877,6 +888,7 @@ export const Group = ({
}
if(isPrivate === false){
setTriedToFetchSecretKey(true);
+ getAdminsForPublic(selectedGroup)
}
}, [selectedGroup, isPrivate]);
@@ -2496,6 +2508,7 @@ export const Group = ({
}
myName={userInfo?.name}
hide={groupSection !== "announcement"}
+ isPrivate={isPrivate}
/>