Finish up OS X Open With implementation

This commit is contained in:
Kovid Goyal 2015-03-07 15:17:54 +05:30
parent afe811111d
commit 527a6217ee
2 changed files with 21 additions and 5 deletions

View File

@ -17,7 +17,7 @@ from PyQt5.Qt import (
from calibre import as_unicode
from calibre.constants import iswindows, isosx
from calibre.gui2 import error_dialog, choose_files, choose_images, elided_text, sanitize_env_vars, Application
from calibre.gui2 import error_dialog, choose_files, choose_images, elided_text, sanitize_env_vars, Application, choose_osx_app
from calibre.gui2.widgets2 import Dialog
from calibre.gui2.progress_indicator import ProgressIndicator
from calibre.utils.config import JSONConfig
@ -125,7 +125,7 @@ if iswindows:
elif isosx:
# OS X {{{
oprefs = JSONConfig('osx_open_with')
from calibre.utils.open_with.osx import find_programs, get_icon, entry_to_cmdline
from calibre.utils.open_with.osx import find_programs, get_icon, entry_to_cmdline, get_bundle_data
def entry_sort_key(entry):
return sort_key(entry.get('name') or '')
@ -148,7 +148,21 @@ elif isosx:
ans.setToolTip(_('Application path:') + '\n' + entry['path'])
def choose_manually(filetype, parent):
raise NotImplementedError()
ans = choose_osx_app(parent, 'choose-open-with-program-manually', _('Choose a program to open %s files') % filetype.upper())
if ans:
ans = ans[0]
if os.path.isdir(ans):
app = get_bundle_data(ans)
if app is None:
return error_dialog(parent, _('Invalid Application'), _(
'%s is not a valid OS X application bundle.') % ans, show=True)
return app
if not os.access(ans, os.X_OK):
return error_dialog(parent, _('Cannot execute'), _(
'The program %s is not an executable file') % ans, show=True)
return {'path':ans, 'name': os.path.basename(ans)}
# }}}
else:

View File

@ -331,6 +331,8 @@ def get_icon(path, pixmap_to_data=None, as_data=False, size=64):
def entry_to_cmdline(entry, path):
app = entry['path']
if not os.path.isdir(app) and 'identifier' in entry:
if os.path.isdir(app):
return ['open', '-a', app, path]
if 'identifier' in entry:
return ['open', '-b', entry['identifier'], path]
return ['open', '-a', app, path]
return [app, path]