'From Squeak6.1alpha of 17 May 2024 [latest update: #23043] on 14 February 2025 at 9:05:12 pm'! TalkDataView subclass: #TalkMailingList instanceVariableNames: 'name' classVariableNames: '' poolDictionaries: '' category: 'SqueakInboxTalk-MailingLists'! !TalkMailingList commentStamp: 'ct 7/23/2021 23:15' prior: 0! I represent an online mailing list of the Squeak Foundation. I am a wrapper around the Squeak History project. I overcome the primitive obsession of Squeak History's object design by representing the mailing list data as TalkMailingList, TalkMailConversation, and TalkMailObject instances.! !TalkMailingList methodsFor: 'private' stamp: 'ct 5/26/2021 14:19'! aggregatorClass ^ self class aggregatorClass! ! !TalkMailingList methodsFor: 'private' stamp: 'ct 5/26/2021 14:19'! wrapperClass ^ self class wrapperClass! ! !TalkMailingList methodsFor: 'accessing' stamp: 'ct 5/26/2021 14:19'! conversations self aggregatorClass hasCachedConversations ifFalse: [^ #()]. ^ (self aggregatorClass conversationsOn: {self name}) keys collect: [:wrapper | TalkMailConversation on: wrapper]! ! !TalkMailingList methodsFor: 'accessing' stamp: 'jmck 2/14/2025 18:05'! mailAddress "The address for posting new mails ^ '{1}@lists.squeakfoundation.org' format: {self name} " ^ 'https://lists.gnucash.org/mailman/listinfo/{1}' format: {self name}! ! !TalkMailingList methodsFor: 'accessing' stamp: 'ct 5/26/2021 14:20'! mails self aggregatorClass hasCachedMessages ifFalse: [^ #()]. ^ self aggregatorClass messagesOn: {self name} collect: [:wrapper | TalkMailObject on: wrapper]! ! !TalkMailingList methodsFor: 'accessing' stamp: 'ct 5/7/2021 13:20'! name ^ name! ! !TalkMailingList methodsFor: 'accessing' stamp: 'ct 5/7/2021 13:21'! name: aString name := aString! ! !TalkMailingList methodsFor: 'comparing' stamp: 'ct 5/7/2021 17:36'! dataKey ^ super dataKey, {self name}! ! !TalkMailingList methodsFor: 'sending messages' stamp: 'ct 7/8/2021 13:35'! newMessage ^ MailMessage empty! ! !TalkMailingList methodsFor: 'printing' stamp: 'ct 5/7/2021 15:00'! printOn: aStream aStream nextPutAll: ('<1p> named: <2p>' expandMacrosWithArguments: {self class. self name})! ! !TalkMailingList methodsFor: 'updating' stamp: 'ct 5/9/2023 13:19'! updateMessagesFor: aDurationOrNil | timespans aggregator | timespans := Array with: ((aDurationOrNil ifNil: [DateAndTime new "zero"] ifNotNil: [DateAndTime now - aDurationOrNil]) to: DateAndTime now). (self mails collect: #date) ifNotEmpty: [:dates | | fullTimespan minDate maxDate | fullTimespan := timespans first. timespans := OrderedCollection new. minDate := dates min. maxDate := (dates reject: [:date | date > DateAndTime now "invalid"]) max. minDate > fullTimespan start ifTrue: [timespans add: (fullTimespan start to: minDate)]. timespans add: (maxDate to: fullTimespan end)]. self wrapperClass closeAllStreams. aggregator := (self aggregatorClass on: {self name}) showProgress: true; onlyTimespans: timespans; yourself. aggregator class downloadListNamed: self name forTimespans: timespans. [ aggregator deriveRulesForAuthorKeyNormalization; resetCacheForMailMessages; flag: #performance "ct: We are reading the mbox files twice!! Can we optimize this?"] on: Warning do: [:ex | (ex messageText includesSubstring: 'author-key normalization is limited') ifTrue: [ ex resume "ignore - not relevant for us since previously derived author keys were already stored into the mail wrappers"] ifFalse: [ex pass]]. aggregator class resetCacheForMailInReplyTo; resetCacheForMailReplies. aggregator resetCacheForMailConversations! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! TalkMailingList class instanceVariableNames: ''! !TalkMailingList class methodsFor: 'support' stamp: 'ct 5/26/2021 14:20'! aggregatorClass ^ SqhMailmanAggregator! ! !TalkMailingList class methodsFor: 'support' stamp: 'ct 5/26/2021 14:20'! wrapperClass ^ SqhMailWrapper! ! !TalkMailingList class methodsFor: 'accessing' stamp: 'ct 12/2/2022 00:18'! beginners ^ self named: 'beginners'! ! !TalkMailingList class methodsFor: 'accessing' stamp: 'ct 6/2/2023 19:19'! etoysDev ^ self named: 'etoys-dev'! ! !TalkMailingList class methodsFor: 'accessing' stamp: 'ct 5/7/2021 13:33'! squeakDev ^ self named: 'squeak-dev'! ! !TalkMailingList class methodsFor: 'accessing' stamp: 'ct 12/2/2022 00:26'! vmBeginners ^ self named: 'vm-beginners'! ! !TalkMailingList class methodsFor: 'accessing' stamp: 'ct 7/14/2021 21:06'! vmDev ^ self named: 'vm-dev'! ! !TalkMailingList class methodsFor: 'caching' stamp: 'ct 7/20/2021 19:15'! clearAllCaches "Only to be sent via TalkInbox!!" super clearAllCaches. self aggregatorClass clearAllCaches! ! !TalkMailingList class methodsFor: 'instance creation' stamp: 'ct 5/7/2021 13:31'! named: aString ^ self new name: aString! ! !TalkMailingList class methodsFor: '*gnucash' stamp: 'jmck 5/18/2024 14:50'! gnucashDev ^self named: 'gnucash-devel'! ! !TalkMailingList class methodsFor: '*gnucash' stamp: 'jmck 5/18/2024 14:18'! gnucashUser ^self named: 'gnucash-user'! !