267 lines
12 KiB
QML
267 lines
12 KiB
QML
import QtQuick 2.13
|
|
import QtQml.Models 2.2
|
|
|
|
import utils 1.0
|
|
|
|
QtObject {
|
|
id: root
|
|
|
|
property var communitiesModuleInst: communitiesModule
|
|
property var mainModuleInst: mainModule
|
|
|
|
readonly property var curatedCommunitiesModel: root.communitiesModuleInst.curatedCommunities
|
|
readonly property bool curatedCommunitiesLoading: root.communitiesModuleInst.curatedCommunitiesLoading
|
|
|
|
property var discordFileList: root.communitiesModuleInst.discordFileList
|
|
property var discordCategoriesModel: root.communitiesModuleInst.discordCategories
|
|
property var discordChannelsModel: root.communitiesModuleInst.discordChannels
|
|
property int discordOldestMessageTimestamp: root.communitiesModuleInst.discordOldestMessageTimestamp
|
|
property bool discordDataExtractionInProgress: root.communitiesModuleInst.discordDataExtractionInProgress
|
|
property int discordImportErrorsCount: root.communitiesModuleInst.discordImportErrorsCount
|
|
property int discordImportWarningsCount: root.communitiesModuleInst.discordImportWarningsCount
|
|
property int discordImportProgress: root.communitiesModuleInst.discordImportProgress
|
|
property bool discordImportInProgress: root.communitiesModuleInst.discordImportInProgress
|
|
property bool discordImportCancelled: root.communitiesModuleInst.discordImportCancelled
|
|
property bool discordImportProgressStopped: root.communitiesModuleInst.discordImportProgressStopped
|
|
property int discordImportProgressTotalChunksCount: root.communitiesModuleInst.discordImportProgressTotalChunksCount
|
|
property int discordImportProgressCurrentChunk: root.communitiesModuleInst.discordImportProgressCurrentChunk
|
|
property string discordImportCommunityId: root.communitiesModuleInst.discordImportCommunityId
|
|
property string discordImportCommunityName: root.communitiesModuleInst.discordImportCommunityName
|
|
property string discordImportChannelId: root.communitiesModuleInst.discordImportChannelId
|
|
property string discordImportChannelName: root.communitiesModuleInst.discordImportChannelName
|
|
property url discordImportCommunityImage: root.communitiesModuleInst.discordImportCommunityImage
|
|
property bool discordImportHasCommunityImage: root.communitiesModuleInst.discordImportHasCommunityImage
|
|
property var discordImportTasks: root.communitiesModuleInst.discordImportTasks
|
|
property bool downloadingCommunityHistoryArchives: root.communitiesModuleInst.downloadingCommunityHistoryArchives
|
|
property var advancedModule: profileSectionModule.advancedModule
|
|
|
|
readonly property bool createCommunityEnabled: localAppSettings.createCommunityEnabled ?? false
|
|
readonly property bool testEnvironment: localAppSettings.testEnvironment ?? false
|
|
|
|
// TODO: Could the backend provide directly 2 filtered models??
|
|
//property var featuredCommunitiesModel: root.communitiesModuleInst.curatedFeaturedCommunities
|
|
//property var popularCommunitiesModel: root.communitiesModuleInst.curatedPopularCommunities
|
|
property ListModel tagsModel: ListModel {}//root.notionsTagsModel
|
|
|
|
// TO DO: Complete list can be added in backend or here: https://www.notion.so/Category-tags-339b2e699e7c4d36ab0608ab00b99111
|
|
property ListModel notionsTagsModel : ListModel {
|
|
ListElement { name: "gaming"; emoji: "🎮"}
|
|
ListElement { name: "art"; emoji: "🖼️️"}
|
|
ListElement { name: "crypto"; emoji: "💸"}
|
|
ListElement { name: "nsfw"; emoji: "🍆"}
|
|
ListElement { name: "markets"; emoji: "💎"}
|
|
ListElement { name: "defi"; emoji: "📈"}
|
|
ListElement { name: "travel"; emoji: "🚁"}
|
|
ListElement { name: "web3"; emoji: "🗺"}
|
|
ListElement { name: "sport"; emoji: "🎾"}
|
|
ListElement { name: "food"; emoji: "🥑"}
|
|
ListElement { name: "enviroment"; emoji: "☠️"}
|
|
ListElement { name: "privacy"; emoji: "👻"}
|
|
}
|
|
|
|
property string communityTags: communitiesModuleInst.tags
|
|
|
|
signal importingCommunityStateChanged(string communityId, int state, string errorMsg)
|
|
|
|
signal communityInfoRequestCompleted(string communityId, string errorMsg)
|
|
|
|
function createCommunity(args = {
|
|
name: "",
|
|
description: "",
|
|
introMessage: "",
|
|
outroMessage: "",
|
|
color: "",
|
|
tags: "",
|
|
image: {
|
|
src: "",
|
|
AX: 0,
|
|
AY: 0,
|
|
BX: 0,
|
|
BY: 0,
|
|
},
|
|
options: {
|
|
historyArchiveSupportEnabled: false,
|
|
checkedMembership: false,
|
|
pinMessagesAllowedForMembers: false,
|
|
encrypted: false,
|
|
},
|
|
bannerJsonStr: ""
|
|
}) {
|
|
return communitiesModuleInst.createCommunity(
|
|
args.name, args.description, args.introMessage, args.outroMessage, args.options.checkedMembership,
|
|
args.color, args.tags,
|
|
args.image.src, args.image.AX, args.image.AY, args.image.BX, args.image.BY,
|
|
args.options.historyArchiveSupportEnabled, args.options.pinMessagesAllowedForMembers,
|
|
args.bannerJsonStr, args.options.encrypted);
|
|
}
|
|
|
|
function getCommunityPublicKeyFromPrivateKey(privateKey) {
|
|
return root.communitiesModuleInst.getCommunityPublicKeyFromPrivateKey(privateKey);
|
|
}
|
|
|
|
function requestCommunityInfo(communityKey, shardCluster, shardIndex, importing = false) {
|
|
const publicKey = Utils.isCompressedPubKey(communityKey)
|
|
? Utils.changeCommunityKeyCompression(communityKey)
|
|
: communityKey
|
|
if (importing)
|
|
root.mainModuleInst.setCommunityIdToSpectate(publicKey)
|
|
root.communitiesModuleInst.requestCommunityInfo(publicKey, shardCluster, shardIndex, importing)
|
|
}
|
|
|
|
property var communitiesList: communitiesModuleInst.model
|
|
readonly property bool requirementsCheckPending: communitiesModuleInst.requirementsCheckPending
|
|
|
|
function spectateCommunity(publicKey) {
|
|
root.communitiesModuleInst.spectateCommunity(publicKey, "");
|
|
}
|
|
|
|
function prepareTokenModelForCommunity(publicKey) {
|
|
root.communitiesModuleInst.prepareTokenModelForCommunity(publicKey);
|
|
}
|
|
|
|
function getCommunityDetails(communityId) {
|
|
const publicKey = Utils.isCompressedPubKey(communityId)
|
|
? Utils.changeCommunityKeyCompression(communityId)
|
|
: communityId
|
|
try {
|
|
const communityJson = root.communitiesList.getSectionByIdJson(publicKey)
|
|
if (!!communityJson)
|
|
return JSON.parse(communityJson)
|
|
} catch (e) {
|
|
console.error("Error parsing community", e)
|
|
}
|
|
return null
|
|
}
|
|
|
|
function getCommunityDetailsAsJson(communityId) {
|
|
const jsonObj = root.communitiesModuleInst.getCommunityDetails(communityId)
|
|
try {
|
|
return JSON.parse(jsonObj)
|
|
}
|
|
catch (e) {
|
|
console.warn("error parsing community by id: ", communityId, " error: ", e.message)
|
|
return {}
|
|
}
|
|
}
|
|
|
|
function setActiveCommunity(communityId) {
|
|
root.mainModuleInst.setActiveSectionById(communityId);
|
|
}
|
|
|
|
function navigateToCommunity(communityId) {
|
|
root.communitiesModuleInst.navigateToCommunity(communityId)
|
|
}
|
|
|
|
function removeFileListItem(filePath) {
|
|
root.communitiesModuleInst.removeFileListItem(filePath)
|
|
}
|
|
|
|
function setFileListItems(filePaths) {
|
|
root.communitiesModuleInst.setFileListItems(filePaths)
|
|
}
|
|
|
|
function clearFileList() {
|
|
root.communitiesModuleInst.clearFileList()
|
|
}
|
|
|
|
function requestExtractChannelsAndCategories() {
|
|
root.communitiesModuleInst.requestExtractDiscordChannelsAndCategories()
|
|
}
|
|
|
|
function clearDiscordCategoriesAndChannels() {
|
|
root.communitiesModuleInst.clearDiscordCategoriesAndChannels()
|
|
}
|
|
|
|
function toggleDiscordCategory(id, selected) {
|
|
root.communitiesModuleInst.toggleDiscordCategory(id, selected)
|
|
}
|
|
|
|
function toggleDiscordChannel(id, selected) {
|
|
root.communitiesModuleInst.toggleDiscordChannel(id, selected)
|
|
}
|
|
|
|
function toggleOneDiscordChannel(id) {
|
|
root.communitiesModuleInst.toggleOneDiscordChannel(id)
|
|
}
|
|
|
|
function requestCancelDiscordCommunityImport(id) {
|
|
root.communitiesModuleInst.requestCancelDiscordCommunityImport(id)
|
|
}
|
|
|
|
function requestCancelDiscordChannelImport(id) {
|
|
root.communitiesModuleInst.requestCancelDiscordChannelImport(id)
|
|
}
|
|
|
|
function resetImport() {
|
|
root.communitiesModuleInst.resetImport()
|
|
}
|
|
|
|
function removeImportedDiscordChannel() {
|
|
root.communitiesModuleInst.removeImportedDiscordChannel()
|
|
}
|
|
|
|
function resetDiscordImport() {
|
|
root.communitiesModuleInst.resetDiscordImport(false)
|
|
}
|
|
|
|
function requestImportDiscordCommunity(args = {
|
|
name: "",
|
|
description: "",
|
|
introMessage: "",
|
|
outroMessage: "",
|
|
color: "",
|
|
tags: "",
|
|
image: {
|
|
src: "",
|
|
AX: 0,
|
|
AY: 0,
|
|
BX: 0,
|
|
BY: 0,
|
|
},
|
|
options: {
|
|
historyArchiveSupportEnabled: false,
|
|
checkedMembership: false,
|
|
pinMessagesAllowedForMembers: false,
|
|
}
|
|
}, from = 0) {
|
|
return communitiesModuleInst.requestImportDiscordCommunity(
|
|
args.name, args.description, args.introMessage, args.outroMessage, args.options.checkedMembership,
|
|
args.color, args.tags,
|
|
args.image.src, args.image.AX, args.image.AY, args.image.BX, args.image.BY,
|
|
args.options.historyArchiveSupportEnabled, args.options.pinMessagesAllowedForMembers, from);
|
|
}
|
|
|
|
function requestImportDiscordChannel(args = {
|
|
communityId: "",
|
|
discordChannelId: "",
|
|
name: "",
|
|
description: "",
|
|
color: "",
|
|
emoji: "",
|
|
options: {
|
|
// TODO
|
|
}
|
|
}, from = 0) {
|
|
communitiesModuleInst.requestImportDiscordChannel(args.name, args.discordChannelId, args.communityId,
|
|
args.description, args.color, args.emoji, from)
|
|
}
|
|
|
|
function isDisplayNameDupeOfCommunityMember(displayName) {
|
|
if (displayName === "")
|
|
return false
|
|
|
|
return communitiesModuleInst.isDisplayNameDupeOfCommunityMember(displayName)
|
|
}
|
|
|
|
readonly property Connections connections: Connections {
|
|
target: communitiesModuleInst
|
|
function onImportingCommunityStateChanged(communityId, state, errorMsg) {
|
|
root.importingCommunityStateChanged(communityId, state, errorMsg)
|
|
}
|
|
|
|
function onCommunityInfoRequestCompleted(communityId, erorrMsg) {
|
|
root.communityInfoRequestCompleted(communityId, erorrMsg)
|
|
}
|
|
}
|
|
}
|