mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-30 13:19:26 +00:00
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
# -*- 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())
|