# Buggy code
def _add_editcontrol(self, x, y, height, width, password=False):
    kwargs = dict(
        label="User",
        font="font13",
        textColor="FF00A4DC",
        disabledColor="FF888888",
        focusTexture="-",
        noFocusTexture="-",
    )

    # TODO: Kodi 17 compat removal cleanup
    if kodi_version() < 18:
        kwargs["isPassword"] = password

    control = xbmcgui.ControlEdit(0, 0, 0, 0, **kwargs)

    control.setPosition(x, y)
    control.setHeight(height)
    control.setWidth(width)

    self.addControl(control)

    # setType has no effect before the control is added to a window
    # TODO: Kodi 17 compat removal cleanup
    if password and not kodi_version() < 18:
        control.setType(xbmcgui.INPUT_TYPE_PASSWORD, "Please enter password")

    return control


# Traceback (sqlite3.OperationalError)
2020-11-20 11:12:04.823 T:29417    INFO <general>: JELLYFIN.database -> ERROR::jellyfin_kodi/database/__init__.py:163 type: <class 'sqlite3.OperationalError'> value: no such column: strFanart
2020-11-20 11:12:04.839 T:29417    INFO <general>: JELLYFIN.database -> ERROR::jellyfin_kodi/database/__init__.py:163 type: <class 'sqlite3.OperationalError'> value: no such column: strFanart
2020-11-20 11:12:04.852 T:29246    INFO <general>: Loading skin file: DialogConfirm.xml, load type: KEEP_IN_MEMORY
2020-11-20 11:12:13.154 T:29417    INFO <general>: JELLYFIN.full_sync -> ERROR::jellyfin_kodi/full_sync.py:257 full sync exited unexpectedly
2020-11-20 11:12:13.190 T:29417    INFO <general>: JELLYFIN.full_sync -> ERROR::jellyfin_kodi/full_sync.py:258 no such column: strFanart
Traceback (most recent call last):
File "jellyfin_kodi/full_sync.py", line 243, in process_library
media[library['CollectionType']](library)
File "jellyfin_kodi/helper/wrapper.py", line 41, in wrapper
result = func(self, dialog=dialog, *args, **kwargs)
File "jellyfin_kodi/full_sync.py", line 436, in music
obj.artist(item)
File "jellyfin_kodi/helper/wrapper.py", line 65, in wrapper
return func(*args, **kwargs)
File "jellyfin_kodi/helper/wrapper.py", line 77, in wrapper
return func(self, item, e_item=e_item, *args, **kwargs)
File "jellyfin_kodi/objects/music.py", line 93, in artist
self.update(obj['Genre'], obj['Bio'], obj['Thumb'], obj['Backdrops'], obj['LastScraped'], obj['ArtistId'])
File "jellyfin_kodi/objects/kodi/music.py", line 91, in update
self.cursor.execute(QU.update_artist, args)
sqlite3.OperationalError: no such column: strFanart

2020-11-20 11:12:13.203 T:29417    INFO <general>: JELLYFIN.full_sync -> INFO::jellyfin_kodi/full_sync.py:586 --<[ fullsync ]
2020-11-20 11:12:13.212 T:29417    INFO <general>: JELLYFIN.library -> ERROR::jellyfin_kodi/library.py:367 no such column: strFanart
Traceback (most recent call last):
File "jellyfin_kodi/library.py", line 324, in startup
sync.libraries()
File "jellyfin_kodi/full_sync.py", line 101, in libraries
self.start()
File "jellyfin_kodi/full_sync.py", line 186, in start
self.process_library(library)
File "jellyfin_kodi/full_sync.py", line 243, in process_library
media[library['CollectionType']](library)
File "jellyfin_kodi/helper/wrapper.py", line 41, in wrapper
result = func(self, dialog=dialog, *args, **kwargs)
File "jellyfin_kodi/full_sync.py", line 436, in music
obj.artist(item)
File "jellyfin_kodi/helper/wrapper.py", line 65, in wrapper
return func(*args, **kwargs)
File "jellyfin_kodi/helper/wrapper.py", line 77, in wrapper
return func(self, item, e_item=e_item, *args, **kwargs)
File "jellyfin_kodi/objects/music.py", line 93, in artist
self.update(obj['Genre'], obj['Bio'], obj['Thumb'], obj['Backdrops'], obj['LastScraped'], obj['ArtistId'])
File "jellyfin_kodi/objects/kodi/music.py", line 91, in update
self.cursor.execute(QU.update_artist, args)
sqlite3.OperationalError: no such column: strFanart

# Fixed code
def _add_editcontrol(self, x, y, height, width, password=False):
    kwargs = dict(
        label="",
        font="font13",
        textColor="FF00A4DC",
        disabledColor="FF888888",
        focusTexture="-",
        noFocusTexture="-",
    )

    # TODO: Kodi 17 compat removal cleanup
    if kodi_version() < 18:
        kwargs["isPassword"] = password

    control = xbmcgui.ControlEdit(0, 0, 0, 0, **kwargs)

    control.setPosition(x, y)
    control.setHeight(height)
    control.setWidth(width)

    self.addControl(control)

    # setType has no effect before the control is added to a window
    # TODO: Kodi 17 compat removal cleanup
    if password and not kodi_version() < 18:
        control.setType(xbmcgui.INPUT_TYPE_PASSWORD, "Please enter password")

    return control