DigitalSignage/controllers/dss_nextcloudwidget.py

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