mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-25 08:01:39 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2204fe3355 | ||
|
|
abcd774c9d | ||
|
|
ee209f8f88 | ||
|
|
b1f2e1c191 | ||
|
|
33f372f6c6 | ||
|
|
8e5c2a8875 | ||
|
|
36f3638ae4 | ||
|
|
d10210011f | ||
|
|
e867840d81 | ||
|
|
fb7e3189a8 | ||
|
|
5733c0143b | ||
|
|
ac4881f231 | ||
|
|
939efd7dab | ||
|
|
a93d96d742 |
3
.hgtags
3
.hgtags
@@ -24,3 +24,6 @@ f71d405e62badcfdc1b037facaac043cece40ee5 se2.10.1
|
|||||||
3742e83edd9eadf44e1a501859f5e2462b1ef6fd me5.8.1
|
3742e83edd9eadf44e1a501859f5e2462b1ef6fd me5.8.1
|
||||||
724ff565dd785fb739774588c6ee652cfc0612d5 pe1.9.1
|
724ff565dd785fb739774588c6ee652cfc0612d5 pe1.9.1
|
||||||
634b66415c6529f46ae4f837318027cc9d70c3b5 before-py3k
|
634b66415c6529f46ae4f837318027cc9d70c3b5 before-py3k
|
||||||
|
2b67955db2b0580a8b0854dc918b6ab0d1fa3b88 se2.11.0
|
||||||
|
b56fe4dd8c95bca270b078a09e86848df77e2b2d me5.9.0
|
||||||
|
618a7365457d56fdc6920c70843a244762e2ea00 pe1.10.0
|
||||||
|
|||||||
7
README
7
README
@@ -45,7 +45,7 @@ Windows prerequisites
|
|||||||
---
|
---
|
||||||
|
|
||||||
- Visual Studio 2008 (Express is enough) is needed to build C extensions. (http://www.microsoft.com/Express/)
|
- Visual Studio 2008 (Express is enough) is needed to build C extensions. (http://www.microsoft.com/Express/)
|
||||||
- PyQt 4.7 (http://www.riverbankcomputing.co.uk/news)
|
- PyQt 4.7.5 (http://www.riverbankcomputing.co.uk/news)
|
||||||
- cx_Freeze, if you want to build a exe. You don't need it if you just want to run dupeGuru. (http://cx-freeze.sourceforge.net/)
|
- cx_Freeze, if you want to build a exe. You don't need it if you just want to run dupeGuru. (http://cx-freeze.sourceforge.net/)
|
||||||
- Advanced Installer, if you want to build the installer file. (http://www.advancedinstaller.com/)
|
- Advanced Installer, if you want to build the installer file. (http://www.advancedinstaller.com/)
|
||||||
|
|
||||||
@@ -66,8 +66,3 @@ Then, just build the thing and then run it with:
|
|||||||
If you want to create ready-to-upload package, run:
|
If you want to create ready-to-upload package, run:
|
||||||
|
|
||||||
python package.py
|
python package.py
|
||||||
|
|
||||||
64-bit on OS X
|
|
||||||
---
|
|
||||||
|
|
||||||
The "release" configuration of dupeGuru's XCode project build with archs "i386 x86_64 ppc". However there are currently problems with py2app and 64 bit. If you want to correctly build 64-bit apps, refer to http://www.hardcoded.net/articles/building-64-bit-pyobjc-applications-with-py2app.htm .
|
|
||||||
4
build.py
4
build.py
@@ -105,8 +105,8 @@ def build_pe_modules(ui):
|
|||||||
move('_block_osx.so', op.join('core_pe', '_block_osx.so'))
|
move('_block_osx.so', op.join('core_pe', '_block_osx.so'))
|
||||||
move('_cache.so', op.join('core_pe', '_cache.so'))
|
move('_cache.so', op.join('core_pe', '_cache.so'))
|
||||||
move('_cache.pyd', op.join('core_pe', '_cache.pyd'))
|
move('_cache.pyd', op.join('core_pe', '_cache.pyd'))
|
||||||
move('_block_qt.so', op.join('qt', 'pe', '_block.so'))
|
move('_block_qt.so', op.join('qt', 'pe', '_block_qt.so'))
|
||||||
move('_block_qt.pyd', op.join('qt', 'pe', '_block.pyd'))
|
move('_block_qt.pyd', op.join('qt', 'pe', '_block_qt.pyd'))
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
conf = yaml.load(open('conf.yaml'))
|
conf = yaml.load(open('conf.yaml'))
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>hsft</string>
|
<string>hsft</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>5.8.1</string>
|
<string>5.9.1</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
|
|||||||
@@ -11,10 +11,16 @@ from core_me.app_cocoa import DupeGuruME
|
|||||||
from core.scanner import ScanType
|
from core.scanner import ScanType
|
||||||
|
|
||||||
# Fix py2app imports which chokes on relative imports and other stuff
|
# Fix py2app imports which chokes on relative imports and other stuff
|
||||||
from core_me import app_cocoa, data, fs, scanner
|
import core_me.app_cocoa, core_me.data, core_me.fs, core_me.scanner
|
||||||
|
import hsaudiotag.aiff, hsaudiotag.flac, hsaudiotag.genres, hsaudiotag.id3v1,\
|
||||||
|
hsaudiotag.id3v2, hsaudiotag.mp4, hsaudiotag.mpeg, hsaudiotag.ogg, hsaudiotag.wma
|
||||||
from hsaudiotag import aiff, flac, genres, id3v1, id3v2, mp4, mpeg, ogg, wma
|
from hsaudiotag import aiff, flac, genres, id3v1, id3v2, mp4, mpeg, ogg, wma
|
||||||
|
import hsutil.conflict
|
||||||
|
import core.engine, core.fs, core.app
|
||||||
import xml.etree.ElementPath
|
import xml.etree.ElementPath
|
||||||
import gzip
|
import gzip
|
||||||
|
import aem.kae
|
||||||
|
import appscript.defaultterminology
|
||||||
|
|
||||||
class PyDupeGuru(PyDupeGuruBase):
|
class PyDupeGuru(PyDupeGuruBase):
|
||||||
def init(self):
|
def init(self):
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>hsft</string>
|
<string>hsft</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.9.1</string>
|
<string>1.10.0</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
# which should be included with this package. The terms are also available at
|
# which should be included with this package. The terms are also available at
|
||||||
# http://www.hardcoded.net/licenses/hs_license
|
# http://www.hardcoded.net/licenses/hs_license
|
||||||
|
|
||||||
import tempfile
|
|
||||||
import os.path as op
|
import os.path as op
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
@@ -131,7 +130,7 @@ def export_to_xhtml(colnames, rows):
|
|||||||
content = MAIN_TEMPLATE.replace('$colheaders', colheaders).replace('$rows', rendered_rows)
|
content = MAIN_TEMPLATE.replace('$colheaders', colheaders).replace('$rows', rendered_rows)
|
||||||
folder = mkdtemp()
|
folder = mkdtemp()
|
||||||
destpath = op.join(folder, 'export.htm')
|
destpath = op.join(folder, 'export.htm')
|
||||||
fp = open(destpath, 'w')
|
fp = open(destpath, 'wt', encoding='utf-8')
|
||||||
fp.write(content.encode('utf-8'))
|
fp.write(content)
|
||||||
fp.close()
|
fp.close()
|
||||||
return destpath
|
return destpath
|
||||||
|
|||||||
1
debian_me/compat
Normal file
1
debian_me/compat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
7
|
||||||
@@ -8,5 +8,5 @@ Homepage: http://www.hardcoded.net
|
|||||||
|
|
||||||
Package: dupeguru-me
|
Package: dupeguru-me
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: python (>= 2.6), python-qt4 (>= 4.6)
|
Depends: python3 (>= 3.1)
|
||||||
Description: dupeGuru Music Edition
|
Description: dupeGuru Music Edition
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ install: build
|
|||||||
dh_installdirs
|
dh_installdirs
|
||||||
|
|
||||||
chmod +x src/start.py
|
chmod +x src/start.py
|
||||||
cp -R src/ $(CURDIR)/debian/tmp/usr/local/share/dupeguru_me
|
cp -R src/ $(CURDIR)/debian/dupeguru-me/usr/local/share/dupeguru_me
|
||||||
cp $(CURDIR)/debian/dupeguru_me.desktop $(CURDIR)/debian/tmp/usr/share/applications
|
cp $(CURDIR)/debian/dupeguru_me.desktop $(CURDIR)/debian/dupeguru-me/usr/share/applications
|
||||||
ln -s /usr/local/share/dupeguru_me/start.py $(CURDIR)/debian/tmp/usr/local/bin/dupeguru_me
|
ln -s /usr/local/share/dupeguru_me/start.py $(CURDIR)/debian/dupeguru-me/usr/local/bin/dupeguru_me
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
# Build architecture-independent files here.
|
||||||
|
|||||||
1
debian_pe/compat
Normal file
1
debian_pe/compat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
7
|
||||||
@@ -8,5 +8,5 @@ Homepage: http://www.hardcoded.net
|
|||||||
|
|
||||||
Package: dupeguru-pe
|
Package: dupeguru-pe
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: python (>= 2.6), python-qt4 (>= 4.6), python-imaging (>= 1.1.6)
|
Depends: python3 (>= 3.1)
|
||||||
Description: dupeGuru Picture Edition
|
Description: dupeGuru Picture Edition
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ install: build
|
|||||||
dh_installdirs
|
dh_installdirs
|
||||||
|
|
||||||
chmod +x src/start.py
|
chmod +x src/start.py
|
||||||
cp -R src/ $(CURDIR)/debian/tmp/usr/local/share/dupeguru_pe
|
cp -R src/ $(CURDIR)/debian/dupeguru-pe/usr/local/share/dupeguru_pe
|
||||||
cp $(CURDIR)/debian/dupeguru_pe.desktop $(CURDIR)/debian/tmp/usr/share/applications
|
cp $(CURDIR)/debian/dupeguru_pe.desktop $(CURDIR)/debian/dupeguru-pe/usr/share/applications
|
||||||
ln -s /usr/local/share/dupeguru_pe/start.py $(CURDIR)/debian/tmp/usr/local/bin/dupeguru_pe
|
ln -s /usr/local/share/dupeguru_pe/start.py $(CURDIR)/debian/dupeguru-pe/usr/local/bin/dupeguru_pe
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
# Build architecture-independent files here.
|
||||||
|
|||||||
@@ -1,3 +1,17 @@
|
|||||||
|
- date: 2010-08-24
|
||||||
|
version: 5.9.1
|
||||||
|
description: |
|
||||||
|
* Fixed HTML exporting which was broken in 5.9.0.
|
||||||
|
* Fixed Xing-encoded mpeg decoding which was broken in 5.9.0.
|
||||||
|
- date: 2010-08-20
|
||||||
|
version: 5.9.0
|
||||||
|
description: |
|
||||||
|
* Added the ability to save results (and reload them) at arbitrary locations.
|
||||||
|
* Improved the way reference files in dupe groups are chosen. (#15)
|
||||||
|
* Remember size/position of all windows between launches. (#102)
|
||||||
|
* Fixed a bug sometimes preventing dupeGuru from reloading previous results.
|
||||||
|
* Fixed a bug sometimes causing the progress dialog to be stuck there. [Mac OS X] (#103)
|
||||||
|
* Removed the Creation Date column, which wasn't displaying the correct value anyway. (#101)
|
||||||
- date: 2010-07-16
|
- date: 2010-07-16
|
||||||
version: 5.8.1
|
version: 5.8.1
|
||||||
description: |
|
description: |
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ base:
|
|||||||
skeleton: skeleton
|
skeleton: skeleton
|
||||||
changelog: changelog.yaml
|
changelog: changelog.yaml
|
||||||
tixurl: "https://hardcoded.lighthouseapp.com/projects/31699-dupeguru/tickets/{0}"
|
tixurl: "https://hardcoded.lighthouseapp.com/projects/31699-dupeguru/tickets/{0}"
|
||||||
firstpage_meta: "<meta name=\"AppleTitle\" content=\"dupeGuru Help\"></meta>"
|
firstpage_meta: "<meta name=\"AppleTitle\" content=\"dupeGuru ME Help\"></meta>"
|
||||||
|
|||||||
@@ -1,3 +1,12 @@
|
|||||||
|
- date: 2010-08-21
|
||||||
|
version: 1.10.0
|
||||||
|
description: |
|
||||||
|
* Added the ability to save results (and reload them) at arbitrary locations.
|
||||||
|
* Improved the way reference files in dupe groups are chosen. (#15)
|
||||||
|
* Remember size/position of all windows between launches. (#102)
|
||||||
|
* Fixed a bug sometimes preventing dupeGuru from reloading previous results.
|
||||||
|
* Fixed a bug sometimes causing the progress dialog to be stuck there. [Mac OS X] (#103)
|
||||||
|
* Removed the Creation Date column, which wasn't displaying the correct value anyway. (#101)
|
||||||
- date: 2010-07-17
|
- date: 2010-07-17
|
||||||
version: 1.9.1
|
version: 1.9.1
|
||||||
description: |
|
description: |
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ def package_windows(edition, dev):
|
|||||||
return
|
return
|
||||||
add_to_pythonpath('.')
|
add_to_pythonpath('.')
|
||||||
add_to_pythonpath('qt')
|
add_to_pythonpath('qt')
|
||||||
add_to_pythonpath(op.join('qt', 'base'))
|
|
||||||
add_to_pythonpath(op.join('qt', edition))
|
add_to_pythonpath(op.join('qt', edition))
|
||||||
os.chdir(op.join('qt', edition))
|
os.chdir(op.join('qt', edition))
|
||||||
from app import DupeGuru
|
from app import DupeGuru
|
||||||
@@ -74,7 +73,6 @@ def package_windows(edition, dev):
|
|||||||
|
|
||||||
def package_debian(edition):
|
def package_debian(edition):
|
||||||
add_to_pythonpath('qt')
|
add_to_pythonpath('qt')
|
||||||
add_to_pythonpath(op.join('qt', 'base'))
|
|
||||||
add_to_pythonpath(op.join('qt', edition))
|
add_to_pythonpath(op.join('qt', edition))
|
||||||
from app import DupeGuru
|
from app import DupeGuru
|
||||||
|
|
||||||
|
|||||||
@@ -463,7 +463,7 @@
|
|||||||
<customwidget>
|
<customwidget>
|
||||||
<class>ResultsView</class>
|
<class>ResultsView</class>
|
||||||
<extends>QTreeView</extends>
|
<extends>QTreeView</extends>
|
||||||
<header>results_model</header>
|
<header>.results_model</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class DupeGuru(DupeGuruBase):
|
|||||||
EDITION = 'me'
|
EDITION = 'me'
|
||||||
LOGO_NAME = 'logo_me'
|
LOGO_NAME = 'logo_me'
|
||||||
NAME = 'dupeGuru Music Edition'
|
NAME = 'dupeGuru Music Edition'
|
||||||
VERSION = '5.8.1'
|
VERSION = '5.9.1'
|
||||||
DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7])
|
DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7])
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
|
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
|
||||||
#
|
#
|
||||||
# This software is licensed under the "HS" License as described in the "LICENSE" file,
|
# This software is licensed under the "HS" License as described in the "LICENSE" file,
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class DupeGuru(DupeGuruBase):
|
|||||||
EDITION = 'pe'
|
EDITION = 'pe'
|
||||||
LOGO_NAME = 'logo_pe'
|
LOGO_NAME = 'logo_pe'
|
||||||
NAME = 'dupeGuru Picture Edition'
|
NAME = 'dupeGuru Picture Edition'
|
||||||
VERSION = '1.9.1'
|
VERSION = '1.10.0'
|
||||||
DELTA_COLUMNS = frozenset([2, 5])
|
DELTA_COLUMNS = frozenset([2, 5])
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
# which should be included with this package. The terms are also available at
|
# which should be included with this package. The terms are also available at
|
||||||
# http://www.hardcoded.net/licenses/hs_license
|
# http://www.hardcoded.net/licenses/hs_license
|
||||||
|
|
||||||
from _block import getblocks
|
from _block_qt import getblocks
|
||||||
|
|
||||||
# Converted to C
|
# Converted to C
|
||||||
# def getblock(image):
|
# def getblock(image):
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ static PyMethodDef BlockMethods[] = {
|
|||||||
|
|
||||||
static struct PyModuleDef BlockDef = {
|
static struct PyModuleDef BlockDef = {
|
||||||
PyModuleDef_HEAD_INIT,
|
PyModuleDef_HEAD_INIT,
|
||||||
"_block",
|
"_block_qt",
|
||||||
NULL,
|
NULL,
|
||||||
-1,
|
-1,
|
||||||
BlockMethods,
|
BlockMethods,
|
||||||
@@ -170,7 +170,7 @@ static struct PyModuleDef BlockDef = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyInit__block(void)
|
PyInit__block_qt(void)
|
||||||
{
|
{
|
||||||
PyObject *m = PyModule_Create(&BlockDef);
|
PyObject *m = PyModule_Create(&BlockDef);
|
||||||
if (m == NULL) {
|
if (m == NULL) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
|
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
|
||||||
#
|
#
|
||||||
# This software is licensed under the "HS" License as described in the "LICENSE" file,
|
# This software is licensed under the "HS" License as described in the "LICENSE" file,
|
||||||
|
|||||||
@@ -15,11 +15,6 @@ from PyQt4.QtGui import QApplication, QIcon, QPixmap
|
|||||||
|
|
||||||
import base.dg_rc
|
import base.dg_rc
|
||||||
|
|
||||||
if sys.platform == 'linux2':
|
|
||||||
# Under Python3, we have to add 'base' to pythonpath because UI files don't use
|
|
||||||
# relative imports.
|
|
||||||
sys.path.append(os.path.dirname(base.dg_rc.__file__))
|
|
||||||
|
|
||||||
from app import DupeGuru
|
from app import DupeGuru
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
|
|||||||
1
run.py
1
run.py
@@ -32,7 +32,6 @@ def main():
|
|||||||
elif ui == 'qt':
|
elif ui == 'qt':
|
||||||
add_to_pythonpath('.')
|
add_to_pythonpath('.')
|
||||||
add_to_pythonpath('qt')
|
add_to_pythonpath('qt')
|
||||||
add_to_pythonpath(op.join('qt', 'base'))
|
|
||||||
os.chdir(op.join('qt', edition))
|
os.chdir(op.join('qt', edition))
|
||||||
os.system('{0} start.py'.format(sys.executable))
|
os.system('{0} start.py'.format(sys.executable))
|
||||||
os.chdir('..')
|
os.chdir('..')
|
||||||
|
|||||||
Reference in New Issue
Block a user