99
1010from openupgradelib import openupgrade
1111from pathvalidate import sanitize_filename
12+ from PIL import Image
1213from psycopg2 .sql import SQL , Identifier
1314
1415from odoo import SUPERUSER_ID , Command , api , models
16+ from odoo .exceptions import UserError
1517from odoo .tools import table_exists
1618from odoo .tools .misc import get_lang , split_every
1719
20+ from odoo .addons .dms .models .dms_file import File
21+
1822from .tools import file
1923
2024_logger = logging .getLogger (__name__ )
@@ -416,12 +420,24 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
416420 continue
417421 original_name = doc ["name" ]
418422 batch_original_names .append (original_name )
419- sanitized_name = sanitize_filename (original_name , replacement_text = "_" )
420- if not sanitized_name :
421- sanitized_name = "Unnamed Document"
423+ if original_name .startswith ("." ) and len (original_name ) > 1 :
424+ base_name = "Unnamed Document"
425+ extension = original_name
426+ else :
427+ base_name , extension = os .path .splitext (original_name )
428+ if not extension and base_name .startswith ("." ):
429+ base_name = "Unnamed Document"
430+ extension = original_name
431+ elif not base_name :
432+ base_name = "Unnamed Document"
433+ sanitized_base = sanitize_filename (base_name , replacement_text = "_" )
434+ sanitized_ext = sanitize_filename (extension , replacement_text = "_" )
435+ if not sanitized_base :
436+ sanitized_base = "Unnamed Document"
437+ sanitized_name = f"{ sanitized_base } { sanitized_ext } "
422438 if original_name != sanitized_name :
423439 _logger .debug (
424- "Sanitized filename: '%s' -> '%s'" , original_name , sanitized_name
440+ "Sanitized filename: '%s' to '%s'" , original_name , sanitized_name
425441 )
426442 names_in_directory = existing_names_by_dir [directory_id ]
427443 unique_name = file .unique_name_new (
@@ -432,15 +448,13 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
432448 mimetype = att_data .get ("mimetype" ) if att_data else None
433449 file_size = att_data .get ("file_size" ) if att_data else 0
434450 checksum = att_data .get ("checksum" ) if att_data else None
435- extension = None
436- if mimetype :
451+ extension_str = sanitized_ext [ 1 :]. strip (). lower () if sanitized_ext else ""
452+ if not extension_str and mimetype :
437453 guessed_ext = mimetypes .guess_extension (mimetype )
438454 if guessed_ext :
439- extension = guessed_ext [1 :].strip ().lower ()
440- if not extension and original_name :
441- extension = os .path .splitext (original_name )[1 ][1 :].strip ().lower ()
442- if not extension :
443- extension = "bin"
455+ extension_str = guessed_ext [1 :].strip ().lower ()
456+ if not extension_str :
457+ extension_str = "bin"
444458 file_vals = {
445459 "name" : unique_name ,
446460 "directory_id" : directory_id ,
@@ -488,7 +502,7 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
488502 """
489503 ).format (cases = SQL (" " ).join (case_clauses ))
490504
491- openupgrade . logged_query ( cr , query , params )
505+ cr . execute ( query , params )
492506 except Exception :
493507 _logger .exception ("A critical error occurred during batch creation" )
494508 for name in batch_original_names :
@@ -532,3 +546,31 @@ def post_init_hook(cr, registry):
532546 except Exception :
533547 _logger .exception ("Migration from 'documents' to 'dms' failed!" )
534548 raise
549+
550+
551+ def post_load_hook ():
552+ @api .depends ("mimetype" , "content" )
553+ def _compute_image_1920_new (self ):
554+ """Provide thumbnail automatically if possible."""
555+ for one in self .filtered ("mimetype" ):
556+ if one .mimetype != "application/pdf" and one .mimetype in (
557+ * Image .MIME .values (),
558+ "image/svg+xml" ,
559+ ):
560+ # catch this error: https://github.com/odoo/odoo/blob/c27d978a/odoo/tools/image.py#L94
561+ # start hooks
562+ try :
563+ one .image_1920 = one .content
564+ except (UserError , TypeError ) as e :
565+ _logger .warning (
566+ "Failed to generate image_1920 for file %s (ID %s): " ,
567+ one .name ,
568+ one .id ,
569+ str (e ),
570+ )
571+ one .image_1920 = False
572+ # end hooks
573+
574+ if not hasattr (File , "_compute_image_1920_origin" ):
575+ File ._compute_image_1920_origin = File ._compute_image_1920
576+ File ._compute_image_1920 = _compute_image_1920_new
0 commit comments