Skip to content

Commit ae251f6

Browse files
committed
Make Redate available for all games RRR
Useful for newer games, since the CK still uses modification times to determine its load order. Also the reason why LOOT still offers the option for newer games. However, its implementation was erronously using attrgetter('mtime'), which hardcodes the mtime=LO assumption, making it unusable as-is for newer games. Changed it to use our LO API instead. Mod_Redate -> File_Redate Preparation so that it can be added to all tabs, since it will be a must have for the Morrowind BSA tab and I'm sure someone can come up with a usage in other tabs at some point - plus swiss army knife and all that ;) Under # 309 <--- RRR
1 parent 7531349 commit ae251f6

2 files changed

Lines changed: 45 additions & 32 deletions

File tree

Mopy/bash/basher/files_links.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@
2323
# =============================================================================
2424

2525
import re
26+
import time
2627
from .. import bass, balt, bosh, bush, bolt, exception
2728
from ..balt import ItemLink, RadioLink, ChoiceLink, OneItemLink
2829
from ..bolt import GPath
29-
from ..localize import format_date
30+
from ..localize import format_date, unformat_date
3031

3132
__all__ = ['Files_SortBy', 'Files_Unhide', 'File_Backup', 'File_Duplicate',
3233
'File_Snapshot', 'File_RevertToBackup', 'File_RevertToSnapshot',
33-
'File_ListMasters']
34+
'File_ListMasters', 'File_Redate']
3435

3536
#------------------------------------------------------------------------------
3637
# Files Links -----------------------------------------------------------------
@@ -301,3 +302,37 @@ def Execute(self):
301302
class File_RevertToBackup(ChoiceLink):
302303
"""Revert to last or first backup."""
303304
extraItems = [_RevertBackup(), _RevertBackup(first=True)]
305+
306+
class File_Redate(ItemLink):
307+
"""Move the selected files to start at a specified date."""
308+
_text = _(u'Redate...')
309+
_help = _(u'Change the modification time(s) of the selected file(s) to '
310+
u'start at a specified date.')
311+
312+
@balt.conversation
313+
def Execute(self):
314+
# Ask user for revised time and parse it
315+
new_time_input = self._askText(
316+
_(u'Redate selected file(s) starting at...'),
317+
title=_(u'Redate Files'), default=format_date(int(time.time())))
318+
if not new_time_input: return
319+
try:
320+
new_time = int(time.mktime(unformat_date(new_time_input, '%c')))
321+
except ValueError:
322+
self._showError(_(u'Unrecognized date: ') + new_time_input)
323+
return
324+
# Perform the redate process and refresh
325+
for to_redate in self._infos_to_redate():
326+
to_redate.setmtime(new_time)
327+
new_time += 60
328+
self._perform_refresh()
329+
self.window.RefreshUI(refreshSaves=True)
330+
331+
# Overrides for Mod_Redate
332+
def _infos_to_redate(self):
333+
"""Returns an iterable of the FileInfo instances to redate."""
334+
return self.iselected_infos()
335+
336+
def _perform_refresh(self):
337+
"""Refreshes the data store - """
338+
self.window.data_store.refresh(refresh_infos=False)

Mopy/bash/basher/mod_links.py

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,9 @@
2929
import collections
3030
import copy
3131
import re
32-
import time
33-
from operator import attrgetter
3432
# Local
3533
from .constants import settingDefaults
34+
from .files_links import File_Redate
3635
from .frames import DocBrowser
3736
from .patcher_dialog import PatchDialog, CBash_gui_patchers, PBash_gui_patchers
3837
from .. import bass, bosh, bolt, balt, bush, parsers, load_order
@@ -45,7 +44,6 @@
4544
from ..bosh import faces
4645
from ..cint import CBashApi, FormID
4746
from ..exception import AbstractError, BoltError, CancelError
48-
from ..localize import format_date, unformat_date
4947
from ..patcher import configIsCBash, exportConfig, patch_files
5048

5149
__all__ = ['Mod_FullLoad', 'Mod_CreateDummyMasters', 'Mod_OrderByName',
@@ -190,34 +188,14 @@ def Execute(self):
190188
bosh.modInfos.cached_lo_save_lo()
191189
self.window.RefreshUI(refreshSaves=True)
192190

193-
class Mod_Redate(AppendableLink, ItemLink):
194-
"""Move the selected files to start at a specified date."""
195-
_text = _(u'Redate...')
196-
_help = _(u"Move the selected files to start at a specified date.")
191+
class Mod_Redate(File_Redate):
192+
"""Mods tab version of the Redate command."""
193+
def _infos_to_redate(self):
194+
return [self.window.data_store[to_redate] for to_redate
195+
in load_order.get_ordered(self.selected)]
197196

198-
def _append(self, window): return not load_order.using_txt_file()
199-
200-
@balt.conversation
201-
def Execute(self):
202-
#--Ask user for revised time.
203-
newTimeStr = self._askText(
204-
_(u'Redate selected mods starting at...'),
205-
title=_(u'Redate Mods'), default=format_date(int(time.time())))
206-
if not newTimeStr: return
207-
try:
208-
newTimeTup = unformat_date(newTimeStr, '%c')
209-
newTime = int(time.mktime(newTimeTup))
210-
except ValueError:
211-
self._showError(_(u'Unrecognized date: ') + newTimeStr)
212-
return
213-
#--Do it
214-
for fileInfo in sorted(self.iselected_infos(),key=attrgetter('mtime')):
215-
fileInfo.setmtime(newTime)
216-
newTime += 60
217-
#--Refresh
218-
with load_order.Unlock():
219-
bosh.modInfos.refresh(refresh_infos=False, _modTimesChange=True)
220-
self.window.RefreshUI(refreshSaves=True)
197+
def _perform_refresh(self):
198+
bosh.modInfos.refresh(refresh_infos=False, _modTimesChange=True)
221199

222200
# Group/Rating submenus -------------------------------------------------------
223201
#--Common ---------------------------------------------------------------------

0 commit comments

Comments
 (0)