Skip to content

Commit

Permalink
Stable release for 2019 (#277)
Browse files Browse the repository at this point in the history
* add squeak5-2 CI target and allow trunk to fail

* add develop travis batch to readme

* Wrap IMAP Credentials into asterixs' for propper IMAP compliance (see RFC 3501 chapter 4.3)

* Emphasize LoadOlderMail ist Email list (fixes #168)

* Make Endpoint use IMAP conform Strings

* Change two hardcoded dictionary keys, which where supposed to be the same

* Use theme-defined color for #168 fix

* Relocate load-older-emails-button emphasize filter to separate method

* Made AuthInfo Object only accept IMAP convertible strings

* Added template coverage badge from coveralls

* coveralls

* added coverage icon

* added coverage config to ston

* Updated Coverage badge to show develop

* Fixed bad double click fix, added good double click api call

* $o opens selected Email

* Refactored emailListKeyPressMapping

* Fix typo

* Configure coverage only for Core package

* Added install to call Menu Entry Added

* update readme

* Removed class method and refactored emailListKeyPress:

* Renamed and recategorized methods in ICEmail and made one triggle down change in ICFolder because of rename of uid -> uniqueID

* Refactor/rename get methods (#198)

* Renamed all get* method in Core

* Renamed get* methods in UI

* Renamed get* methods in Tests

* Added lazy init for body and header in ICEmail and removed initialize (#199)

* Adde lazy init for body and header in ICEmail and removed initialize

* Feature/release building (#206)

* Created sar export in test code

* Update .travis.yml

* Switched from seperate sars to one install sar

* Revert "Update .travis.yml"

* Feature/searchbar experience (#201)

* Change Search Bar Widget from InputText to TextField

* set setter and getter so the CR behavior is correct

* Implement check for account name existence in login dialog (#205)

* Implement check for account name existence in login dialog

* Improve semantics of method name

* Refactor duplicate finding

* Added Lazy init for ICEndPoint, ICFetchResponseParser, ICFolder, ICServerInfo, ICStreamWrapper, ICFolderDialog and ICLoginDialog

* Renamed all "anObject" parameters

* TDD: Added Tests for Connection Configuration storage in ICEndPoint

* Changed a* to an*

* Enter confirms password (#220)

* Implements #212. Deleted file storage methods in ICHelper and removed their tests. Implemented image storage in ICEndPoint and changed occurences from ICHelper

* Tested validity check in ICEndpoint. This was already tested indirectly in the test for addConfiguration. This just removed the indirection.

* Split up ICFolderDialog build method

* Refactor ICFolderDialog build method

* Introduce navigation panel element into ICFolderView

* Travis can not handle asDictionary. Therefore changed to Dictionary newFrom:

* Moved methods from "as yet unclassified" to fitting categories (#233)

* Split build method into multiple methods

* Fix empty fields checking and refactor to better naming (#213)

* Fix empty fields checking and refactor to better naming
* Use higher level collection protocol methods

* Removed unused methods (#235)

* Removed ICFolder lazy init.
Reference to #215 (review) and #215 (comment)

* Removed ICLoadOlderMail from Core and added UI-Button which loads older emails

* Fix startup configuration (#246)

* Add account icon (#247)

* Fixed bug which caused account to remove by adding copy (#238)

* Fixed bug which caused account to remove by adding copy

* Revert hacky fix

* Tested occurred bug, added bug fix

* Added Class Comments for all classes except the ServiceProvider in th… (#248)

* Added Class Comments for all classes except the ServiceProvider in the UI and Test Packages

* Ottos Feedback on wording and spelling

* Use consistent wording for the description of an instance.

* Establish default settings for login dialog (#250)

* fixes #223

* Copied parser methods from ICEndPoint to ICParser

Co-authored-by: Otto Kissig <[email protected]>

* Refactored the methods that have been relocated to ICParser

Co-authored-by: Otto Kissig <[email protected]>

* Add protocol package to smalltalkCI coverage measurement

Co-authored-by: Otto Kissig <[email protected]>

* Add protocol package to smalltalkCI coverage measurement
    
Co-authored-by: Otto Kissig <[email protected]>

* Redirected parse calls in endpoint to parser

Co-authored-by: Otto Kissig <[email protected]>

* Remove parser traces from ICEndPoint

Co-authored-by: Otto Kissig <[email protected]>

* Fixed small bug caused by typo

* Refactor/252 ICAccount info (#254)

* Literally just merged ICAuthenticationInfo with ICServerInfo. Had to change constructors of course

* Reworked the endpoint login and connection system to work with the new AccountInfo Class. This caused a lot of change in the test code

* Fixed renaming issue

* Removed unused method

* Removed unused method

* Renamed ICAccountInfo contructor (legacy artifact)

* Review Requests on #254

* Recategorization and little code beautification

* name-attribut artifact replacement

* Made everything use anAccountINfo instead of Dictionary
Made everything use 'accountName' instead of 'name'

* Fixed "Account edit"

* Fixed Test Defaults

* Refactor/218 date formatted test fix (#263)

* Added new tests. Made tests more specific

* Fixed second and date parsing

* Changed private method to travis accessible method

* Moved default subject responsibilities (#264)

* Moved default subject responsibilities

* Code Standard

* Refactor/252 ic account info (#266)

* Literally just merged ICAuthenticationInfo with ICServerInfo. Had to change constructors of course

* Reworked the endpoint login and connection system to work with the new AccountInfo Class. This caused a lot of change in the test code

* Fixed renaming issue

* Removed unused method

* Removed unused method

* Renamed ICAccountInfo contructor (legacy artifact)

* Review Requests on #254

* Recategorization and little code beautification

* name-attribut artifact replacement

* Made everything use anAccountINfo instead of Dictionary
Made everything use 'accountName' instead of 'name'

* Fixed "Account edit"

* Fixed Test Defaults

* 255 folder name attribute (#262)

* Made ICFolder use 'folderName' instead of 'name'

* Changed ToolBuilder textfield from 'name' to 'accountName'

* Typo fix

* Readme/removearchitecture (#267)

* remove architecture from readme.
it's outdated and visible in the wiki

* add hint for people to look at the wiki to readme

* Moved Commands from EndPoint to ICCommand (#268)

* Added Command Methods to ICCommand

* Removed constants from ICCommand because they where dublicate in ICEndPoint

Co-authored-by: Felix Rindt <[email protected]>

* Refactored Methods in ICCommand and methods calls in ICEndPoint

Co-authored-by: Felix Rindt <[email protected]>

* Added class comment

(And minor code style refactoring I forgot the last time)

* Implemented required Changes

* More requested changes

Moving constants from EndPoint to Command, renamed Methods and recategorized

* Finalize ICParser extraction
- fixed broken tests

Co-authored-by: Otto Kissig <[email protected]>

* Copied ICResponseParser into ICParser

* Adapt calls and tests from ICFetchResponseParser to ICParser

Co-authored-by: Otto Kissig <[email protected]>

* Law of Demeter, Comment corrected, removed unused method (#270)

* "Das kann weg" - Patrick R. (#271)

* Requested Changes and removed unused methods

Co-authored-by: Otto Kissig <[email protected]>

* Remove `ICHelper` (#269)

* Removed unused method

* Refactor to use collect

* Made ICHelpers paramter sort method obsolete

* Changed child folder collection

* Moved hash function

* Moved EndPoint creation out of helper

* Removed ICHelper

* Pauls Feedback

* Moved hash test

* Made ICParser compatible with Travis Squeak Build Version

Co-authored-by: Otto Kissig <[email protected]>

* Fix test that was still using ICHelper

Co-authored-by: TIm Garrels <[email protected]>

* fix account delete

* Create tests for ICNullStream and ICStreamWrapper

Co-authored-by: Tim Garrels <[email protected]>

* Made ICFolderDialogs `ICEndpoint` usage more obvious (#275)

* Made Deployment modular

* Fixed whitespace assumption

* Added cover for Core Error in UI

* Replaced getter with converter

* UI Notes origin (#282)

* Fixed whitespace assumption

* Added cover for Core Error in UI

* Switched "UIManager default" usage to usage of "self"

* Hotfix for rootfolder and context menu

* Fix 'Move to trash' Context Menu

* start refactoring to remove linter issues (#286)

* start refactoring to remove linter issues

* fix issues according to the review from @EightSQ

* Remove warning at 'Move to trash' (#287)

* Refactor the protocol package according to the lint (#290)

* start refactoring to remove linter issues
* fix issues according to the review from @EightSQ
* start linting the parser package

* First Lint batch (#291)

* Second Lint UI Batch  (#294)

* First Lint batch

* Removed comments, replaced checks, shortened methods

* Felix' Feedback

* Refactor according to Linter in the Test Package (#295)

* start refactoring to remove linter issues

* fix issues according to the review from @EightSQ

* Some core linting (#292)

* Some core linting

* Fix linting mistakes

* fix EatingBacon's comments

* Refactor all linting issues in Protocol package (#298)

* Implemented handling of malicious mime headers (#299)

* Made long methodlines short and removes unnecessary comments (#302)

* Some core package linting (#301)

* Some core package linting

* Some more lint refactoring

* Remove left over method

* Remove some debug code

* Fixed lints as far as humanly possible (#305)

* Restore Travis Ci links [ci skip]

Co-authored-by: Felix Rindt <[email protected]>
Co-authored-by: Paul Methfessel <[email protected]>
Co-authored-by: Martin Taraz <[email protected]>
Co-authored-by: Tim Garrels <[email protected]>
Co-authored-by: EatingBacon <[email protected]>
Co-authored-by: justus.eilers <[email protected]>
Co-authored-by: paul.methfessel <[email protected]>
Co-authored-by: Felix Rindt <[email protected]>
Co-authored-by: Fabio Niephaus <[email protected]>
  • Loading branch information
10 people authored May 1, 2020
1 parent cca4052 commit a53e824
Show file tree
Hide file tree
Showing 777 changed files with 2,731 additions and 2,746 deletions.
7 changes: 6 additions & 1 deletion .smalltalk.ston
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,10 @@ SmalltalkCISpec {
#load : 'Tests',
#platforms : [ #squeak ]
}
]
],
#testing : {
#coverage : {
#packages : [ 'IMAPClient-Core', 'IMAPClient-Protocol' ]
}
}
}
3 changes: 2 additions & 1 deletion .squot
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ OrderedDictionary {
'packages\/BaselineOfIMAPClient.package' : #SquotCypressCodeSerializer,
'packages\/IMAPClient-Core.package' : #SquotCypressCodeSerializer,
'packages\/IMAPClient-Tests.package' : #SquotCypressCodeSerializer,
'packages\/IMAPClient-UI.package' : #SquotCypressCodeSerializer
'packages\/IMAPClient-UI.package' : #SquotCypressCodeSerializer,
'packages\/IMAPClient-Protocol.package' : #SquotCypressCodeSerializer
}
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ sudo: false

smalltalk:
- Squeak-5.1
- Squeak-5.2
- Squeak-trunk

matrix:
allow_failures:
- smalltalk: Squeak-trunk
40 changes: 10 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
We proudly present our IMAP Client for Smalltalk Squeak, which we developed and improved during the summer term 2018 of the Software Engineering course.

## Installation
1. Get [Squeak 5.1 or later](http://www.squeak.org)
1. Get [Squeak 5.2 or later](http://www.squeak.org)
2. Load [Metacello](https://github.com/metacello/metacello)
3. Finally, load the package with the following command:

Expand All @@ -14,29 +14,11 @@ Metacello new
load.
```

4. Afterwards load additional changes from Squeak-trunk:
4. Now you can setup a Menu Entry under "Apps" using `ICFolderDialog install`.

We needed to use some Squeak Methods, which werent available in Squeak-5.1, so we had to update them manually.
Please follow the following steps:

1. Open Monticello Browser

![](screenshots/40866916-aaf887fc-6600-11e8-9dc8-847775df210c.png)

2. Select `http://source.squeak.org/trunk` on the right and press `open`

![](screenshots/40867006-45090ee8-6601-11e8-8e89-9d9f6a536792.png)

3. In the new window search for `Network`, select the newest commit and click `Load`

![](screenshots/40867029-7fddabc8-6601-11e8-9247-7df69755c6e9.png)

4. Do the Same for `Collections`

![](screenshots/40867038-95f11300-6601-11e8-9ce6-70933baae984.png)

## Open
You can open the tool with the command `ICLoginDialog open: ICFolderDialog new`
You can open the tool with the command `ICFolderDialog new` or using a Menu Entry.

## Configuration
You can customize the number of mails, which are fetched on the initial update process, and the number of mails which are loaded if you press the `Load older Mails` Button. Default are 100 and 10. Change `ICFolder>>numbersOfHeadersToFetch{AtLoaderOlderMail | AtTheBeginning}`
Expand All @@ -61,7 +43,7 @@ You can open the tool with the command `ICLoginDialog open: ICFolderDialog new`
- Display emails correctly (parse different encodings)

## Usage
Start the IMAP Client with `ICFolderDialog open`. Add new Accounts with the `+` Button. We tested the functionality with the HPI OWA Accounts. But other accounts should work fine.
Start the IMAP Client with `ICFolderDialog new`. Add new Accounts with the `+` Button. We tested the functionality with the HPI OWA Accounts. But other accounts should work fine.
```
Server: owa.hpi.de
Port: 993
Expand All @@ -70,16 +52,12 @@ Password: xxxxxxx
Use SSL: True
```

## Safety
You don't have to be worried about your passwords, of course we won't save them. After closing the IMAP-Client and reopening it your are welcomed by a password prompt to re-enter your credentials.

## Issue
There are some open issues left (we wanted to give you a good starting point ;-)) - just kidding, we didn't had enough time to fix all of these, so we left some in the Issues section.
## Security
Your password isn't stored on disk, but visible to your Squeak environment. After closing the IMAP-Client and reopening it your are welcomed by a password prompt to re-enter your credentials.

## Architecture

![](screenshots/architecture.png)
## Documentation

Hava a look at the GitHub Project Wiki to find more insights into the project.

## History
2016: Johannes Schneider, Maximilian Söchting, Julian Weise, Alexander Riese, Alexander Loeser
Expand All @@ -88,6 +66,8 @@ There are some open issues left (we wanted to give you a good starting point ;-)

2018: Claudia Grabowski, Leonard Von Merzljak, Marius Walter, David Hennemann

2019: Paul Methfessel, Martin Taraz, Otto Kissig, Tim Garrels, Felix Rindt

## Questions

If you have any question, feel free to drop us a line :-)
2 changes: 1 addition & 1 deletion packages/BaselineOfIMAPClient.package/.squot-contents
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
SquotTrackedObjectMetadata {
#objectClassName : #PackageInfo,
#serializer : #SquotCypressCodeSerializer
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ baseline: spec
package: 'JSON' with: [ spec file: 'JSON-ul.35'; repository: 'http://www.squeaksource.com/JSON' ];
package: 'IMAPClient-Core';
package: 'IMAPClient-UI';
package: 'IMAPClient-Protocol';
package: 'IMAPClient-Tests' with: [ spec requires: #('default' 'libaries')].
spec
group: 'default' with: #('IMAPClient-UI' 'IMAPClient-Core');
group: 'default' with: #('IMAPClient-UI' 'IMAPClient-Core' 'IMAPClient-Protocol');
group: 'Tests' with: #('IMAPClient-Tests');
group: 'libaries' with: #('JSON')]
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"class" : {
},
"instance" : {
"baseline:" : "C.G. 7/25/2018 18:25" } }
"baseline:" : "pm 7/12/2019 20:46" } }
2 changes: 1 addition & 1 deletion packages/IMAPClient-Core.package/.squot-contents
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
SquotTrackedObjectMetadata {
#objectClassName : #PackageInfo,
#serializer : #SquotCypressCodeSerializer
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
An ICAccountInfo is a dataobject holding information needed to connect to a server such as server address and user credentials. It also ensures basic IMAP datatype validity.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
constants
initialUsername
initialAccountName

^ String empty
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
constants
initialSsl

^ true
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
constants
initialPassword
invalidHost

^ String empty
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
constants
defaultPassword
invalidPassword

^ String empty
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
constants
invalidPort

^ -1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
constants
defaultUsername
invalidUsername

^ String empty
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
instance creation
newWith: aDataDictionary

^ self new
accountName: (aDataDictionary at: 'accountName');
host: (aDataDictionary at: 'address');
port: ((aDataDictionary at: 'port') asNumber);
username: (aDataDictionary at: 'username');
password: (aDataDictionary at: 'password');
ssl: (aDataDictionary at: 'ssl')
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
accountName: aString

accountName := aString
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
accountName

^ accountName ifNil: [accountName := self class initialAccountName]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
accessing
asDictionary

| dict |
dict := Dictionary new.
dict at: 'ssl' put: self ssl;
at: 'accountName' put: self accountName;
at: 'address' put: self host;
at: 'port' put: self port;
at: 'username' put: self username;
at: 'password' put: self password.

^ dict

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
validation
canConvert: aString

^ ('"|\\' asRegex matchesIn: aString) isEmpty
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
validation
hasValidServerInfo

^ self host ~= self class invalidHost
and: [self port ~= self class invalidPort]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
validation
hasValidUserInfo

^ self username ~= self class invalidUsername
and: [self password ~= self class invalidPassword]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
host: aString

host := aString
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
host

^ host ifNil: [host := self class invalidHost]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
validation
isValid

^ self hasValidServerInfo and: [self hasValidUserInfo]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
password: aString

(self canConvert: aString) ifFalse: [self error: (aString, ' is not IMAP convertable')].
password := aString
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
password

^ password ifNil: [password := self class invalidPassword]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
passwordAsIMAPString

^ '"', self password, '"'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
port: aNumber

port := aNumber
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
port

^ port ifNil: [port := self class invalidPort]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
printing
printOn: aStream

aStream nextPut: ({
self accountName.
self host.
self port.
self username.
self password.
self ssl
} joinSeparatedBy: ' ')
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
ssl: aBool

ssl := aBool
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
ssl

^ ssl ifNil: [ssl := self class initialSsl]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
username: aString

(self canConvert: aString) ifFalse: [self error: (aString, ' is not IMAP convertable')].
username := aString
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
username

^ username ifNil: [username := self class invalidUsername]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
usernameAsIMAPString

^ '"', self username, '"'
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"class" : {
"initialAccountName" : "tg 7/10/2019 17:43",
"initialSsl" : "tg 7/10/2019 17:43",
"invalidHost" : "tg 7/10/2019 20:08",
"invalidPassword" : "tg 7/10/2019 20:10",
"invalidPort" : "tg 7/10/2019 20:09",
"invalidUsername" : "tg 7/10/2019 20:10",
"newWith:" : "mt 7/26/2019 15:19" },
"instance" : {
"accountName" : "tg 7/10/2019 20:20",
"accountName:" : "tg 7/10/2019 17:35",
"asDictionary" : "tg 7/18/2019 23:07",
"canConvert:" : "fr 7/26/2019 15:37",
"hasValidServerInfo" : "tg 7/15/2019 12:08",
"hasValidUserInfo" : "tg 7/15/2019 12:08",
"host" : "tg 7/10/2019 20:06",
"host:" : "tg 7/10/2019 17:11",
"isValid" : "fr 7/26/2019 15:57",
"password" : "tg 7/15/2019 12:11",
"password:" : "tg 7/10/2019 17:18",
"passwordAsIMAPString" : "tg 7/10/2019 17:18",
"port" : "tg 7/10/2019 20:09",
"port:" : "tg 7/10/2019 17:11",
"printOn:" : "fr 7/26/2019 16:52",
"ssl" : "tg 7/10/2019 20:21",
"ssl:" : "tg 7/10/2019 17:34",
"username" : "fr 7/26/2019 15:37",
"username:" : "tg 7/10/2019 17:18",
"usernameAsIMAPString" : "tg 7/10/2019 17:18" } }
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
],
"classvars" : [
],
"commentStamp" : "ms 7/28/2016 11:38",
"commentStamp" : "tg 7/15/2019 12:14",
"instvars" : [
"accountName",
"host",
"port",
"username",
"password" ],
"name" : "ICAuthenticationInfo",
"password",
"ssl" ],
"name" : "ICAccountInfo",
"pools" : [
],
"super" : "Object",
Expand Down

This file was deleted.

This file was deleted.

Loading

0 comments on commit a53e824

Please sign in to comment.