どういうわけだか 2005/200503.td2ファイルは存在してない。悲しい。
categoryキャッシュとamazonキャッシュから購入履歴だけは復元(できたと思う)。
要望リストから発見。自分も欲しい。古い日記もちょこちょこ修正するから。
appendとreplaceを捉まえて日付をファイルに記録していく方式になるだろうね。
↓tdiary.rb (Revision: 1.195.2.2。TDiaryLatestクラスだけ抜粋。変更点はそこだけ)
#
# class TDiaryLatest
# show latest mode view
#
class TDiaryLatest < TDiaryView
def initialize( cgi, rhtml, conf )
super
ym = latest_month
#↓追加
if(@cgi.valid?('from') && @cgi.params['from'][0] =~ /(\d\d\d\d)(\d\d)(\d\d)/)
date_from = Time::local($1.to_i, $2.to_i, $3.to_i)
ym = [date_from.year, date_from.month]
@date = nil
else
date_from = nil
end
#↑
unless @date then
@date = ym ? Time::local( ym[0], ym[1] ) : Time::now
@io.transaction( @date ) do |diaries|
@diaries = diaries
#↓追加
if(date_from)
(date_from.day+1..31).each{|day| self.delete(Time::local(date_from.year, date_from.month, day)) }
end
#↑
@diary = @diaries[@diaries.keys.sort.reverse[0]]
DIRTY_NONE
end
end
if ym then
y = ym[0].to_i
m = ym[1].to_i
oldest = oldest_month
calc_diaries_size
while ( oldest and @diaries_size < @conf.latest_limit )
date = if m == 1 then
Time::local( y -= 1, m = 12 )
else
Time::local( y, m -= 1 )
end
break if date < Time::local( *oldest )
@io.transaction( date ) do |diaries|
@diaries.update( diaries )
calc_diaries_size
DIRTY_NONE
end
end
#↓追加
date_to = date_from;
latest(@conf.latest_limit) {|diary|
date_to = diary.date;
}
if(date_to && date_from != date_to)
if(date_to.day == 1)
if(date_to.month == 1)
date_to = Time::local(date_to.year-1, 12, 31);
else
date_to = Time::local(date_to.year, date_to.month-1, 31);
end
else
date_to = Time::local(date_to.year, date_to.month, date_to.day-1);
end
@conf['date_to'] = date_to;
end
#↑
end
end
protected
def calc_diaries_size
@diaries_size = 0
@diaries.each_value do |diary|
@diaries_size += 1 if diary.visible?
end
end
def latest( limit = 5 )
idx = 0
@diaries.keys.sort.reverse_each do |date|
break if idx >= limit
diary = @diaries[date]
next unless diary.visible?
yield diary
idx += 1
end
end
def cache_file( prefix )
#↓条件文追加
if(@cgi.valid?('from'))
nil
else
"#{prefix}#{@rhtml.sub( /\.rhtml$/, '.rb' )}"
end
#↑
end
end
↓misc/plugin/next_diaries.rb (EUCで保存後、選択して使用可能にする)
# next_diaries.rb
#
# <概要> 「最新」表示の時に「次の○日分」へのリンクを表示する。
# <条件> tdiary.rbのTDiaryLatestクラスに細工してあることが前提。
def next_diaries(label=nil)
if(@mode == 'latest' && @conf['date_to'])
%Q[<a href="#{@conf.index}?from=#{@conf['date_to'].strftime('%Y%m%d')}">#{(label || next_diaries_label)}</a>]
else
''
end
end
def next_diaries_label()
"次の#{@conf.latest_limit}日分"
end
MLを読んでたわけではないのにこのカブりよう。