Skip to content

Commit

Permalink
Equalize branches
Browse files Browse the repository at this point in the history
  • Loading branch information
Lorenz Woth committed Aug 7, 2020
1 parent 322ba3b commit 0c92e9b
Show file tree
Hide file tree
Showing 415 changed files with 1,180 additions and 1,201 deletions.
74 changes: 18 additions & 56 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# IMAPClient [![Build Status](https://travis-ci.org/hpi-swa-teaching/IMAPClient.svg?branch=develop)](https://travis-ci.org/hpi-swa-teaching/IMAPClient) [![Coverage Status](https://coveralls.io/repos/github/hpi-swa-teaching/IMAPClient/badge.svg?branch=develop)](https://coveralls.io/github/hpi-swa-teaching/IMAPClient?branch=develop)

Welcome to our IMAP Client project. We are a team of 4th semester IT-Systems Engineering students and are happy to take over this project for the sixth iteration.
This project is part of a lecture in Softwareengineering techniques and will be contributing to our final grade, so we are giving it our best ;)
As this is a student project, it will mostly be worked on during the summer terms. Therefore our time with this project is limited to the end of july.
Welcome to our IMAP Client project. We are a team of 4th semester IT-Systems Engineering studets and are happy to take over this project for the fifth iteration.
This project is part of a lecture in Softwaredevelopment techniques and will be contributing to our final grade, so we are giving it our best ;)
As this is a student project (and many other projects from this group), it will mostly be worked on during the summer terms. Therefore our time with this project is limited to the end of july.

In case of any questions, feel free to contact us.

Expand All @@ -26,78 +26,38 @@ You can open the tool with the command `ICFolderDialog new` or using a Menu Entr

## 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}`
This will not regard the e-mails that are already persisted on your disk, so if you have some e-mails in a Maildir directory, all of them will be read no matter what you defined here.

## Features
- Manage different accounts
![](screenshots/addAccount.png)
You can add an account by clicking the `+` button. You will then be prompted to enter the account information needed to establish a connection with the server.

- Fetch new mails from the server
![](screenshots/updating.png)
Mails are automatically fetched on login. If you wish to update and resynchronize with the server, click the update button.

- Delete & move mails
![](screenshots/move.png)
A right click on any mail will show you your options. Deleting a mail automatically moves it to the trash folder. If you want to revert a deletion, you can simply navigate to the trash folder and move the email back to another folder.
When you want to permanently delete emails, right click on the trash folder and choose expunge. This will dump your trash folder permanently.

- Flag and read emails
A right click on any mail will show you your options. You can flag an email for later use or mark it as seen if you do not want to be disturbed by it beeing highlighted anymore. Also you can mark already seen mails as unseen again.
![](screenshots/flag.png)
![](screenshots/unflag.png)

- See unseen mails immediately.
All unseen mails will be highlighted and the number of unseen mails per folder can be seen next to the folder name.
![](screenshots/manage_accounts.png)
- Fetch new mails from the server

- Search Mails
![](screenshots/search.png)
You can enter a search string into the search bar at the top. Right next to the search bar you can see, how many search results you got for the current search.
![](screenshots/update_mails.png)
- Delete & move mails

- Parse different encodings
![](screenshots/move_mails.png)
- See unseen mails immediately + Search Mails

- Reflect server changes back to Client.
If you're accessing your mails for a different device, and deleting/moving them, just press the update button in the Client, and every change should be correctly updated.
![](screenshots/search_mails.png)
- Display emails correctly (parse different encodings)

- Sort mails by different categories.
![](screenshots/sort.png)
By default all sortings are ascending. Double clicking the button will switch do descending order.
- Reflect server changes back to Client. If you're accessing your mails for a different device, and deleting/moving them, just press the update button in the Client, and every change should be correctly updated.

- Addressbook.
![](screenshots/addressbook.png)
You can open the addressbook by clicking the button with the person icon. The adressbook holds all sender addresses of mails from any of the currently logged in accounts.
- Display emails correctly (parse different encodings)

## Usage
Start the IMAP Client with `ICFolderDialog new`. Add new Accounts with the `+` Button. We tested the functionality with web.de Accounts. But other accounts should work fine.
The hpi owa accounts are known to be relatively large, as calendar and contact meta information is also sent to our client as folder objects. Therefore it might not entirely load in the requested time of 5 seconds.

For HPI accounts use the following login info:
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
Username: surname.lastname
Password: xxxxxxx
Use SSL: True
```
For web.de accounts use the following login info:
```
Server: imap.web.de
Port: 993
Username: username
Password: xxxxxxx
Use SSL: True
```

## Security
Your password isn't stored on disk, but will be visible to your Squeak environment. It is immediately deleted after login, so you will not be able to retrieve it afterwards, but be aware that we are no security experts and you might not want to test this with a high severity account.
After closing the IMAP-Client and reopening it your are welcomed by a password prompt to re-enter your credentials.

## Known Problems

As this project has lived through many iterations, there are a couple of known issues that we could not resolve during the few months we spend with this project.
If you encounter any problem while using our IMAP client, have a look at the Issues of this GitHub Project. Most of them are probably already known to us.
In case your problem has not been reported yet, feel free to post a new issue and describe what you did to get the problem, what the unexpected behaviour was and what behaviour you would have expected.
Thank you in anvance for contributing to making this project better by reporting any problems that we are not yet aware of!
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.

## Documentation

Expand All @@ -112,4 +72,6 @@ Hava a look at the GitHub Project Wiki to find more insights into the project.

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

2020: Henrik Guhl, Lorenz Woth, Niko Hastrich, Julia Joch
## Questions

If you have any question, feel free to drop us a line :-)
10 changes: 0 additions & 10 deletions packages/IMAPClient-Core.package/ICAccountInfo.class/README.md
Original file line number Diff line number Diff line change
@@ -1,11 +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.

Instance Variables

accountName: Name of the account set by the user.
host: Hostname of the IMAP server.
port: Port of the IMAP service on the server. Default: 993.
username: Username to login at the IMAP server.
password: Password of the user to login at the server. Will be deleted after login.


Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ instance creation
newWith: aDataDictionary

^ self new
accountName: (aDataDictionary at: 'accountName' ifAbsent: [nil]);
host: (aDataDictionary at: 'address' ifAbsent: [self invalidHost]);
port: ((aDataDictionary at: 'port' ifAbsent: [self invalidPort]) asNumber);
username: (aDataDictionary at: 'username' ifAbsent: [self invalidUsername]);
password: (aDataDictionary at: 'password' ifAbsent: [self invalidPassword]);
ssl: (aDataDictionary at: 'ssl' ifAbsent: [self initialSsl])
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')

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
validating
accessing
accountNameUnused

^ ICEndPoint connectionConfigurations
noneSatisfy: [:each | (self accountName) = (each accountName)]
noneSatisfy: [:credDict | (self accountName) = (credDict at: 'accountName')]
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
converting
accessing
asDictionary

| dict |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
validating
validation
canConvert: aString

^ ('"|\\' asRegex matchesIn: aString) isEmpty

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
validating
validation
hasValidServerInfo

^ self host ~= self class invalidHost
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
validating
validation
hasValidUserInfo

^ self username ~= self class invalidUsername
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
validating
validation
isValid

^ self hasValidServerInfo and: [self hasValidUserInfo]
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
converting
accessing
passwordAsIMAPString

^ '"', self password, '"'
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
converting
accessing
usernameAsIMAPString

^ '"', self username, '"'
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,15 @@
"invalidPassword" : "tg 7/10/2019 20:10",
"invalidPort" : "tg 7/10/2019 20:09",
"invalidUsername" : "tg 7/10/2019 20:10",
"newWith:" : "NH 7/15/2020 10:14" },
"newWith:" : "mt 7/26/2019 15:19" },
"instance" : {
"=" : "NH 7/15/2020 10:31",
"accountName" : "tg 7/10/2019 20:20",
"accountName:" : "tg 7/10/2019 17:35",
"accountNameUnused" : "NH 7/15/2020 09:58",
"accountNameUnused" : "NH 6/14/2020 12:09",
"asDictionary" : "tg 7/18/2019 23:07",
"canConvert:" : "fr 7/26/2019 15:37",
"eraseStoredPassword" : "LW 7/31/2020 11:39",
"hasValidServerInfo" : "tg 7/15/2019 12:08",
"hasValidUserInfo" : "tg 7/15/2019 12:08",
"hash" : "LW 8/1/2020 12:04",
"host" : "tg 7/10/2019 20:06",
"host:" : "tg 7/10/2019 17:11",
"isValid" : "fr 7/26/2019 15:57",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
],
"classvars" : [
],
"commentStamp" : "LW 8/1/2020 11:20",
"commentStamp" : "tg 7/15/2019 12:14",
"instvars" : [
"accountName",
"host",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
An ICAddressBook is a collection for the user's contacts containing email addresses of all accounts.
This is a singleton which can be accessed with #new.
An ICAddressBook is a collection for the user's contacts containing email addresses as entries.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
action
crud
addEmail: aString

self addIfNotPresent: aString
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
crud
change: anOldEmailString with: aNewEmailString

| entryToUpdate |
entryToUpdate := self find: anOldEmailString.

self remove: entryToUpdate.
self addEmail: aNewEmailString
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
action
crud
find: anEntry

| index |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"class" : {
"new" : "hg 6/24/2020 12:34" },
},
"instance" : {
"addEmail:" : "LW 6/16/2020 09:51",
"change:with:" : "LW 6/16/2020 09:51",
"feedMeWithEntries:" : "LW 6/16/2020 09:51",
"find:" : "LW 6/16/2020 09:51",
"readChildFoldersMailsFrom:" : "LW 6/16/2020 09:50",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
"classinstvars" : [
],
"classvars" : [
"Instance" ],
"commentStamp" : "LW 8/1/2020 11:23",
],
"commentStamp" : "hg 6/10/2020 10:36",
"instvars" : [
],
"name" : "ICAddressBook",
Expand Down

This file was deleted.

12 changes: 0 additions & 12 deletions packages/IMAPClient-Core.package/ICEmail.class/instance/^equals.st

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
converting
print
bodyAsString

^ self body asString
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
endpoint interaction
deleteEmail

| anICEndPoint |

anICEndPoint := self folder endpoint select: self folder path.
self deleteEmailFromDisk.
anICEndPoint deleteEmail: self
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
action
deleteEmailFromDisk

self folder removeMail: self.
FileDirectory default deleteFileNamed: (self maildirFileName, FileDirectory slash, self uniqueID)

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
converting
print
headerAsString

| headerFields |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
maildirFileName

^ self folder endpoint maildirFileName
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
print
minimalHeaderAsString

^
'Content-Type: ', self contentType, String cr,
'Content-Transfer-Encoding: ', self contentTransferEncoding, String cr,
'from: ', self from, String cr,
'to: ', self to, String cr,
'subject: ', self subject, String cr,
'date: ', self date
Loading

0 comments on commit 0c92e9b

Please sign in to comment.