2023-10-11 04:16:52 +02:00
|
|
|
import { Utils } from "../../Utils"
|
|
|
|
import Constants from "../../Models/Constants"
|
|
|
|
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
|
2023-10-24 22:01:10 +02:00
|
|
|
import { Store } from "../../Logic/UIEventSource"
|
2023-10-11 04:16:52 +02:00
|
|
|
|
|
|
|
export default class StudioServer {
|
2023-10-13 18:46:56 +02:00
|
|
|
private readonly url: string
|
2023-10-24 22:01:10 +02:00
|
|
|
private readonly _userId: Store<number>
|
2023-10-11 04:16:52 +02:00
|
|
|
|
2023-10-24 22:01:10 +02:00
|
|
|
constructor(url: string, userId: Store<number>) {
|
2023-10-13 18:46:56 +02:00
|
|
|
this.url = url
|
2023-10-24 22:01:10 +02:00
|
|
|
this._userId = userId
|
2023-10-11 04:16:52 +02:00
|
|
|
}
|
|
|
|
|
2023-10-26 13:58:45 +02:00
|
|
|
public async fetchOverview(): Promise<
|
2023-10-24 22:01:10 +02:00
|
|
|
{
|
|
|
|
id: string
|
|
|
|
owner: number
|
2023-10-26 13:58:45 +02:00
|
|
|
category: "layers" | "themes"
|
2023-10-24 22:01:10 +02:00
|
|
|
}[]
|
|
|
|
> {
|
|
|
|
const uid = this._userId.data
|
|
|
|
let uidQueryParam = ""
|
|
|
|
if (this._userId.data !== undefined) {
|
|
|
|
uidQueryParam = "?userId=" + uid
|
|
|
|
}
|
2023-10-11 04:16:52 +02:00
|
|
|
const { allFiles } = <{ allFiles: string[] }>(
|
2023-10-24 22:01:10 +02:00
|
|
|
await Utils.downloadJson(this.url + "/overview" + uidQueryParam)
|
2023-10-11 04:16:52 +02:00
|
|
|
)
|
2023-10-24 22:01:10 +02:00
|
|
|
const layerOverview: {
|
|
|
|
id: string
|
|
|
|
owner: number | undefined
|
2023-10-26 13:58:45 +02:00
|
|
|
category: "layers" | "themes"
|
2023-10-24 22:01:10 +02:00
|
|
|
}[] = []
|
|
|
|
for (let file of allFiles) {
|
|
|
|
let owner = undefined
|
|
|
|
if (file.startsWith("" + uid)) {
|
|
|
|
owner = uid
|
|
|
|
file = file.substring(file.indexOf("/") + 1)
|
|
|
|
}
|
2023-10-26 13:58:45 +02:00
|
|
|
const category = <"layers" | "themes">file.substring(0, file.indexOf("/"))
|
2023-10-24 22:01:10 +02:00
|
|
|
const id = file.substring(file.lastIndexOf("/") + 1, file.length - ".json".length)
|
|
|
|
if (Constants.priviliged_layers.indexOf(<any>id) > 0) {
|
|
|
|
continue
|
|
|
|
}
|
2023-10-26 13:58:45 +02:00
|
|
|
layerOverview.push({ id, owner, category })
|
2023-10-24 22:01:10 +02:00
|
|
|
}
|
|
|
|
return layerOverview
|
2023-10-11 04:16:52 +02:00
|
|
|
}
|
|
|
|
|
2023-10-26 13:58:45 +02:00
|
|
|
async fetch(layerId: string, category: "layers" | "themes"): Promise<LayerConfigJson> {
|
2023-10-11 04:16:52 +02:00
|
|
|
try {
|
2023-10-26 13:58:45 +02:00
|
|
|
return await Utils.downloadJson(this.urlFor(layerId, category))
|
2023-10-11 04:16:52 +02:00
|
|
|
} catch (e) {
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
}
|
2023-10-13 18:46:56 +02:00
|
|
|
|
2023-10-26 13:58:45 +02:00
|
|
|
async update(id: string, config: string, category: "layers" | "themes") {
|
2023-10-13 18:46:56 +02:00
|
|
|
if (id === undefined || id === "") {
|
|
|
|
return
|
|
|
|
}
|
2023-10-26 13:58:45 +02:00
|
|
|
await fetch(this.urlFor(id, category), {
|
2023-10-13 18:46:56 +02:00
|
|
|
method: "POST",
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
|
|
},
|
2023-10-24 22:01:10 +02:00
|
|
|
body: config,
|
2023-10-13 18:46:56 +02:00
|
|
|
})
|
|
|
|
}
|
2023-10-16 15:06:50 +02:00
|
|
|
|
|
|
|
public layerUrl(id: string) {
|
2023-10-26 13:58:45 +02:00
|
|
|
return this.urlFor(id, "layers")
|
|
|
|
}
|
|
|
|
|
|
|
|
public urlFor(id: string, category: "layers" | "themes") {
|
2023-10-24 22:01:10 +02:00
|
|
|
const uid = this._userId.data
|
|
|
|
const uidStr = uid !== undefined ? "/" + uid : ""
|
2023-10-26 13:58:45 +02:00
|
|
|
return `${this.url}${uidStr}/${category}/${id}/${id}.json`
|
2023-10-16 15:06:50 +02:00
|
|
|
}
|
2023-10-11 04:16:52 +02:00
|
|
|
}
|