main
ts 32 lines 1.35 KB
Raw
1 // This file is part of HFS - Copyright 2021-2023, Massimo Melina <a@rejetto.com> - License https://www.gnu.org/licenses/gpl-3.0.txt
2
3 // utilities to pass a list of files via url
4
5 // not easy to find chars that are not allowed in file names both for windows and unix
6 const URL_LIST_SEPARATOR = '//'
7 const URL_LIST_SAME_FOLDER = '\0' // nul cannot be a valid file name char, and query encoding carries it as %00 without conflicting with path slashes
8
9 export function encodeUrlList(entries: string[]) {
10 let previousFolder = ''
11 return entries.map(entry => {
12 const slash = entry.lastIndexOf('/')
13 const folder = slash < 0 ? '' : entry.slice(0, slash + 1)
14 const name = slash < 0 ? entry : entry.slice(slash + 1)
15 if (folder && folder === previousFolder)
16 return URL_LIST_SAME_FOLDER + name
17 previousFolder = folder
18 return entry
19 }).join(URL_LIST_SEPARATOR)
20 }
21
22 export function decodeUrlList(list?: string) {
23 let previousFolder = ''
24 return list?.split(URL_LIST_SEPARATOR).map(entry => {
25 const sameFolder = entry.startsWith(URL_LIST_SAME_FOLDER)
26 if (sameFolder && previousFolder)
27 entry = previousFolder + entry.slice(URL_LIST_SAME_FOLDER.length)
28 const slash = entry.lastIndexOf('/')
29 previousFolder = slash < 0 ? '' : entry.slice(0, slash + 1)
30 return entry
31 })
32 }