78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from pathlib import Path
|
|
import sys
|
|
import os
|
|
import re
|
|
from deemix.utils import canWrite
|
|
|
|
homedata = Path.home()
|
|
userdata = ""
|
|
musicdata = ""
|
|
|
|
def checkPath(path):
|
|
if path == "": return ""
|
|
if not path.is_dir(): return ""
|
|
if not canWrite(path): return ""
|
|
return path
|
|
|
|
def getConfigFolder():
|
|
global userdata
|
|
if userdata != "": return userdata
|
|
if os.getenv("XDG_CONFIG_HOME") and userdata == "":
|
|
userdata = Path(os.getenv("XDG_CONFIG_HOME"))
|
|
userdata = checkPath(userdata)
|
|
if os.getenv("APPDATA") and userdata == "":
|
|
userdata = Path(os.getenv("APPDATA"))
|
|
userdata = checkPath(userdata)
|
|
if sys.platform.startswith('darwin') and userdata == "":
|
|
userdata = homedata / 'Library' / 'Application Support'
|
|
userdata = checkPath(userdata)
|
|
if userdata == "":
|
|
userdata = homedata / '.config'
|
|
userdata = checkPath(userdata)
|
|
|
|
if userdata == "": userdata = Path(os.getcwd()) / 'config'
|
|
else: userdata = userdata / 'deemix'
|
|
|
|
if os.getenv("DEEMIX_DATA_DIR"):
|
|
userdata = Path(os.getenv("DEEMIX_DATA_DIR"))
|
|
return userdata
|
|
|
|
def getMusicFolder():
|
|
global musicdata
|
|
if musicdata != "": return musicdata
|
|
if os.getenv("XDG_MUSIC_DIR") and musicdata == "":
|
|
musicdata = Path(os.getenv("XDG_MUSIC_DIR"))
|
|
musicdata = checkPath(musicdata)
|
|
if (homedata / '.config' / 'user-dirs.dirs').is_file() and musicdata == "":
|
|
with open(homedata / '.config' / 'user-dirs.dirs', 'r', encoding="utf-8") as f:
|
|
userDirs = f.read()
|
|
musicdata_search = re.search(r"XDG_MUSIC_DIR=\"(.*)\"", userDirs)
|
|
if musicdata_search:
|
|
musicdata = musicdata_search.group(1)
|
|
musicdata = Path(os.path.expandvars(musicdata))
|
|
musicdata = checkPath(musicdata)
|
|
if os.name == 'nt' and musicdata == "":
|
|
try:
|
|
musicKeys = ['My Music', '{4BD8D571-6D19-48D3-BE97-422220080E43}']
|
|
regData = os.popen(r'reg.exe query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"').read().split('\r\n')
|
|
for i, line in enumerate(regData):
|
|
if line == "": continue
|
|
if i == 1: continue
|
|
line = line.split(' ')
|
|
if line[1] in musicKeys:
|
|
musicdata = Path(line[3])
|
|
break
|
|
musicdata = checkPath(musicdata)
|
|
except Exception:
|
|
musicdata = ""
|
|
if musicdata == "":
|
|
musicdata = homedata / 'Music'
|
|
musicdata = checkPath(musicdata)
|
|
|
|
if musicdata == "": musicdata = Path(os.getcwd()) / 'music'
|
|
else: musicdata = musicdata / 'deemix Music'
|
|
|
|
if os.getenv("DEEMIX_MUSIC_DIR"):
|
|
musicdata = Path(os.getenv("DEEMIX_MUSIC_DIR"))
|
|
return musicdata
|