136 lines
6.7 KiB
Python
Executable File
136 lines
6.7 KiB
Python
Executable File
import io
|
|
import easywebdav
|
|
import json
|
|
from odoo.http import Controller, route, request
|
|
from webdav4.client import Client
|
|
from webdav4.fsspec import WebdavFileSystem
|
|
from typing import ( BinaryIO )
|
|
import logging
|
|
import base64
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class MyController(Controller):
|
|
|
|
@route('/my/webdav/files', auth='user', type='json')
|
|
def list_files(self,path):
|
|
client = WebdavFileSystem("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
files = client.ls(path, detail=True)
|
|
#client.upload_file("Gorilla.jpg", "Photos/Gorilla.jpg") webdav = easywebdav.connect(
|
|
_logger.info("webdav : "+str(files))
|
|
return files
|
|
# return [{'name': f.name, 'size': f.size} for f in files]
|
|
|
|
@route('/my/webdav/upload', auth='user', type='json', methods=['POST'])
|
|
def upload_file(self, path, filename, filedata):
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
filedata = filedata.split("base64,")[-1]
|
|
_logger.info('Als Byte : '+str(bytes(filedata, encoding='utf-8')))
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_in.temp', 'wb')
|
|
filedataStr=str(filedata)
|
|
_logger.info('Als String : '+str(filedataStr))
|
|
decoded_data = base64.b64decode(bytes(filedata, encoding='utf-8'))
|
|
try:
|
|
decoded_data = base64.b64decode(filedataStr)
|
|
except base64.binascii.Error as e:
|
|
if 'Incorrect padding' in str(e):
|
|
filedataStr += b'=' * (4 - len(filedataStr) % 4)
|
|
decoded_data = base64.b64decode(filedataStr)
|
|
infile.write(decoded_data)
|
|
infile.close()
|
|
_logger.info(str(f"{path}/{filename}") + str(base64.b64decode(decoded_data)))
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_in.temp', 'rb')
|
|
client.upload_fileobj(infile, f"{path}/{filename}")
|
|
_logger.info(f"File {filename} uploaded to {path}")
|
|
return True
|
|
|
|
@route('/my/webdav/getfile', auth='user', type='json')
|
|
def get_file(self,path,filename):
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
#files = client.cp('dav://'+path+'/'+filename,'/opt/odoo/addons/DigitalSignage/temp/'+filename)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp.temp', 'wb')
|
|
files = client.download_fileobj(path+'/'+filename,infile)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp.temp', 'rb')
|
|
indata = infile.read()
|
|
_logger.info("webdav : "+str(indata))
|
|
encoded_file = base64.b64encode(indata)
|
|
#client.upload_file("Gorilla.jpg", "Photos/Gorilla.jpg") webdav = easywebdav.connect(
|
|
_logger.info("webdav : "+str(encoded_file))
|
|
return encoded_file
|
|
# return [{'name': f.name, 'size': f.size} for f in files]
|
|
|
|
@route('/my/webdav/makefolder', auth='user', type='json', methods=['POST'])
|
|
def make_folder(self, path, folder_name):
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
folder_path = f"{path}/{folder_name}"
|
|
try:
|
|
client.mkdir(folder_path)
|
|
_logger.info(f"Folder {folder_name} created at {path}")
|
|
return {"success": True, "message": f"Folder {folder_name} created at {path}"}
|
|
except Exception as e:
|
|
_logger.error(f"Error creating folder {folder_name} at {path}: {str(e)}")
|
|
return {"success": False, "message": f"Error creating folder: {str(e)}"}
|
|
|
|
@route('/my/webdav/deletefile', auth='user', type='json')
|
|
def delete_file(self,filename):
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
#files = client.cp('dav://'+path+'/'+filename,'/opt/odoo/addons/DigitalSignage/temp/'+filename)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp.temp', 'wb')
|
|
files = client.remove(filename)
|
|
return True
|
|
# return [{'name': f.name, 'size': f.size} for f in files]
|
|
|
|
|
|
@route('/dss/getscreendata', type='json', auth='user')
|
|
def getscreendata(self, Domain):
|
|
# Tu was mit den Daten
|
|
screendef =[]
|
|
return screendef
|
|
|
|
@route('/dss/setbtnfile', type='json', auth='user')
|
|
def setbtnfile(self, contract,filename):
|
|
contract = request.env['dss.contracts'].search([('id', '=', contract)])
|
|
if len(contract.werbe_feld_selected) == 1:
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
#files = client.cp('dav://'+path+'/'+filename,'/opt/odoo/addons/DigitalSignage/temp/'+filename)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_set.temp', 'wb')
|
|
files = client.download_fileobj(filename,infile)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_set.temp', 'rb')
|
|
indata = infile.read()
|
|
encoded_file = base64.b64encode(indata)
|
|
_logger.info('JS : SetBtn File'+str(contract))
|
|
for feld in contract.werbe_feld_selected:
|
|
feld.btn_image = filename
|
|
feld.btn_image_bin = encoded_file
|
|
res = True
|
|
else:
|
|
res = "MULTI/"
|
|
ids = ""
|
|
for feld in contract.werbe_feld_selected:
|
|
res += feld.feldname
|
|
ids += str(feld.id)
|
|
if feld != contract.werbe_feld_selected[-1]:
|
|
ids += ':'
|
|
res += ':'
|
|
res += "/"+ids
|
|
return res
|
|
|
|
@route('/dss/setbtnfilefeld', type='json', auth='user')
|
|
def setbtnfilefeld(self, contract,filename,feldid):
|
|
feldids = feldid.split(':')
|
|
client = Client("https://cloud.logumedia.de/remote.php/dav/files/OdooDav/", auth=("odooClient@logumedia.de", "lm2020#OdooDav"))
|
|
#files = client.cp('dav://'+path+'/'+filename,'/opt/odoo/addons/DigitalSignage/temp/'+filename)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_set.temp', 'wb')
|
|
files = client.download_fileobj(filename,infile)
|
|
infile = open('/opt/odoo/addons/DigitalSignage/temp/temp_set.temp', 'rb')
|
|
indata = infile.read()
|
|
encoded_file = base64.b64encode(indata)
|
|
for feld_id in feldids:
|
|
feld = request.env['dss.advertisefields'].search([('id', '=', feld_id)])
|
|
feld.btn_image = filename
|
|
feld.btn_image_bin = encoded_file
|
|
return True
|
|
|
|
|
|
|
|
|