我们从Python开源项目中,提取了以下18个代码示例,用于说明如何使用xbmcvfs.copy()。
def backup_theme(self, themename): '''backup a colortheme to a zipfile''' import zipfile backup_path = xbmcgui.Dialog().browse(3, self.addon.getLocalizedString(32029), "files").decode("utf-8") if backup_path: xbmc.executebuiltin("ActivateWindow(busydialog)") backup_name = u"%s ColorTheme - %s" % (get_skin_name().capitalize(), themename) backupfile = os.path.join(backup_path, backup_name + u".zip") zip_temp = u'special://temp/%s.zip' % backup_name xbmcvfs.delete(zip_temp) xbmcvfs.delete(backupfile) zip_temp = xbmc.translatePath(zip_temp).decode("utf-8") zip_file = zipfile.ZipFile(zip_temp, "w", zipfile.ZIP_DEFLATED) abs_src = os.path.abspath(xbmc.translatePath(self.userthemes_path).decode("utf-8")) for filename in xbmcvfs.listdir(self.userthemes_path)[1]: if (filename.startswith("%s_" % themename) or filename.replace(".theme", "").replace(".jpg", "") == themename): filename = filename.decode("utf-8") filepath = xbmc.translatePath(self.userthemes_path + filename).decode("utf-8") absname = os.path.abspath(filepath) arcname = absname[len(abs_src) + 1:] zip_file.write(absname, arcname) zip_file.close() xbmcvfs.copy(zip_temp, backupfile) xbmc.executebuiltin("Dialog.Close(busydialog)")
def restore_colortheme(self): '''restore zipbackup of colortheme to colorthemes folder''' zip_path = xbmcgui.Dialog().browse(1, self.addon.getLocalizedString(32030), "files", ".zip") if zip_path and zip_path.endswith(".zip"): # create temp path temp_path = u'special://temp/skinbackup/' temp_zip = u"special://temp/colortheme.zip" if xbmcvfs.exists(temp_path): recursive_delete_dir(temp_path) xbmcvfs.mkdir(temp_path) # unzip to temp xbmcvfs.copy(zip_path, temp_zip) unzip_fromfile(temp_zip, temp_path) for filename in xbmcvfs.listdir(temp_path)[1]: filename = filename.decode("utf-8") sourcefile = os.path.join(temp_path, filename) destfile = os.path.join(self.userthemes_path, filename) xbmcvfs.copy(sourcefile, destfile) # cleanup temp xbmcvfs.delete(temp_zip) recursive_delete_dir(temp_path) xbmcgui.Dialog().ok(self.addon.getLocalizedString(32026), self.addon.getLocalizedString(32027))
def process_image(image_url, art_type, imdb_id): '''animated gifs need to be stored locally, otherwise they won't work''' # make sure that our local path for the gif images exists addon = xbmcaddon.Addon(ADDON_ID) gifs_path = "%sanimatedgifs/" % addon.getAddonInfo('profile') del addon if not xbmcvfs.exists(gifs_path): xbmcvfs.mkdirs(gifs_path) # only process existing images if not image_url or not xbmcvfs.exists(image_url): return None # copy the image to our local path and return the new path as value local_filename = "%s%s_%s.gif" % (gifs_path, imdb_id, art_type) if xbmcvfs.exists(local_filename): xbmcvfs.delete(local_filename) # we don't use xbmcvfs.copy because we want to wait for the action to complete img = xbmcvfs.File(image_url) img_data = img.readBytes() img.close() img = xbmcvfs.File(local_filename, 'w') img.write(img_data) img.close() return local_filename
def download_image(filename, url): '''download specific image to local folder''' if not url: return url refresh_needed = False if xbmcvfs.exists(filename) and filename == url: # only overwrite if new image is different return filename else: if xbmcvfs.exists(filename): xbmcvfs.delete(filename) refresh_needed = True if xbmcvfs.copy(url, filename): if refresh_needed: refresh_image(filename) return filename return url
def copyUserDefinedFiles(): # Copy everything in the user directory to the addon directory infoTrace("vpnproviders.py", "Copying user defined files from userdata directory") source_path = getUserDataPath((user_def_str)+"/") dest_path = getAddonPath(True, user_def_str + "/") # Get the list of connection profiles and another list of strings to abuse for the selection screen try: files = getUserDataList(user_def_str, "*") if len(files) == 0: errorTrace("vpnproviders.py", "No User Defined files available to copy from " + source_path) return False for file in files: name = file[file.rfind(getSeparator())+1:] dest_file = dest_path + getSeparator() + name xbmcvfs.copy(file, dest_file) if not xbmcvfs.exists(dest_file): raise IOError('Failed to copy user def file ' + file + " to " + dest_file) return True except Exception as e: errorTrace("vpnproviders.py", "Error copying files from " + source_path + " to " + dest_path) errorTrace("vpnproviders.py", str(e)) return False
def populateSupportingFromGit(vpn_provider): # Copy all files from download to the directory that are not .ovpn, ignoring the metadata try: filelist = getDownloadList(vpn_provider, "*") debugTrace("Copying supporting files into addon directory for " + vpn_provider) for file in filelist: if not file.endswith(".ovpn") and not file.endswith("METADATA.txt"): name = os.path.basename(file) fullname = getAddonPath(True, vpn_provider + "/" + name) xbmcvfs.copy(file, fullname) if not xbmcvfs.exists(fullname): raise IOError('Failed to copy supporting file ' + file + " to " + fullname) return True except Exception as e: errorTrace("vpnproviders.py", "Can't copy " + file + " for VPN " + vpn_provider) errorTrace("vpnproviders.py", str(e)) return False
def set_icon_for_theme(filename): '''sets an icon for an existing theme''' iconpath = filename.replace(".theme", ".jpg") dialog = xbmcgui.Dialog() custom_thumbnail = dialog.browse(2, xbmc.getLocalizedString(1030), 'files') if custom_thumbnail: xbmcvfs.delete(iconpath) xbmcvfs.copy(custom_thumbnail, iconpath)
def backup(self, filters=None, backup_file="", silent=False): '''create skin backup''' if not filters: filters = [] if not backup_file: return # create temp path temp_path = self.create_temp() zip_temp = u'%s/skinbackup-%s.zip' % (temp_path, datetime.now().strftime('%Y-%m-%d %H.%M')) temp_path = temp_path + "skinbackup/" # backup skinshortcuts preferences if not filters or (filters and "skinshortcuts" in filters): self.backup_skinshortcuts(temp_path + "skinshortcuts/") # backup skin settings if "skinshortcutsonly" not in filters: skinsettings_path = os.path.join(temp_path, u"guisettings.txt") self.backup_skinsettings(skinsettings_path, filters, temp_path) # zip the backup zip_temp = xbmc.translatePath(zip_temp).decode("utf-8") zip_tofile(temp_path, zip_temp) # copy file to destination - wait untill it's really copied copy_file(zip_temp, backup_file, True) # cleanup temp recursive_delete_dir(temp_path) xbmcvfs.delete(zip_temp) # show success message if not silent: xbmcgui.Dialog().ok(self.addon.getLocalizedString(32004), self.addon.getLocalizedString(32005))
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)
def backup_skinshortcuts_images(shortcutfile, dest_path): '''parse skinshortcuts file and copy images to backup location''' shortcutfile = xbmc.translatePath(shortcutfile).decode("utf-8") doc = parse(shortcutfile) listing = doc.documentElement.getElementsByTagName('shortcut') for shortcut in listing: defaultid = shortcut.getElementsByTagName('defaultID') if defaultid: defaultid = defaultid[0].firstChild if defaultid: defaultid = defaultid.data if not defaultid: defaultid = shortcut.getElementsByTagName('label')[0].firstChild.data thumb = shortcut.getElementsByTagName('thumb') if thumb: thumb = thumb[0].firstChild if thumb: thumb = thumb.data if thumb and (thumb.endswith(".jpg") or thumb.endswith(".png") or thumb.endswith(".gif")): thumb = get_clean_image(thumb) extension = thumb.split(".")[-1] newthumb = os.path.join(dest_path, "%s-thumb-%s.%s" % (xbmc.getSkinDir(), normalize_string(defaultid), extension)) newthumb_vfs = "special://profile/addon_data/script.skinshortcuts/%s-thumb-%s.%s" % ( xbmc.getSkinDir(), normalize_string(defaultid), extension) if xbmcvfs.exists(thumb): copy_file(thumb, newthumb) shortcut.getElementsByTagName('thumb')[0].firstChild.data = newthumb_vfs # write changes to skinshortcuts file shortcuts_file = xbmcvfs.File(shortcutfile, "w") shortcuts_file.write(doc.toxml(encoding='utf-8')) shortcuts_file.close()
def copy_file(source, destination, do_wait=False): '''copy a file on the filesystem, wait for the action to be completed''' if xbmcvfs.exists(destination): delete_file(destination) xbmcvfs.copy(source, destination) if do_wait: count = 20 while count: xbmc.sleep(500) # this first sleep is intentional if xbmcvfs.exists(destination): break count -= 1
def onInitialized(success): if success: channelList = database.getChannelList(onlyVisible=False) xbmcvfs.mkdirs("special://profile/addon_data/script.tvguide.fullscreen/channel_logos/") for channel in channelList: from_file = channel.logo regex = '[%s]' % re.escape('[]/\:') xbmc.log(regex) to_file = "special://profile/addon_data/script.tvguide.fullscreen/channel_logos/%s.png" % re.sub(regex,' ',channel.title) xbmcvfs.copy(from_file,to_file) database.close(onAutoplaysCleared) else: database.close()
def close(self): if not self.isClosing: self.isClosing = True if self.player.isPlaying(): if ADDON.getSetting('stop.on.exit') == "true": self.player.stop() self.clear_catchup() f = xbmcvfs.File('special://profile/addon_data/script.tvguide.fullscreen/tvdb.pickle','wb') try: pickle.dump(self.tvdb_urls,f) except: pass f.close() file_name = 'special://profile/addon_data/script.tvguide.fullscreen/custom_stream_urls_autosave.ini' xbmcvfs.copy(file_name,file_name+".last") f = xbmcvfs.File(file_name,'wb') if self.database: stream_urls = self.database.getCustomStreamUrls() for (name,stream) in stream_urls: write_str = "%s=%s\n" % (name,stream) f.write(write_str.encode("utf8")) f.close() if self.database: self.database.close(super(TVGuide, self).close) else: super(TVGuide, self).close()
def generateBlackbox(): files = getProfileList("blackbox") destination_path = getProviderPath("blackbox" + "/") for file in files: xbmcvfs.copy(file, destination_path + os.path.basename(file)) generateMetaData("blackbox", MINIMUM_LEVEL)
def generateVanishedVPN(): files = getProfileList("VanishedVPN") destination_path = getProviderPath("VanishedVPN" + "/") for file in files: xbmcvfs.copy(file, destination_path + os.path.basename(file)) generateMetaData("VanishedVPN", MINIMUM_LEVEL)
def generateVPNArea(): files = getProfileList("VPNArea") destination_path = getProviderPath("VPNArea" + "/") for file in files: xbmcvfs.copy(file, destination_path + os.path.basename(file)) generateMetaData("VPNArea", MINIMUM_LEVEL)
def restore(self, filename="", silent=False): '''restore skin settings from file''' if not filename: filename = self.get_restorefilename() progressdialog = None if not silent: progressdialog = xbmcgui.DialogProgress(self.addon.getLocalizedString(32006)) progressdialog.create(self.addon.getLocalizedString(32007)) if filename and xbmcvfs.exists(filename): # create temp path temp_path = self.create_temp() if not filename.endswith("zip"): # assume that passed filename is actually a skinsettings file skinsettingsfile = filename else: # copy zip to temp directory and unzip skinsettingsfile = temp_path + "guisettings.txt" if progressdialog: progressdialog.update(0, "unpacking backup...") zip_temp = u'%sskinbackup-%s.zip' % (ADDON_DATA, datetime.now().strftime('%Y-%m-%d-%H-%M')) copy_file(filename, zip_temp, True) unzip_fromfile(zip_temp, temp_path) delete_file(zip_temp) # copy skinshortcuts preferences self.restore_skinshortcuts(temp_path) # restore any custom skin images or themes for directory in ["custom_images/", "themes/"]: custom_images_folder = u"special://profile/addon_data/%s/%s" % (xbmc.getSkinDir(), directory) custom_images_folder_temp = temp_path + directory if xbmcvfs.exists(custom_images_folder_temp): for file in xbmcvfs.listdir(custom_images_folder_temp)[1]: xbmcvfs.copy(custom_images_folder_temp + file, custom_images_folder + file) # restore guisettings if xbmcvfs.exists(skinsettingsfile): self.restore_guisettings(skinsettingsfile, progressdialog) # cleanup temp recursive_delete_dir(temp_path) progressdialog.close() if not silent: xbmcgui.Dialog().ok(self.addon.getLocalizedString(32006), self.addon.getLocalizedString(32009))
def download_artwork(folderpath, artwork): '''download artwork to local folder''' efa_path = "" new_dict = {} if not xbmcvfs.exists(folderpath): xbmcvfs.mkdir(folderpath) for key, value in artwork.iteritems(): if key == "fanart": new_dict[key] = download_image(os.path.join(folderpath, "fanart.jpg"), value) elif key == "thumb": new_dict[key] = download_image(os.path.join(folderpath, "folder.jpg"), value) elif key == "discart": new_dict[key] = download_image(os.path.join(folderpath, "disc.png"), value) elif key == "banner": new_dict[key] = download_image(os.path.join(folderpath, "banner.jpg"), value) elif key == "clearlogo": new_dict[key] = download_image(os.path.join(folderpath, "logo.png"), value) elif key == "clearart": new_dict[key] = download_image(os.path.join(folderpath, "clearart.png"), value) elif key == "characterart": new_dict[key] = download_image(os.path.join(folderpath, "characterart.png"), value) elif key == "poster": new_dict[key] = download_image(os.path.join(folderpath, "poster.jpg"), value) elif key == "landscape": new_dict[key] = download_image(os.path.join(folderpath, "landscape.jpg"), value) elif key == "thumbback": new_dict[key] = download_image(os.path.join(folderpath, "thumbback.jpg"), value) elif key == "spine": new_dict[key] = download_image(os.path.join(folderpath, "spine.jpg"), value) elif key == "fanarts" and value: # copy extrafanarts only if the directory doesn't exist at all delim = "\\" if "\\" in folderpath else "/" efa_path = "%sextrafanart" % folderpath + delim if not xbmcvfs.exists(efa_path): xbmcvfs.mkdir(efa_path) images = [] for count, image in enumerate(value): image = download_image(os.path.join(efa_path, "fanart%s.jpg" % count), image) images.append(image) if LIMIT_EXTRAFANART and count == LIMIT_EXTRAFANART: break new_dict[key] = images elif key == "posters" and value: # copy extraposters only if the directory doesn't exist at all delim = "\\" if "\\" in folderpath else "/" efa_path = "%sextraposter" % folderpath + delim if not xbmcvfs.exists(efa_path): xbmcvfs.mkdir(efa_path) images = [] for count, image in enumerate(value): image = download_image(os.path.join(efa_path, "poster%s.jpg" % count), image) images.append(image) if LIMIT_EXTRAFANART and count == LIMIT_EXTRAFANART: break new_dict[key] = images else: new_dict[key] = value if efa_path: new_dict["extrafanart"] = efa_path return new_dict