/ 最近 .rdf 追記 編集 設定 本棚

脳log[20050417] キャッシュ(cache/200503.parser)を消したら3月分の日記が消えた。 | 更新日ベースのrecent | プラグイン: next_diaries.rb (「最新」表示に「次の○日分」リンクを表示) | 東野 圭吾 『毒笑小説』



2005年04月17日 (日)

[tDiary] キャッシュ(cache/200503.parser)を消したら3月分の日記が消えた。

どういうわけだか 2005/200503.td2ファイルは存在してない。悲しい。

 [2005-04-20]

categoryキャッシュとamazonキャッシュから購入履歴だけは復元(できたと思う)。

[tDiary]更新日ベースのrecent

要望リストから発見。自分も欲しい。古い日記もちょこちょこ修正するから。

appendとreplaceを捉まえて日付をファイルに記録していく方式になるだろうね。

[tDiary]プラグイン: next_diaries.rb (「最新」表示に「次の○日分」リンクを表示)

  • tdiary-2.1.1からは標準機能なので、これはもはや用済み
  • プラグインは href="index.rb?from=yyyymmdd" なリンクを作る
  • それに対応できるように tdiary.rbの TDiaryLatestに細工する。
  • 「前の○日分」は無し。
  • 以前の日記を表示するのに「次の〜」とはコレ如何に。

↓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

 [2005-04-20] tdiary-develで既にパッチが...orz

MLを読んでたわけではないのにこのカブりよう。

[本日の購入][] 東野 圭吾 『毒笑小説』

巻末の京極夏彦との対談から二人の笑いに対する姿勢がわかる。それで、ミステリじゃないけど読んでみようか、って気になった。

See also...

listed by...