Selected PySide 1.x as preferred binding for Qt.py

This commit is contained in:
alby128 2017-10-04 15:03:06 +02:00
parent 2c7a18458d
commit 4a8bd06e1b
7 changed files with 98 additions and 63 deletions

View File

@ -1,43 +1,32 @@
language: objective-c language: objective-c
osx_image: xcode7.3 osx_image: xcode6.4
branches: branches:
only: only:
- pyside2 - qtpy-pyside1
script: script:
- python buildPy2app.py py2app - python buildPy2app.py py2app fix
before_install: before_install:
- curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/fdfc724dd532345f5c6cdf47dc43e99654e6a5fd/Formula/qt5.rb - brew install python
- brew install ./qt5.rb - brew tap cartr/qt4
- which python - brew tap-pin cartr/qt4
- which pip - brew install pyside
- pip install http://syncplay.s3.amazonaws.com/PySide2-5.6-cp27-cp27m-macosx_10_11_x86_64.whl
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libshiboken2-python2.7v.2.0.0.dylib /usr/local/lib/
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libshiboken2-python2.7v.2.0.dylib /usr/local/lib/
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libshiboken2-python2.7v.dylib /usr/local/lib/
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libpyside2-python2.7v.2.0.0.dylib /usr/local/lib/
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libpyside2-python2.7v.2.0.dylib /usr/local/lib/
- ln -s /usr/local/lib/python2.7/site-packages/PySide2/libpyside2-python2.7v.dylib /usr/local/lib/
- python -c "from PySide2 import QtCore"
- hg clone https://alby128@bitbucket.org/alby128/py2app
- cd py2app
- python setup.py install
- python -c "from py2app.recipes import pyside2"
install: install:
- export PATH=/usr/local/bin:$PATH
- pip install twisted appnope pyobjc - export QT_PREFERRED_BINDING="PySide"
- git clone -b pyside2 https://github.com/alby128/syncplay.git syncplay_PySide2 - pip install twisted appnope pyobjc py2app
- cd syncplay_PySide2 - git clone -b qtpy-pyside1 https://github.com/alby128/syncplay.git syncplay-qtpy-pyside1
- git checkout pyside2 - cd syncplay-qtpy-pyside1
- git checkout qtpy-pyside1
before_deploy: before_deploy:
- pip install dmgbuild - pip install dmgbuild
- mkdir dist_dmg - mkdir dist_dmg
- mv resources/macos_vlc_install.command resources/.macos_vlc_install.command - mv resources/macos_vlc_install.command resources/.macos_vlc_install.command
- dmgbuild -s appdmg.py "Syncplay" dist_dmg/Syncplay-PySide2.dmg - dmgbuild -s appdmg.py "Syncplay" dist_dmg/Syncplay-qtpy-pyside1.dmg
deploy: deploy:
provider: s3 provider: s3
@ -49,4 +38,4 @@ deploy:
region: eu-central-1 region: eu-central-1
local_dir: dist_dmg local_dir: dist_dmg
on: on:
branch: pyside2 branch: qtpy-pyside1

View File

@ -5,20 +5,23 @@ Usage:
python setup.py py2app python setup.py py2app
""" """
from setuptools import setup from setuptools import setup, Command
from glob import glob from glob import glob
import shutil
import syncplay import syncplay
cmdlist = {}
APP = ['syncplayClient.py'] APP = ['syncplayClient.py']
DATA_FILES = [ DATA_FILES = [
('resources', glob('resources/*.png') + glob('resources/*.rtf')), ('resources', glob('resources/*.png') + glob('resources/*.rtf')),
] ]
OPTIONS = { OPTIONS = {
'iconfile':'resources/icon.icns', 'iconfile':'resources/icon.icns',
'includes': {'PySide2.QtCore', 'PySide2.QtUiTools', 'PySide2.QtGui','PySide2.QtWidgets'}, 'includes': {'PySide.QtCore', 'PySide.QtUiTools', 'PySide.QtGui'},
'excludes': {'PySide', 'PySide.QtCore', 'PySide.QtUiTools', 'PySide.QtGui'}, 'excludes': {'PySide2', 'PySide2.QtCore', 'PySide2.QtUiTools', 'PySide2.QtGui','PySide2.QtWidgets', 'PyQt5'},
'qt_plugins': ['platforms/libqcocoa.dylib', 'platforms/libqminimal.dylib','platforms/libqoffscreen.dylib'], 'dylib_excludes': {'QtDesigner.framework', 'QtScript.framework'},
'plist': { 'plist': {
'CFBundleName':'Syncplay', 'CFBundleName':'Syncplay',
'CFBundleShortVersionString':syncplay.version, 'CFBundleShortVersionString':syncplay.version,
'CFBundleIdentifier':'pl.syncplay.Syncplay', 'CFBundleIdentifier':'pl.syncplay.Syncplay',
@ -26,10 +29,32 @@ OPTIONS = {
} }
} }
class Fix(Command):
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def trim_packages(self):
"""Remove big files in external dependencies that Syncplay doesn't need"""
shutil.rmtree('dist/Syncplay.app/Contents/Frameworks/QtDesigner.framework', ignore_errors=True)
shutil.rmtree('dist/Syncplay.app/Contents/Frameworks/QtScript.framework', ignore_errors=True)
shutil.rmtree('dist/Syncplay.app/Contents/Frameworks/QtXml.framework', ignore_errors=True)
def run(self):
self.trim_packages()
cmdlist['fix'] = Fix
setup( setup(
app=APP, app=APP,
name='Syncplay', name='Syncplay',
data_files=DATA_FILES, data_files=DATA_FILES,
options={'py2app': OPTIONS}, options={'py2app': OPTIONS},
setup_requires=['py2app'], setup_requires=['py2app'],
cmdclass=cmdlist
) )

View File

@ -400,19 +400,19 @@ class ConfigurationGetter(object):
sys.exit() sys.exit()
self._overrideConfigWithArgs(args) self._overrideConfigWithArgs(args)
if not self._config['noGui']: if not self._config['noGui']:
try: # try:
from syncplay.vendor.Qt import QtWidgets from syncplay.vendor.Qt import QtWidgets
from syncplay.vendor.Qt.QtCore import QCoreApplication from syncplay.vendor.Qt.QtCore import QCoreApplication
from syncplay.vendor import qt5reactor from syncplay.vendor import qt5reactor
if QCoreApplication.instance() is None: if QCoreApplication.instance() is None:
self.app = QtWidgets.QApplication(sys.argv) self.app = QtWidgets.QApplication(sys.argv)
qt5reactor.install() qt5reactor.install()
if sys.platform.startswith('darwin'): if sys.platform.startswith('darwin'):
import appnope import appnope
appnope.nope() appnope.nope()
except ImportError: # except ImportError:
print getMessage("unable-import-gui-error") # print getMessage("unable-import-gui-error")
self._config['noGui'] = True # self._config['noGui'] = True
if self._config['file'] and self._config['file'][:2] == "--": if self._config['file'] and self._config['file'][:2] == "--":
self._config['playerArgs'].insert(0, self._config['file']) self._config['playerArgs'].insert(0, self._config['file'])
self._config['file'] = None self._config['file'] = None

View File

@ -1,8 +1,7 @@
from syncplay.vendor.Qt import QtCore, QtWidgets, QtGui, __binding__ from syncplay.vendor.Qt import QtCore, QtWidgets, QtGui, __binding__
from syncplay.vendor.Qt.QtCore import Qt, QSettings, QCoreApplication, QSize, QPoint, QUrl, QLine from syncplay.vendor.Qt.QtCore import Qt, QSettings, QCoreApplication, QSize, QPoint, QUrl, QLine
from syncplay.vendor.Qt.QtWidgets import QApplication, QLineEdit, QLabel, QCheckBox, QButtonGroup, QRadioButton, QDoubleSpinBox, QPlainTextEdit from syncplay.vendor.Qt.QtWidgets import QApplication, QLineEdit, QLabel, QCheckBox, QButtonGroup, QRadioButton, QDoubleSpinBox, QPlainTextEdit
from syncplay.vendor.Qt.QtGui import QCursor, QIcon, QImage from syncplay.vendor.Qt.QtGui import QCursor, QIcon, QImage, QDesktopServices
from PySide2.QtCore import QStandardPaths
from syncplay.players.playerFactory import PlayerFactory from syncplay.players.playerFactory import PlayerFactory
from datetime import datetime from datetime import datetime
from syncplay import utils from syncplay import utils
@ -347,10 +346,10 @@ class ConfigDialog(QtWidgets.QDialog):
defaultdirectory = self.config["mediaSearchDirectories"][0] defaultdirectory = self.config["mediaSearchDirectories"][0]
elif os.path.isdir(self.mediadirectory): elif os.path.isdir(self.mediadirectory):
defaultdirectory = self.mediadirectory defaultdirectory = self.mediadirectory
elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0]): elif os.path.isdir(QDesktopServices.storageLocation(QDesktopServices.MoviesLocation)):
defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0] defaultdirectory = QDesktopServices.storageLocation(QDesktopServices.MoviesLocation)
elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0]): elif os.path.isdir(QDesktopServices.storageLocation(QDesktopServices.HomeLocation)):
defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0] defaultdirectory = QDesktopServices.storageLocation(QDesktopServices.HomeLocation)
else: else:
defaultdirectory = "" defaultdirectory = ""
browserfilter = "All files (*)" browserfilter = "All files (*)"

View File

@ -1,7 +1,6 @@
from syncplay.vendor import Qt from syncplay.vendor import Qt
from syncplay.vendor.Qt import QtWidgets, QtGui, __binding__ from syncplay.vendor.Qt import QtWidgets, QtGui, __binding__
from syncplay.vendor.Qt.QtCore import Qt, QSettings, QSize, QPoint, QUrl, QLine, QDateTime from syncplay.vendor.Qt.QtCore import Qt, QSettings, QSize, QPoint, QUrl, QLine, QDateTime
from PySide2.QtCore import QStandardPaths
from syncplay import utils, constants, version, release_number from syncplay import utils, constants, version, release_number
from syncplay.messages import getMessage from syncplay.messages import getMessage
import sys import sys
@ -13,6 +12,8 @@ import os
from syncplay.utils import formatTime, sameFilename, sameFilesize, sameFileduration, RoomPasswordProvider, formatSize, isURL from syncplay.utils import formatTime, sameFilename, sameFilesize, sameFileduration, RoomPasswordProvider, formatSize, isURL
from functools import wraps from functools import wraps
from twisted.internet import task from twisted.internet import task
if sys.platform.startswith('darwin'):
from Foundation import NSURL
lastCheckedForUpdates = None lastCheckedForUpdates = None
class UserlistItemDelegate(QtWidgets.QStyledItemDelegate): class UserlistItemDelegate(QtWidgets.QStyledItemDelegate):
@ -214,7 +215,10 @@ class MainWindow(QtWidgets.QMainWindow):
indexRow = window.playlist.count() if window.clearedPlaylistNote else 0 indexRow = window.playlist.count() if window.clearedPlaylistNote else 0
for url in urls[::-1]: for url in urls[::-1]:
dropfilepath = os.path.abspath(unicode(url.toLocalFile())) if sys.platform.startswith('darwin'):
dropfilepath = os.path.abspath(NSURL.URLWithString_(str(url.toString())).filePathURL().path())
else:
dropfilepath = os.path.abspath(unicode(url.toLocalFile()))
if os.path.isfile(dropfilepath): if os.path.isfile(dropfilepath):
window.addFileToPlaylist(dropfilepath, indexRow) window.addFileToPlaylist(dropfilepath, indexRow)
elif os.path.isdir(dropfilepath): elif os.path.isdir(dropfilepath):
@ -316,7 +320,10 @@ class MainWindow(QtWidgets.QMainWindow):
if indexRow == -1: if indexRow == -1:
indexRow = window.playlist.count() indexRow = window.playlist.count()
for url in urls[::-1]: for url in urls[::-1]:
dropfilepath = os.path.abspath(unicode(url.toLocalFile())) if sys.platform.startswith('darwin'):
dropfilepath = os.path.abspath(NSURL.URLWithString_(str(url.toString())).filePathURL().path())
else:
dropfilepath = os.path.abspath(unicode(url.toLocalFile()))
if os.path.isfile(dropfilepath): if os.path.isfile(dropfilepath):
window.addFileToPlaylist(dropfilepath, indexRow) window.addFileToPlaylist(dropfilepath, indexRow)
elif os.path.isdir(dropfilepath): elif os.path.isdir(dropfilepath):
@ -819,10 +826,10 @@ class MainWindow(QtWidgets.QMainWindow):
defaultdirectory = self.config["mediaSearchDirectories"][0] defaultdirectory = self.config["mediaSearchDirectories"][0]
elif includeUserSpecifiedDirectories and os.path.isdir(self.mediadirectory): elif includeUserSpecifiedDirectories and os.path.isdir(self.mediadirectory):
defaultdirectory = self.mediadirectory defaultdirectory = self.mediadirectory
elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0]): elif os.path.isdir(QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MoviesLocation)):
defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.MoviesLocation)[0] defaultdirectory = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MoviesLocation)
elif os.path.isdir(QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0]): elif os.path.isdir(QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.HomeLocation)):
defaultdirectory = QStandardPaths.standardLocations(QStandardPaths.HomeLocation)[0] defaultdirectory = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.HomeLocation)
else: else:
defaultdirectory = "" defaultdirectory = ""
return defaultdirectory return defaultdirectory
@ -834,7 +841,10 @@ class MainWindow(QtWidgets.QMainWindow):
return return
self.loadMediaBrowseSettings() self.loadMediaBrowseSettings()
options = QtWidgets.QFileDialog.Options() if sys.platform.startswith('darwin'):
options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.DontUseNativeDialog)
else:
options = QtWidgets.QFileDialog.Options()
self.mediadirectory = "" self.mediadirectory = ""
currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None
if currentdirectory and os.path.isdir(currentdirectory): if currentdirectory and os.path.isdir(currentdirectory):
@ -859,7 +869,10 @@ class MainWindow(QtWidgets.QMainWindow):
return return
self.loadMediaBrowseSettings() self.loadMediaBrowseSettings()
options = QtWidgets.QFileDialog.Options() if sys.platform.startswith('darwin'):
options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.DontUseNativeDialog)
else:
options = QtWidgets.QFileDialog.Options()
self.mediadirectory = "" self.mediadirectory = ""
currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None
if currentdirectory and os.path.isdir(currentdirectory): if currentdirectory and os.path.isdir(currentdirectory):
@ -1007,7 +1020,12 @@ class MainWindow(QtWidgets.QMainWindow):
@needsClient @needsClient
def openAddMediaDirectoryDialog(self, MediaDirectoriesTextbox, MediaDirectoriesDialog): def openAddMediaDirectoryDialog(self, MediaDirectoriesTextbox, MediaDirectoriesDialog):
folderName = unicode(QtWidgets.QFileDialog.getExistingDirectory(self,None,self.getInitialMediaDirectory(includeUserSpecifiedDirectories=False),QtWidgets.QFileDialog.ShowDirsOnly)) if sys.platform.startswith('darwin'):
options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.ShowDirsOnly | QtWidgets.QFileDialog.DontUseNativeDialog)
else:
options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.ShowDirsOnly)
folderName = unicode(QtGui.QFileDialog.getExistingDirectory(self,None,self.getInitialMediaDirectory(includeUserSpecifiedDirectories=False),options))
if folderName: if folderName:
existingMediaDirs = MediaDirectoriesTextbox.toPlainText() existingMediaDirs = MediaDirectoriesTextbox.toPlainText()
if existingMediaDirs == "": if existingMediaDirs == "":
@ -1543,7 +1561,10 @@ class MainWindow(QtWidgets.QMainWindow):
data = event.mimeData() data = event.mimeData()
urls = data.urls() urls = data.urls()
if urls and urls[0].scheme() == 'file': if urls and urls[0].scheme() == 'file':
dropfilepath = os.path.abspath(unicode(event.mimeData().urls()[0].toLocalFile())) if sys.platform.startswith('darwin'):
dropfilepath = os.path.abspath(NSURL.URLWithString_(str(url.toString())).filePathURL().path())
else:
dropfilepath = os.path.abspath(unicode(url.toLocalFile()))
if rewindFile == False: if rewindFile == False:
self._syncplayClient._player.openFile(dropfilepath) self._syncplayClient._player.openFile(dropfilepath)
else: else:

View File

@ -1032,7 +1032,7 @@ def _pyside2():
def _pyside(): def _pyside():
"""Initialise PySide""" """Initialise PySide"""
import PySide as module import PySide as module
_setup(module, ["QtUiTools"]) _setup(module, ["QtUiTools"])
@ -1433,6 +1433,7 @@ def _cli(args):
def _install(): def _install():
# Default order (customise order and content via QT_PREFERRED_BINDING) # Default order (customise order and content via QT_PREFERRED_BINDING)
default_order = ("PySide2", "PyQt5", "PySide", "PyQt4") default_order = ("PySide2", "PyQt5", "PySide", "PyQt4")
preferred_order = list( preferred_order = list(
b for b in QT_PREFERRED_BINDING.split(os.pathsep) if b b for b in QT_PREFERRED_BINDING.split(os.pathsep) if b
) )

View File

@ -106,7 +106,7 @@ Subsequent port by therve
import sys import sys
from PySide2.QtCore import ( from syncplay.vendor.Qt.QtCore import (
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer, Signal) QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer, Signal)
from twisted.internet import posixbase from twisted.internet import posixbase
from twisted.internet.interfaces import IReactorFDSet from twisted.internet.interfaces import IReactorFDSet