def check_daynighttheme(self):
'''check if a specific day or night theme should be applied'''
if xbmc.getCondVisibility(
"Skin.HasSetting(SkinHelper.EnableDayNightThemes) + "
"Skin.String(SkinHelper.ColorTheme.Day.time) + "
"Skin.String(SkinHelper.ColorTheme.Night.time)"):
try:
daytime = xbmc.getInfoLabel("Skin.String(SkinHelper.ColorTheme.Day.time)")
daytime = datetime(*(time.strptime(daytime, "%H:%M")[0:6])).time()
nighttime = xbmc.getInfoLabel("Skin.String(SkinHelper.ColorTheme.Night.time)")
nighttime = datetime(*(time.strptime(nighttime, "%H:%M")[0:6])).time()
timestamp = datetime.now().time()
if daytime <= timestamp <= nighttime:
dayornight = "Day"
else:
dayornight = "Night"
current_theme = xbmc.getInfoLabel("Skin.String(SkinHelper.LastColorTheme)")
newtheme = xbmc.getInfoLabel("Skin.String(SkinHelper.ColorTheme.%s.theme)" % dayornight)
if current_theme != newtheme:
themefile = xbmc.getInfoLabel("Skin.String(SkinHelper.ColorTheme.%s.file)" % dayornight)
self.load_colortheme(themefile)
except Exception as exc:
log_exception(__name__, exc)
python类getCondVisibility()的实例源码
def onInputRequested(self):
"""
Input.OnInputRequested event handler
:return: None
"""
if not RUN_COMMAND_ON_ENTER:
return
command = self.window.command.getText()
if not command:
return
while True:
keyboard_visible = xbmc.getCondVisibility("Window.IsVisible(virtualkeyboard)")
if keyboard_visible:
JSONRPC("Input.Back")
break
if self.abortRequested():
break
def run():
try:
xbmc.executebuiltin("ActivateWindow(10147)")
window = xbmcgui.Window(10147)
xbmc.sleep(100)
window.getControl(1).setLabel(translate(32000))
window.getControl(5).setText(translate(32065))
while xbmc.getCondVisibility("Window.IsActive(10147)"):
xbmc.sleep(100)
ret = xbmcgui.Dialog().yesno(translate(32000), translate(32067))
if ret:
xbmc.executebuiltin("RunAddon(script.keymap)")
except:
traceback.print_stack()
xbmc.executebuiltin("XBMC.Notification('"+translate(32000)+"','"+translate(32066)+"','2000','')")
def openDialog(image,audio):
audio = audio
print 'MUSIC IS '+audio
path = xbmc.translatePath(os.path.join('special://home/addons/plugin.video.phstreams/resources/skins/DefaultSkin','media'))
popimage=os.path.join(path, 'tempimage.jpg')
downloadFile(image,popimage)
musicsound=os.path.join(path, 'tempsound.mp3')
downloadFile(audio,musicsound)
if xbmc.getCondVisibility('system.platform.ios'):
if not xbmc.getCondVisibility('system.platform.atv'):
popup = dialog('pop1.xml',xbmcaddon.Addon().getAddonInfo('path'),'DefaultSkin',close_time=20,logo_path='%s/resources/skins/DefaultSkin/media/Logo/'%xbmcaddon.Addon().getAddonInfo('path'),)
if xbmc.getCondVisibility('system.platform.android'):
popup = dialog('pop1.xml',xbmcaddon.Addon().getAddonInfo('path'),'DefaultSkin',close_time=20,logo_path='%s/resources/skins/DefaultSkin/media/Logo/'%xbmcaddon.Addon().getAddonInfo('path'))
else:
popup = dialog('pop.xml',xbmcaddon.Addon().getAddonInfo('path'),'DefaultSkin',close_time=20,logo_path='%s/resources/skins/DefaultSkin/media/Logo/'%xbmcaddon.Addon().getAddonInfo('path'))
popup.doModal()
del popup
def __init__(self):
# Class initialisation. Fails with a RuntimeError exception if VPN Manager add-on is not available, or too old
self.filtered_addons = []
self.filtered_windows = []
self.primary_vpns = []
self.last_updated = 0
self.refreshLists()
self.default = self.getConnected()
xbmc.log("VPN Mgr API : Default is " + self.default, level=xbmc.LOGDEBUG)
self.timeout = 30
if not xbmc.getCondVisibility("System.HasAddon(service.vpn.manager)"):
xbmc.log("VPN Mgr API : VPN Manager is not installed, cannot use filtering", level=xbmc.LOGERROR)
raise RuntimeError("VPN Manager is not installed")
else:
v = int((xbmcaddon.Addon("service.vpn.manager").getAddonInfo("version").strip()).replace(".",""))
if v < 310:
raise RuntimeError("VPN Manager " + str(v) + " installed, but needs to be v3.1.0 or later")
def _down(self, currentFocus):
if self.getFocusId() in [self.C_MAIN_CATEGORY, self.C_MAIN_PROGRAM_CATEGORIES]:
currentFocus.y = 0
currentFocus.x = self.focusPoint.x
control = self._findControlBelow(currentFocus)
if control is not None:
self.setFocus(control)
elif control is None:
if self.getControl(self.C_MAIN_ACTIONS) and ADDON.getSetting('action.bar') == 'true' and ADDON.getSetting('down.action') == 'true' and xbmc.getCondVisibility('Control.IsVisible(7100)'):
self.setFocusId(self.C_MAIN_ACTIONS)
return
elif self.getControl(self.C_MAIN_MENUBAR) and ADDON.getSetting('action.bar') == 'true' and ADDON.getSetting('down.action') == 'true':
self._showControl(self.C_MAIN_MENUBAR)
self.mode = None
self.setFocusId(self.C_MAIN_MOUSE_SEARCH)
return
self.focusPoint.y = self.epgView.top
self.onRedrawEPG(self.channelIdx + CHANNELS_PER_PAGE, self.viewStartDate,
focusFunction=self._findControlBelow)
def sync_trakt_kodi(silent=True):
# Para que la sincronizacion no sea silenciosa vale con silent=False
if xbmc.getCondVisibility('System.HasAddon("script.trakt")'):
notificacion = True
if (not config.get_setting("sync_trakt_notification", "biblioteca") and
platformtools.is_playing()):
notificacion = False
xbmc.executebuiltin('RunScript(script.trakt,action=sync,silent=%s)' % silent)
logger.info("Sincronizacion con Trakt iniciada")
if notificacion:
platformtools.dialog_notification("pelisalacarta",
"Sincronizacion con Trakt iniciada",
icon=0,
time=2000)
def search_kodi(self, searchphrase):
'''search kodi json api for channel logo'''
result = ""
if xbmc.getCondVisibility("PVR.HasTVChannels"):
results = self.kodidb.get_json(
'PVR.GetChannels',
fields=["thumbnail"],
returntype="tvchannels",
optparam=(
"channelgroupid",
"alltv"))
for item in results:
if item["label"] == searchphrase:
channelicon = get_clean_image(item['thumbnail'])
if channelicon and xbmcvfs.exists(channelicon):
result = channelicon
break
return result
def _set_resolved_url(self, context, base_item, succeeded=True):
item = xbmc_items.to_item(context, base_item)
item.setPath(base_item.get_uri())
xbmcplugin.setResolvedUrl(self.handle, succeeded=succeeded, listitem=item)
"""
# just to be sure :)
if not isLiveStream:
tries = 100
while tries>0:
xbmc.sleep(50)
if xbmc.Player().isPlaying() and xbmc.getCondVisibility("Player.Paused"):
xbmc.Player().pause()
break
tries-=1
"""
def onPlayBackStarted(self):
xbmc.log("Kodi Lifx: DEBUG playback started called on player")
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
self.playlistlen = playlist.size()
self.playlistpos = playlist.getposition()
if self.isPlayingVideo() and not self.playingvideo:
self.playingvideo = True
self.duration = self.getTotalTime()
self.movie = xbmc.getCondVisibility('VideoPlayer.Content(movies)')
global credits_triggered
credits_triggered = False
if self.movie and self.duration != 0: #only try if its a movie and has a duration
get_credits_info(self.getVideoInfoTag().getTitle(), self.duration) # TODO: start it on a timer to not block the beginning of the media
logger.debuglog("credits_time: %r" % credits_time)
self.timer = RepeatedTimer(1, self.checkTime)
state_changed("started", self.duration)
def getRoleItemDDPosition(self):
y = 980
if xbmc.getCondVisibility('Control.IsVisible(500)'):
y += 360
if xbmc.getCondVisibility('Control.IsVisible(501)'):
y += 520
if xbmc.getCondVisibility('!IsEmpty(Window.Property(on.extras))'):
y -= 300
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),0) + Control.IsVisible(500)'):
y -= 500
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),1) + Control.IsVisible(501)'):
y -= 500
focus = int(xbmc.getInfoLabel('Container(403).Position'))
x = ((focus + 1) * 304) - 100
return x, y
def onFocus(self, controlID):
if controlID == self.MAIN_BUTTON_ID:
self.selectedOffset = self.trueOffset()
if self.lastFocusID == self.BIG_SEEK_LIST_ID:
xbmc.sleep(100)
self.updateBigSeek()
else:
self.setBigSeekShift()
self.updateProgress()
elif controlID == self.BIG_SEEK_LIST_ID:
self.setBigSeekShift()
self.updateBigSeek()
elif xbmc.getCondVisibility('ControlGroup(400).HasFocus(0)'):
self.selectedOffset = self.trueOffset()
self.updateProgress()
self.lastFocusID = controlID
def tick(self, offset=None):
if not self.initialized:
return
if xbmc.getCondVisibility('Window.IsActive(busydialog) + !Player.Caching'):
util.DEBUG_LOG('SeekDialog: Possible stuck busy dialog - closing')
xbmc.executebuiltin('Dialog.Close(busydialog,1)')
if time.time() > self.timeout and not self.hasDialog:
if not xbmc.getCondVisibility('Window.IsActive(videoosd) | Player.Rewinding | Player.Forwarding') and not self.playlistDialogVisible:
self.hideOSD()
try:
self.offset = offset or int(self.handler.player.getTime() * 1000)
except RuntimeError: # Playback has stopped
return
self.updateCurrent()
def onAction(self, action):
try:
if action.getId() in MOVE_SET:
controlID = self.getFocusId()
if controlID == self.POSTERS_PANEL_ID or controlID == self.SCROLLBAR_ID:
self.updateKey()
elif action == xbmcgui.ACTION_CONTEXT_MENU:
if not xbmc.getCondVisibility('ControlGroup({0}).HasFocus(0)'.format(self.OPTIONS_GROUP_ID)):
self.setFocusId(self.OPTIONS_GROUP_ID)
return
elif action in(xbmcgui.ACTION_NAV_BACK, xbmcgui.ACTION_CONTEXT_MENU):
if not xbmc.getCondVisibility('ControlGroup({0}).HasFocus(0)'.format(self.OPTIONS_GROUP_ID)):
if xbmc.getCondVisibility('IntegerGreaterThan(Container(101).ListItem.Property(index),5)'):
self.setFocusId(self.OPTIONS_GROUP_ID)
return
self.updateItem()
except:
util.ERROR()
kodigui.MultiWindow.onAction(self, action)
def onAction(self, action):
try:
if self.postPlayMode:
self.cancelTimer()
self.resetPassoutProtection()
if action in(xbmcgui.ACTION_NAV_BACK, xbmcgui.ACTION_CONTEXT_MENU):
if not xbmc.getCondVisibility('ControlGroup({0}).HasFocus(0)'.format(self.OPTIONS_GROUP_ID)):
self.setFocusId(self.OPTIONS_GROUP_ID)
return
if action in(xbmcgui.ACTION_NAV_BACK, xbmcgui.ACTION_PREVIOUS_MENU):
self.doClose()
return
if action in (xbmcgui.ACTION_NEXT_ITEM, xbmcgui.ACTION_PLAYER_PLAY):
self.playVideo()
elif action == xbmcgui.ACTION_PREV_ITEM:
self.playVideo(prev=True)
elif action == xbmcgui.ACTION_STOP:
self.doClose()
except:
util.ERROR()
kodigui.ControlledWindow.onAction(self, action)
def getRoleItemDDPosition(self):
y = 1000
if xbmc.getCondVisibility('Control.IsVisible(500)'):
y += 360
if xbmc.getCondVisibility('Control.IsVisible(501)'):
y += 520
if xbmc.getCondVisibility('!IsEmpty(Window.Property(on.extras))'):
y -= 300
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),0) + Control.IsVisible(500)'):
y -= 500
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),1) + Control.IsVisible(501)'):
y -= 500
focus = int(xbmc.getInfoLabel('Container(403).Position'))
x = ((focus + 1) * 304) - 100
return x, y
def onAction(self, action):
try:
self.checkSection()
controlID = self.getFocusId()
if action in (xbmcgui.ACTION_NAV_BACK, xbmcgui.ACTION_PREVIOUS_MENU):
if self.getFocusId() == self.OPTIONS_LIST_ID:
self.setFocusId(self.SETTINGS_LIST_ID)
return
# elif not xbmc.getCondVisibility('ControlGroup({0}).HasFocus(0)'.format(self.TOP_GROUP_ID)):
# self.setFocusId(self.TOP_GROUP_ID)
# return
elif action == xbmcgui.ACTION_MOVE_RIGHT and controlID == 150:
self.editSetting(from_right=True)
except:
util.ERROR()
kodigui.BaseWindow.onAction(self, action)
def getRoleItemDDPosition(self):
y = 980
if xbmc.getCondVisibility('Control.IsVisible(500)'):
y += 360
if xbmc.getCondVisibility('Control.IsVisible(501)'):
y += 360
if xbmc.getCondVisibility('Control.IsVisible(502)'):
y += 520
if xbmc.getCondVisibility('!IsEmpty(Window.Property(on.extras))'):
y -= 300
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),0) + Control.IsVisible(500)'):
y -= 500
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),1) + Control.IsVisible(501)'):
y -= 360
if xbmc.getCondVisibility('IntegerGreaterThan(Window.Property(hub.focus),1) + Control.IsVisible(502)'):
y -= 500
focus = int(xbmc.getInfoLabel('Container(403).Position'))
x = ((focus + 1) * 304) - 100
return x, y
def onFirstInit(self):
self.playlistListControl = kodigui.ManagedControlList(self, self.PLAYLIST_LIST_ID, 5)
self.setProperties()
self.fillPlaylist()
self.setFocusId(self.PLAYLIST_LIST_ID)
# def onAction(self, action):
# try:
# if action in(xbmcgui.ACTION_NAV_BACK, xbmcgui.ACTION_CONTEXT_MENU):
# if not xbmc.getCondVisibility('ControlGroup({0}).HasFocus(0)'.format(self.OPTIONS_GROUP_ID)):
# self.setFocusId(self.OPTIONS_GROUP_ID)
# return
# except:
# util.ERROR()
# kodigui.ControlledWindow.onAction(self, action)
def _set_resolved_url(self, context, base_item, succeeded=True):
item = xbmc_items.to_item(context, base_item)
item.setPath(base_item.get_uri())
xbmcplugin.setResolvedUrl(context.get_handle(), succeeded=succeeded, listitem=item)
"""
# just to be sure :)
if not isLiveStream:
tries = 100
while tries>0:
xbmc.sleep(50)
if xbmc.Player().isPlaying() and xbmc.getCondVisibility("Player.Paused"):
xbmc.Player().pause()
break
tries-=1
"""
def Do_VIDEO_DOWNLOAD(self):
downloadCmd = __settings__.getSetting("downloadCmd")
url = base64.decodestring(self.params["v"])
if not downloadCmd:
if xbmc.getCondVisibility("system.platform.android"):
cmd = 'StartAndroidActivity("", "android.intent.action.VIEW", "", "%s")' % ( url )
xbmc.executebuiltin(cmd)
elif xbmc.getCondVisibility("system.platform.windows"):
downloadCmd = "start"
else:
downloadCmd = "open"
if downloadCmd:
__settings__.setSetting("downloadCmd", downloadCmd)
if '{url}' in downloadCmd:
os.system(downloadCmd.replace('{url}', url))
else:
os.system(downloadCmd + " " + url)
def tv_get_extended_info(imdb):
import xbmc
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
tvdb = info["show"]["ids"]["tvdb"]
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin(
"RunScript(script.qlickplay,info=tvinfo,tvdb_id={0})".format(tvdb))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=extendedtvinfo,tvdb_id={0})".
format(tvdb))
return
def season_get_extended_info(item):
import xbmc
item = eval(item)
imdb = item["imdb"]
season = item["season"]
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
title = info["show"]["title"]
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin(
"RunScript(script.qlickplay,info=seasoninfo,tvshow={0},season={1})".
format(title, season))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=seasoninfo,tvshow={0},season={1})".
format(title, season))
return
def episode_get_extended_info(item):
import xbmc
item = eval(item)
imdb = item["imdb"]
season = item["season"]
episode = item["episode"]
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
title = str(info["show"]["title"])
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin("RunScript(script.qlickplay,info=episodeinfo,\
tvshow={0}, season={1}, episode={2})"
.format(title, season, episode))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=extendedepisodeinfo,\
tvshow={0},season={1},episode={2})".format(title, season, episode))
def __init__(self):
# Class initialisation. Fails with a RuntimeError exception if VPN Manager add-on is not available, or too old
self.filtered_addons = []
self.filtered_windows = []
self.primary_vpns = []
self.last_updated = 0
self.refreshLists()
self.default = self.getConnected()
xbmc.log("VPN Mgr API : Default is " + self.default, level=xbmc.LOGDEBUG)
self.timeout = 30
if not xbmc.getCondVisibility("System.HasAddon(service.vpn.manager)"):
xbmc.log("VPN Mgr API : VPN Manager is not installed, cannot use filtering", level=xbmc.LOGERROR)
raise RuntimeError("VPN Manager is not installed")
else:
v = int((xbmcaddon.Addon("service.vpn.manager").getAddonInfo("version").strip()).replace(".",""))
if v < 310:
raise RuntimeError("VPN Manager " + str(v) + " installed, but needs to be v3.1.0 or later")
def tv_get_extended_info(imdb):
import xbmc
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
tvdb = info["show"]["ids"]["tvdb"]
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin(
"RunScript(script.qlickplay,info=tvinfo,tvdb_id={0})".format(tvdb))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=extendedtvinfo,tvdb_id={0})".
format(tvdb))
return
def season_get_extended_info(item):
import xbmc
item = eval(item)
imdb = item["imdb"]
season = item["season"]
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
title = info["show"]["title"]
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin(
"RunScript(script.qlickplay,info=seasoninfo,tvshow={0},season={1})".
format(title, season))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=seasoninfo,tvshow={0},season={1})".
format(title, season))
return
def episode_get_extended_info(item):
import xbmc
item = eval(item)
imdb = item["imdb"]
season = item["season"]
episode = item["episode"]
headers = {
'Content-Type': 'application/json',
'trakt-api-version': '2',
'trakt-api-key': TRAKT_CLIENT_ID
}
url = TRAKT_API_ENDPOINT + "/search/imdb/" + imdb + '?type=show'
info = requests.get(url, headers=headers, verify=False).json()[0]
title = str(info["show"]["title"])
if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
xbmc.executebuiltin("RunScript(script.qlickplay,info=episodeinfo,\
tvshow={0}, season={1}, episode={2})"
.format(title, season, episode))
elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"):
xbmc.executebuiltin(
"RunScript(script.extendedinfo,info=extendedepisodeinfo,\
tvshow={0},season={1},episode={2})".format(title, season, episode))
dialogselect.py 文件源码
项目:script.skin.helper.skinbackup
作者: marcelveldt
项目源码
文件源码
阅读 19
收藏 0
点赞 0
评论 0
def onAction(self, action):
'''Respond to Kodi actions e.g. exit'''
if action.getId() in (9, 10, 92, 216, 247, 257, 275, 61467, 61448, ):
self.close_dialog(True)
# an item in the list is clicked
if (action.getId() == 7 or action.getId() == 100) and xbmc.getCondVisibility(
"Control.HasFocus(3) | Control.HasFocus(6)"):
self.close_dialog()
backuprestore.py 文件源码
项目:script.skin.helper.skinbackup
作者: marcelveldt
项目源码
文件源码
阅读 27
收藏 0
点赞 0
评论 0
def backup_skinshortcuts(self, dest_path):
'''backup skinshortcuts including images'''
source_path = u'special://profile/addon_data/script.skinshortcuts/'
if not xbmcvfs.exists(dest_path):
xbmcvfs.mkdir(dest_path)
for file in xbmcvfs.listdir(source_path)[1]:
file = file.decode("utf-8")
sourcefile = source_path + file
destfile = dest_path + file
if xbmc.getCondVisibility("SubString(Skin.String(skinshortcuts-sharedmenu),false)"):
# User is not sharing menu, so strip the skin name out of the destination file
destfile = destfile.replace("%s." % (xbmc.getSkinDir()), "")
if (file.endswith(".DATA.xml") and (not xbmc.getCondVisibility(
"SubString(Skin.String(skinshortcuts-sharedmenu),false)") or file.startswith(xbmc.getSkinDir()))):
xbmcvfs.copy(sourcefile, destfile)
# parse shortcuts file and look for any images - if found copy them to addon folder
self.backup_skinshortcuts_images(destfile, dest_path)
elif file.endswith(".properties") and xbmc.getSkinDir() in file:
if xbmc.getSkinDir() in file:
destfile = dest_path + file.replace(xbmc.getSkinDir(), "SKINPROPERTIES")
copy_file(sourcefile, destfile)
self.backup_skinshortcuts_properties(destfile, dest_path)
else:
# just copy the remaining files
copy_file(sourcefile, destfile)