1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-22 22:51:39 +00:00

Completed the conversion wo objp with the conversion of PyDupeGuru. I had to temporarily disable error handling though.

--HG--
branch : objp
This commit is contained in:
Virgil Dupras
2012-01-13 14:43:43 -05:00
parent 937ea73c87
commit 950cd0c341
35 changed files with 425 additions and 548 deletions

View File

@@ -1,14 +1,13 @@
import logging
from objp.util import pyref, dontwrap
from jobprogress import job
import cocoa
from cocoa import install_exception_hook, proxy
from cocoa.inter import signature, subproxy, PyFairware
from cocoa.inter2 import PyFairware, FairwareView
from hscommon.trans import trget
from core.app import JobType
from .result_table import PyResultTable
from .stats_label import PyStatsLabel
tr = trget('ui')
@@ -20,129 +19,138 @@ JOBID2TITLE = {
JobType.Delete: tr("Sending to Trash"),
}
class DupeGuruView(FairwareView):
def showExtraFairwareReminder(self): pass
class PyDupeGuruBase(PyFairware):
FOLLOW_PROTOCOLS = ['Worker']
def _init(self, modelclass):
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s')
install_exception_hook()
appdata = proxy.getAppdataPath()
self.py = modelclass(self, appdata)
self.model = modelclass(self, appdata)
self.progress = cocoa.ThreadedJobPerformer()
def bindCocoa_(self, cocoa):
self.cocoa = cocoa
#---Sub-proxies
def detailsPanel(self) -> pyref:
return self.model.details_panel
resultTable = subproxy('resultTable', 'result_table', PyResultTable)
statsLabel = subproxy('statsLabel', 'stats_label', PyStatsLabel)
def directoryTree(self) -> pyref:
return self.model.directory_tree
def extraFairwareReminder(self) -> pyref:
return self.model.extra_fairware_reminder
def prioritizeDialog(self) -> pyref:
return self.model.prioritize_dialog
def statsLabel(self) -> pyref:
return self.model.stats_label
def resultTable(self) -> pyref:
return self.model.result_table
#---Directories
def addDirectory_(self, directory):
return self.py.add_directory(directory)
def addDirectory_(self, directory: str) -> int:
return self.model.add_directory(directory)
#---Results
def clearIgnoreList(self):
self.py.scanner.ignore_list.Clear()
self.model.scanner.ignore_list.Clear()
def doScan(self):
self.py.start_scanning()
self.model.start_scanning()
def exportToXHTML(self):
return self.py.export_to_xhtml()
def exportToXHTML(self) -> str:
return self.model.export_to_xhtml()
def loadSession(self):
self.py.load()
self.model.load()
def loadResultsFrom_(self, filename):
self.py.load_from(filename)
def loadResultsFrom_(self, filename: str):
self.model.load_from(filename)
def markAll(self):
self.py.mark_all()
self.model.mark_all()
def markNone(self):
self.py.mark_none()
self.model.mark_none()
def markInvert(self):
self.py.mark_invert()
self.model.mark_invert()
def purgeIgnoreList(self):
self.py.purge_ignore_list()
self.model.purge_ignore_list()
def toggleSelectedMark(self):
self.py.toggle_selected_mark_state()
self.model.toggle_selected_mark_state()
def saveSession(self):
self.py.save()
self.model.save()
def saveResultsAs_(self, filename):
self.py.save_as(filename)
def saveResultsAs_(self, filename: str):
self.model.save_as(filename)
#---Actions
def addSelectedToIgnoreList(self):
self.py.add_selected_to_ignore_list()
self.model.add_selected_to_ignore_list()
def deleteMarked(self):
self.py.delete_marked()
self.model.delete_marked()
def hardlinkMarked(self):
self.py.delete_marked(replace_with_hardlinks=True)
self.model.delete_marked(replace_with_hardlinks=True)
def applyFilter_(self, filter):
self.py.apply_filter(filter)
def applyFilter_(self, filter: str):
self.model.apply_filter(filter)
def makeSelectedReference(self):
self.py.make_selected_reference()
self.model.make_selected_reference()
def copyOrMove_markedTo_recreatePath_(self, copy, destination, recreate_path):
self.py.copy_or_move_marked(copy, destination, recreate_path)
def copyOrMove_markedTo_recreatePath_(self, copy: bool, destination: str, recreate_path: bool):
self.model.copy_or_move_marked(copy, destination, recreate_path)
def openSelected(self):
self.py.open_selected()
self.model.open_selected()
def removeMarked(self):
self.py.remove_marked()
def renameSelected_(self,newname):
return self.py.rename_selected(newname)
self.model.remove_marked()
def revealSelected(self):
self.py.reveal_selected()
self.model.reveal_selected()
def invokeCommand_(self, cmd):
self.py.invoke_command(cmd)
def invokeCommand_(self, cmd: str):
self.model.invoke_command(cmd)
#---Information
def getIgnoreListCount(self):
return len(self.py.scanner.ignore_list)
def getIgnoreListCount(self) -> int:
return len(self.model.scanner.ignore_list)
def getMarkCount(self):
return self.py.results.mark_count
def getMarkCount(self) -> int:
return self.model.results.mark_count
@signature('i@:')
def scanWasProblematic(self):
return bool(self.py.results.problems)
def scanWasProblematic(self) -> bool:
return bool(self.model.results.problems)
@signature('i@:')
def resultsAreModified(self):
return self.py.results.is_modified
def resultsAreModified(self) -> bool:
return self.model.results.is_modified
#---Properties
@signature('v@:c')
def setMixFileKind_(self, mix_file_kind):
self.py.scanner.mix_file_kind = mix_file_kind
def setMixFileKind_(self, mix_file_kind: bool):
self.model.scanner.mix_file_kind = mix_file_kind
@signature('v@:c')
def setEscapeFilterRegexp_(self, escape_filter_regexp):
self.py.options['escape_filter_regexp'] = escape_filter_regexp
def setEscapeFilterRegexp_(self, escape_filter_regexp: bool):
self.model.options['escape_filter_regexp'] = escape_filter_regexp
@signature('v@:c')
def setRemoveEmptyFolders_(self, remove_empty_folders):
self.py.options['clean_empty_dirs'] = remove_empty_folders
def setRemoveEmptyFolders_(self, remove_empty_folders: bool):
self.model.options['clean_empty_dirs'] = remove_empty_folders
@signature('v@:c')
def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches):
self.py.options['ignore_hardlink_matches'] = ignore_hardlink_matches
def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches: bool):
self.model.options['ignore_hardlink_matches'] = ignore_hardlink_matches
#---Worker
def getJobProgress(self):
def getJobProgress(self) -> object: # NSNumber
try:
return self.progress.last_progress
except AttributeError:
@@ -151,7 +159,7 @@ class PyDupeGuruBase(PyFairware):
# is sent), but it happens anyway, so there we go. ref: #106
return -1
def getJobDesc(self):
def getJobDesc(self) -> str:
try:
return self.progress.last_desc
except AttributeError:
@@ -161,16 +169,19 @@ class PyDupeGuruBase(PyFairware):
def cancelJob(self):
self.progress.job_cancelled = True
def jobCompleted_(self, jobid):
self.py._job_completed(jobid)
def jobCompleted_(self, jobid: str):
self.model._job_completed(jobid)
#--- model --> view
@dontwrap
def open_path(self, path):
proxy.openPath_(str(path))
@dontwrap
def reveal_path(self, path):
proxy.revealPath_(str(path))
@dontwrap
def start_job(self, jobid, func, args=()):
try:
j = self.progress.create_job()
@@ -182,9 +193,7 @@ class PyDupeGuruBase(PyFairware):
ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid}
proxy.postNotification_userInfo_('JobStarted', ud)
@dontwrap
def show_extra_fairware_reminder(self):
self.cocoa.showExtraFairwareReminder()
def show_message(self, msg):
self.cocoa.showMessage_(msg)

View File

@@ -13,9 +13,11 @@ from hscommon import io
from hscommon.path import Path
from cocoa import proxy
from core.scanner import ScanType
from core import fs
from core.directories import Directories as DirectoriesBase, DirectoryState
from core_se.app import DupeGuru as DupeGuruBase
from .app import PyDupeGuruBase
def is_bundle(str_path):
uti = proxy.getUTI_(str_path)
@@ -70,3 +72,33 @@ class DupeGuru(DupeGuruBase):
DupeGuruBase.__init__(self, view, appdata)
self.directories = Directories()
class PyDupeGuru(PyDupeGuruBase):
def __init__(self):
self._init(DupeGuru)
import __main__
__main__.APP_INSTANCE = self.model
#---Properties
def setMinMatchPercentage_(self, percentage: int):
self.model.scanner.min_match_percentage = int(percentage)
def setScanType_(self, scan_type: int):
try:
self.model.scanner.scan_type = [
ScanType.Filename,
ScanType.Contents,
ScanType.Folders,
][scan_type]
except IndexError:
pass
def setWordWeighting_(self, words_are_weighted: bool):
self.model.scanner.word_weighting = words_are_weighted
def setMatchSimilarWords_(self, match_similar_words: bool):
self.model.scanner.match_similar_words = match_similar_words
def setSizeThreshold_(self, size_threshold: int):
self.model.scanner.size_threshold = size_threshold

View File

@@ -1,9 +1,9 @@
from cocoa.inter2 import PyGUIObject2, GUIObjectView
from cocoa.inter2 import PyGUIObject, GUIObjectView
class DetailsPanelView(GUIObjectView):
pass
class PyDetailsPanel(PyGUIObject2):
class PyDetailsPanel(PyGUIObject):
def numberOfRows(self) -> int:
return self.model.row_count()

View File

@@ -1,10 +1,10 @@
from objp.util import dontwrap
from cocoa.inter2 import PyOutline2, GUIObjectView
from cocoa.inter2 import PyOutline, GUIObjectView
class DirectoryOutlineView(GUIObjectView):
pass
class PyDirectoryOutline(PyOutline2):
class PyDirectoryOutline(PyOutline):
def addDirectory_(self, path: str):
self.model.add_directory(path)

View File

@@ -1,5 +1,5 @@
from objp.util import dontwrap
from cocoa.inter2 import PyGUIObject2
from cocoa.inter2 import PyGUIObject
class ExtraFairwareReminderView:
def startTimer(self): pass
@@ -7,7 +7,7 @@ class ExtraFairwareReminderView:
def setButtonText_(self, text: str): pass;
def enableButton(self): pass
class PyExtraFairwareReminder(PyGUIObject2):
class PyExtraFairwareReminder(PyGUIObject):
def start(self):
self.model.start()

View File

@@ -1,10 +1,10 @@
from objp.util import pyref
from cocoa.inter2 import PyGUIObject2, GUIObjectView
from cocoa.inter2 import PyGUIObject, GUIObjectView
class PrioritizeDialogView(GUIObjectView):
pass
class PyPrioritizeDialog(PyGUIObject2):
class PyPrioritizeDialog(PyGUIObject):
def categoryList(self) -> pyref:
return self.model.category_list

View File

@@ -1,8 +1,8 @@
from cocoa.inter2 import PySelectableList2, SelectableListView
from cocoa.inter2 import PySelectableList, SelectableListView
class PrioritizeListView(SelectableListView):
pass
class PyPrioritizeList(PySelectableList2):
class PyPrioritizeList(PySelectableList):
def moveIndexes_toIndex_(self, indexes: list, dest_index: int):
self.model.move_indexes(indexes, dest_index)

View File

@@ -1,7 +1,7 @@
from objp.util import pyref
from cocoa.inter2 import PyGUIObject2
from cocoa.inter2 import PyGUIObject
class PyProblemDialog(PyGUIObject2):
class PyProblemDialog(PyGUIObject):
def problemTable(self) -> pyref:
return self.model.problem_table

View File

@@ -1,10 +1,10 @@
from objp.util import dontwrap
from cocoa.inter2 import PyTable2, TableView
from cocoa.inter2 import PyTable, TableView
class ResultTableView(TableView):
def invalidateMarkings(self): pass
class PyResultTable(PyTable2):
class PyResultTable(PyTable):
def powerMarkerMode(self) -> bool:
return self.model.power_marker

View File

@@ -1,9 +1,9 @@
from cocoa.inter2 import PyGUIObject2, GUIObjectView
from cocoa.inter2 import PyGUIObject, GUIObjectView
class StatsLabelView(GUIObjectView):
pass
class PyStatsLabel(PyGUIObject2):
class PyStatsLabel(PyGUIObject):
def display(self) -> str:
return self.model.display