# -*- coding: utf-8 -*- PLUGIN_NAME = u"Open files in the GUI environment" PLUGIN_AUTHOR = u"Michael Elsdörfer" PLUGIN_DESCRIPTION = "" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15"] import subprocess, sys, os from PyQt4 import QtCore, QtGui from picard.file import File from picard.track import Track from picard.ui.itemviews import BaseAction, register_file_action def startfile(path): """Start a file with its associated application. Like os.startfile(), but with fallbacks for non-Windows platforms. """ try: os.startfile(path) except AttributeError: if sys.platform == 'darwin': subprocess.Popen(['open', path]) else: try: subprocess.Popen(['xdg-open', path]) except OSError: QtGui.QMessageBox.critical(None, _("Open Error"), _("Error while opening file:\n\n%s") % (e,)) class OpenFile(BaseAction): NAME = "Open file" def callback(self, objs): for obj in objs: if isinstance(obj, File): startfile(obj.filename) break elif isinstance(obj, Track): for linked in obj.linked_files: startfile(linked.filename) return class OpenFolder(BaseAction): NAME = "Open folder" def callback(self, objs): folders = set() for obj in objs: if isinstance(obj, File): folders.add(os.path.dirname(obj.filename)) elif isinstance(obj, Track): for linked in obj.linked_files: folders.add(os.path.dirname(linked.filename)) for folder in folders: startfile(folder) register_file_action(OpenFile()) register_file_action(OpenFolder())