mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-11-05 15:59:03 +00:00
d1f460b091
--HG-- rename : py/__init__.py => base/py/__init__.py rename : py/app.py => base/py/app.py rename : py/app_cocoa.py => base/py/app_cocoa.py rename : py/app_me_cocoa.py => base/py/app_me_cocoa.py rename : py/app_pe_cocoa.py => base/py/app_pe_cocoa.py rename : py/app_se_cocoa.py => base/py/app_se_cocoa.py rename : py/data.py => base/py/data.py rename : py/data_me.py => base/py/data_me.py rename : py/data_pe.py => base/py/data_pe.py rename : py/directories.py => base/py/directories.py rename : py/engine.py => base/py/engine.py rename : py/export.py => base/py/export.py rename : py/gen.py => base/py/gen.py rename : py/ignore.py => base/py/ignore.py rename : py/modules/block/block.pyx => base/py/modules/block/block.pyx rename : py/modules/block/setup.py => base/py/modules/block/setup.py rename : py/modules/cache/cache.pyx => base/py/modules/cache/cache.pyx rename : py/modules/cache/setup.py => base/py/modules/cache/setup.py rename : py/picture/__init__.py => base/py/picture/__init__.py rename : py/picture/block.py => base/py/picture/block.py rename : py/picture/cache.py => base/py/picture/cache.py rename : py/picture/matchbase.py => base/py/picture/matchbase.py rename : py/results.py => base/py/results.py rename : py/scanner.py => base/py/scanner.py rename : py/tests/__init__.py => base/py/tests/__init__.py rename : py/tests/app_cocoa_test.py => base/py/tests/app_cocoa_test.py rename : py/tests/app_test.py => base/py/tests/app_test.py rename : py/tests/block_test.py => base/py/tests/block_test.py rename : py/tests/cache_test.py => base/py/tests/cache_test.py rename : py/tests/directories_test.py => base/py/tests/directories_test.py rename : py/tests/engine_test.py => base/py/tests/engine_test.py rename : py/tests/export_test.py => base/py/tests/export_test.py rename : py/tests/ignore_test.py => base/py/tests/ignore_test.py rename : py/tests/results_test.py => base/py/tests/results_test.py rename : py/tests/scanner_test.py => base/py/tests/scanner_test.py extra : convert_revision : svn%3Ac306627e-7827-47d3-bdf0-9a457c9553a1/trunk%4074
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Unit Name: dupeguru.app_me_cocoa
|
|
Created By: Virgil Dupras
|
|
Created On: 2006/11/16
|
|
Last modified by:$Author: virgil $
|
|
Last modified on:$Date: 2009-05-28 16:33:32 +0200 (Thu, 28 May 2009) $
|
|
$Revision: 4392 $
|
|
Copyright 2006 Hardcoded Software (http://www.hardcoded.net)
|
|
"""
|
|
import os.path as op
|
|
import logging
|
|
from appscript import app, k, CommandError
|
|
import time
|
|
|
|
from hsutil.cocoa import as_fetch
|
|
import hsfs.phys.music
|
|
|
|
import app_cocoa, data_me, scanner
|
|
|
|
JOB_REMOVE_DEAD_TRACKS = 'jobRemoveDeadTracks'
|
|
JOB_SCAN_DEAD_TRACKS = 'jobScanDeadTracks'
|
|
|
|
app_cocoa.JOBID2TITLE.update({
|
|
JOB_REMOVE_DEAD_TRACKS: "Removing dead tracks from your iTunes Library",
|
|
JOB_SCAN_DEAD_TRACKS: "Scanning the iTunes Library",
|
|
})
|
|
|
|
class DupeGuruME(app_cocoa.DupeGuru):
|
|
def __init__(self):
|
|
app_cocoa.DupeGuru.__init__(self, data_me, 'dupeguru_me', appid=1)
|
|
self.scanner = scanner.ScannerME()
|
|
self.directories.dirclass = hsfs.phys.music.Directory
|
|
self.dead_tracks = []
|
|
|
|
def remove_dead_tracks(self):
|
|
def do(j):
|
|
a = app('iTunes')
|
|
a.activate(timeout=0)
|
|
for index, track in enumerate(j.iter_with_progress(self.dead_tracks)):
|
|
if index % 100 == 0:
|
|
time.sleep(.1)
|
|
try:
|
|
track.delete(timeout=0)
|
|
except CommandError as e:
|
|
logging.warning('Error while trying to remove a track from iTunes: %s' % unicode(e))
|
|
|
|
self._start_job(JOB_REMOVE_DEAD_TRACKS, do)
|
|
|
|
def scan_dead_tracks(self):
|
|
def do(j):
|
|
a = app('iTunes')
|
|
a.activate(timeout=0)
|
|
try:
|
|
[source] = [s for s in a.sources(timeout=0) if s.kind(timeout=0) == k.library]
|
|
[library] = source.library_playlists(timeout=0)
|
|
except ValueError:
|
|
logging.warning('Some unexpected iTunes configuration encountered')
|
|
return
|
|
self.dead_tracks = []
|
|
tracks = as_fetch(library.file_tracks, k.file_track)
|
|
for index, track in enumerate(j.iter_with_progress(tracks)):
|
|
if index % 100 == 0:
|
|
time.sleep(.1)
|
|
if track.location(timeout=0) == k.missing_value:
|
|
self.dead_tracks.append(track)
|
|
logging.info('Found %d dead tracks' % len(self.dead_tracks))
|
|
|
|
self._start_job(JOB_SCAN_DEAD_TRACKS, do)
|
|
|