UniMate is a desktop app for students to manage contacts and manage schedules optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, UniMate can get your contact management tasks done faster than traditional GUI apps.
Ensure you have Java 11
or above installed in your Computer.
Download the latest UniMate.jar
from here.
Copy the file to the folder you want to use as the home folder for UniMate.
Open a command terminal, cd
into the folder you put the jar file in, and use the java -jar UniMate.jar
command to run the application.
A GUI similar to the below should appear in a few seconds. Note that the app contains some sample data,
which may differ from that of a fresh download.
Type the command in the command box and press Enter to execute it. e.g. typing help
and pressing Enter will open the help window.
Some example commands you can try:
list
: Lists all contacts.
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01
: Adds a contact named John Doe
to the AddressBook.
delete 3
: Deletes the 3rd contact shown in the current list.
clear
: Deletes all contacts.
exit
: Exits the app.
Refer to the Features below for details of each command.
UniMate has 3 core features, AddressBook, Calendar System and Task Management System. This section serves to provide you with an overview of what each component entails and the functionalities supporting them.
The screenshot above shows a cropped view of UniMate's GUI. AddressBook belongs to the AddressBook feature, CALENDAR belongs to the Calendar System feature and the EVENT LIST/TASK LIST portion is shared by both the Calendar System feature and Task Management System feature.
To switch between the Event List and Task List, we have a CLI-based command for that.
The AddressBook serves to ease contact management.
Some major CLI-based functionalities to support this feature include:
Other functionalities can be found in the AddressBook Management subsection found in the Features section.
Additionally, each contact in the AddressBook has their own personal calendar, which can be accessed simply by double-clicking with the left mouse button on the contact's card in the AddressBook. This will create a pop-up displaying the contact's calendar as shown below.
Note: There is currently no CLI-based command to access this feature, but is planned for a future release.
The calendar system seeks to improve the user's schedule planning experience, as well as simplify the synchronization of schedules among multiple people.
To achieve this, we have 2 supporting sub-features:
For the calendar system, we work solely with events
, which differs from tasks
used in the task list feature.
event
has a description
, start date and time
and end date and time
task
only has a description
and an optional end date and time
The calendar allows the user to plan their timetable and compare it against their contacts' schedules. This will facilitate scheduling of meetings and events involving the user and their contacts.
By default, the calendar's GUI will only display the time period of 8am to 6pm, but will automatically extend when events that cannot be fit within this time period are added.
Additionally, the GUI for this sub-feature currently only supports viewing of events within the current week. Upcoming updates will allow the user to navigate beyond this chronological restriction. In the meantime, users can consider using the Event List to view events outside the current week.
For the user's calendar, some major CLI-based functionalities supporting this sub-feature includes:
For the contact's calendar, some major CLI-based functionalities supporting this sub-feature includes:
Other useful CLI-based functionalities not exclusive to the user/contact supporting this sub-feature includes:
Other functionalities can be found in the Calendar System subsection of the Features section
The event list displays all the events for the user/contact. It serves as an overview of the collective events that the user or their contact have.
The event list shown on the main UniMate GUI is the user's event list. To view a specific contact's event list, we have a CLI-based command that will display the contact's event list in a popup window.
The task list stores a collection of tasks that the user might have. The primary difference between event and task is that a task does not have a starting date and time.
Some useful CLI-based functionalities supporting this feature includes:
Notes about the command format:
Words in UPPER_CASE
are the parameters to be supplied by the user.
e.g. in add n/NAME
, NAME
is a parameter which can be used as add n/John Doe
.
Items in square brackets are optional.
e.g. n/NAME [t/TAG]
can be used as n/John Doe t/friend
or as n/John Doe
.
Items with …
after them can be used multiple times including zero times.
e.g. [t/TAG]…
can be used as (i.e. 0 times),
t/friend
, t/friend t/family
etc.
Parameters can be in any order.
e.g. if the command specifies n/NAME p/PHONE_NUMBER
, p/PHONE_NUMBER n/NAME
is also acceptable.
Extraneous parameters for commands that do not take in parameters (such as help
, list
, exit
and clear
) will be ignored.
e.g. if the command specifies help 123
, it will be interpreted as help
.
Note that if the parameters are too lengthy, they may be truncated in the UI.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
help
Shows a message explaining how to access the help page.
Format: help
Alternatively, the message can also be accessed by using the keyboard shortcut F1
or
through the menu bar (Help
> Help
).
exit
Exits the program.
Format: exit
Alternatively, the user can also exit the application through the menu bar (File
> Exit
)
add
Adds a person to the AddressBook.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…
Tip: A person can have any number of tags (including 0)
Examples:
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01
add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal
Note: Currently UniMate does not support the use of forward-slash in the name of contacts (e.g. s/o). The developers understand this, and we hope to add support for accepting forward-slashes in the contact's name in a future release.
In the example, after executing
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01
, we see John Doe
's
contact information stored in the AddressBook as the 7th contact on the left-hand side of the GUI.
delete
Deletes the specified person from the AddressBook.
Format: delete INDEX
INDEX
Examples:
list
followed by delete 2
deletes the 2nd person in the AddressBookfind Betsy
followed by delete 1
deletes the 1st person in the results of the find
commandIn this example, after executing list
, followed by delete 7
, John Doe
, the person with index 7
is removed from the displayed AddressBook.
edit
Edits an existing person in the AddressBook.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…
INDEX
. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …t/
without
specifying any tags after itExamples:
edit 1 p/91234567 e/johndoe@example.com
Edits the phone number and email address of the 1st person to be 91234567
and johndoe@example.com
respectively.edit 2 n/Betsy Crower t/
Edits the name of the 2nd person to be Betsy Crower
and clears all existing tags.In this example, after executing edit 1 p/12345678
, Alex Yeoh
the person with index 1 has his
phone number edited to 12345678
.
find
Finds persons whose names contain any of the given keywords.
Tip: Multiple arguments passed into the
find
command will be delimited by whitespaces, which means the argumentsJohn Doe
will be parsed into 2 separate argumentsJohn
andDoe
. To circumvent this delimitation, consider the filter command.
Format: find KEYWORD [MORE_KEYWORDS]
hans
will match Hans
Hans Bo
will match Bo Hans
Han
will not match Hans
OR
search)
e.g. Hans Bo
will return Hans Gruber
, Bo Yang
Examples:
filter
Filters out persons whose fields contain any of the given keywords. The keywords contained in each field will be treated as a single argument.
Format: filter [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…
cs2103
will match CS2103
Ba
will return Badminton
or Basketball
or Football
or Backgammon
)AND
search)John Doe
in filter n/John Doe
will be treated as a single argument)filter n/
will show all contacts.Examples:
filter t/CS2103
- Displays all contacts with the CS2103 tag or tags containing CS2103
e.g. CS2103Tfilter t/MA2116 t/CS1010S n/John e/@u.nus.edu
- Displays all contacts with the MA2116
and CS1010S
tags as well as
with a name containing John
and an email address with the domain u.nus.edu
In this example, after executing filter t/colleagues
, the AddressBook list displays all contacts
that have the colleagues
tag.
list
Shows a list of all persons in the AddressBook. This command is particularly useful to display all the contacts after using the find and filter commands.
Format: list
In this example, after executing the list
command, we see the entire AddressBook again.
sort
Format: sort /COMPARATOR [/reverse]
COMPARATOR
COMPARATOR
include:
byname
byemail
byphone
byaddress
adam
has precedence over Beatrice
when sorted in ascending order)/reverse
can be added to the command (see Examples below)Examples:
sort /byname
sorts all contacts in UniMate AddressBook by their full namesort /byaddress /reverse
sorts all contacts in UniMate AddressBook by their addressIn this example, after executing sort /byphone
, the AddressBook is now sorted according to the
contact's phone numbers, in ascending numerical order.
clear
Clears all entries from the AddressBook.
Format: clear
In this example, after executing clear
, the AddressBook is now cleared of all contacts.
Date Time Format
- When inputting a date and time into a command, the following format is used:
yyyy-MM-dd HH:mm
where *yyyy
represents the year, *MM
represents the month, *dd
represents the day, *HH
represents the hours and *mm
represents the minutes.Event span
- The chronological span of the event is inclusive of the start date and time, but exclusive of the end date and time. This means that for 2 consecutive events, the later event can start at the same time the earlier event ends.
addEvent
Adds an event to the user's calendar.
Format: addEvent d/DESCRIPTION ts/START_DATE_TIME te/END_DATE_TIME
START_DATE_TIME
and ending at END_DATE_TIME
DESCRIPTION
must be non-emptySTART_DATE_TIME
and END_DATE_TIME
must be in yyyy-MM-dd HH:mm
formatSTART_DATE_TIME
must be before END_DATE_TIME
for the command to be validExample:
addEvent d/Cry about deadlines ts/2023-01-01 13:00 te/2023-01-01 15:00
In this example, after executing the command addEvent d/myEvent ts/2023-11-08 14:00 te/2023-11-08 16:00
,
the event myEvent
is now visible in both the calendar on the right and the event list at the bottom, as
the date of myEvent
coincides with the current week when the screenshot was taken.
In the case myEvent
happens before/after the current week, it will not be displayed in the calendar, but will still
show in the event list.
deleteEvent
Deletes an event from the user's calendar.
Format deleteEvent DATE_TIME_DURING_EVENT
DATE_TIME_DURING_EVENT
, an error will be thrown.Example:
deleteEvent 2023-11-01 12:00
In this example, after executing the command deleteEvent 2023-11-08 15:00
, myEvent
(added in
the addEvent command example) that is happening during the
specified time was deleted, leaving an empty calendar and event list.
clearEvents
Clears all events within a specified time range.
Note: In order to ensure the user does not make the mistake of deleting more events than intended, this command requires additional confirmation (refer to command format below) from the user to fully execute. Without the confirmation, the result box will instead display the list of events that will be deleted if the command were to fully execute, for the user's verification.
Format: clearEvents ts/START_DATE_TIME te/END_DATE_TIME c/CONFIRMATION
START_DATE_TIME
but exclusive of END_DATE_TIME
CONFIRMATION
is absent, the command shows all events within the time range but does not delete them. The
same command is then shown with the confirmation included that can be copied and pasted to execute the commandSTART_DATE_TIME
must be before END_DATE_TIME
START_DATE_TIME
or END_DATE_TIME
, an error will be thrownExample:
clearEvents ts/2023-01-01 00:00 te/2023-12-31 23:59 c/CONFIRMED
In this example, after executing clearEvents ts/2023-11-08 14:00 te/2023-11-08 16:00 c/CONFIRMED
, myEvent
(added in
the addEvent command example) that is happening during the duration of the
specified time was deleted, leaving an empty calendar and event list.
switchList
Events can be viewed from the calendar GUI that appears on the right.
Additionally, a list of all events are displayed by default at the bottom. This list at the bottom can be switched to a
task list with the switchList
command. More information can be found under at Viewing all Tasks.
addContactEvent
Adds an event to a contact's calendar at the specified index.
Format: addContactEvent INDEX d/DESCRIPTION ts/START_DATE_TIME ts/END_DATE_TIME
START_DATE_TIME
and ending at END_DATE_TIME
START_DATE_TIME
and END_DATE_TIME
must be in yyyy-MM-dd HH:mm
formatSTART_DATE_TIME
must be before END_DATE_TIME
for the command to be validExample:
addContactEvent 1 d/Team Meeting ts/2024-01-01 09:00 te/2024-01-01 11:00
In this example, after executing addContactEvent 1 d/Alex's Event ts/2023-11-08 14:00 te/2023-11-08 18:00
and
double-clicking on the person card of index 1 in the AddressBook, the
contact's calendar pops up, revealing Alex's Event
. In the case that the event happens before/after
the current week, it will not be shown in the calendar, but will still be displayed in the
contact's event list.
deleteContactEvent
Deletes an event from a contact's calendar at the specified index.
Format deleteContactEvent INDEX ts/DATE_TIME
DATE_TIME
from the contactExample:
deleteContactEvent 1 ts/2024-01-01 09:00
In this example, after executing deleteContactEvent 1 ts/2023-11-08 14:00
and
double-clicking on the person card of index 1 in the AddressBook,
the contact's calendar pops up, revealing an empty calendar as Alex's Event
(added in the
example in addContactEvent),
occurring at the specified time, has been removed.
editContactEvent
Edits the details of an event in a contact's calendar.
Note: If this command is executed while the event list of the contact of interest is open, the event list will not be updated until the tab is closed and open again.
Format: editContactEvent PERSON_INDEX EVENT_INDEX [d/DESCRIPTION] [ts/NEW_START_DATE_TIME][te/NEW_END_DATE_TIME]
EVENT_INDEX
event of the PERSON_INDEX
person in the AddressBook with the given fields.Example: editContactEvent 1 1 d/Nap
, editContactEvent 2 3 ts/2023-10-10 10:00 te/2023-10-12 15:00
In this example, we see this is the state of the calendar of Alex Yeoh
, the person with index 1
in the AddressBook.
After executing editContactEvent 1 1 d/Edited Description
, we get this confirmation message
We can see that the event Nap
has its description changed to Edited Description
.
viewContactEvents
Creates a pop-up that displays a list of all events of a calendar belonging to a person in the AddressBook.
Format: viewContactEvents INDEX
INDEX
as displayed.Example:
viewContactEvents 1
In this example, after execute viewContactEvents 1
, a pop-up with the list of events of the person
with index 1 in the AddressBook, which in this case is Alex Yeoh
shows up.
There are 2 ways for the user to compare calendars with their AddressBook contacts:
The resulting pop-up calendar will display the time periods where all parties are not available as greyed out sections. The pop-up has to be closed in order for the user to access the main application again.
Note: Arguments for the commands are optional, hence
compareCalendars
andcompareGroupCalendars
are valid commands, but the resulting pop-up will just display the user's calendar.
Format compareCalendars [INDEX]...
INDEX
INDEX
must be a positive non-zero integer that is smaller or equals to the size of the AddressBookINDEX
number provided is invalid, an error will be returnedINDEX
is supplied, the resulting pop-up will just display the user's calendarExample:
compareCalendars 1 3 5
In this example, after executing compareCalendars 1
, we see the timings when both the user and
the person with index 1 (Alex Yeoh
) are not free is blocked out.
Format compareGroupCalendars [TAG]...
TAG
TAG
provided are invalid, the resulting pop-up will ignore the invalid TAG
TAG
provided are invalid, the resulting pop-up will just display the user's calendarTAG
is supplied, the resulting pop-up will just display the user's calendarExample:
compareGroupCalendars school friends
In this example, after executing compareGroupCalendars friends
, we see the timings when both the
user and the contacts that have the friends
tag are unavailable are blocked out.
User can import *.ics files, which will automatically be integrated into their UniMate calendars.
Format: import FILE_PATH
User can view other weeks of their calendar schedule beyond just the current week.
Format: viewWeek DATE
Tasks consist of a DESCRIPTION
and an optional DEADLINE
.
Note: Tasks can have the same
DESCRIPTION
orDEADLINE
, but not both.
switchList
Switches the bottom list between the event list and the task list.
Format: switchList
switchList
will be ignored.In this example, after executing switchList
, we see that the bottom of the GUI has switched from
event list
to the task list
.
addTask
Adds a task to the Task Manager.
Format: addTask d/DESCRIPTION [te/DEADLINE]
DESCRIPTION
cannot be empty.DEADLINE
must be in the same format given above for date and time.DEADLINE
can also be omitted to create a task with no specified deadline.Examples:
addTask d/Go for a run te/2023-02-14 19:00
addTask d/Hydrate regularly!
addTask d/Fix CS2103 Project bug te/2023-02-31 12:00
creates the task with deadline 2023-02-28 12:00
instead.In this example, after executing addTask d/Hydrate regularly!
, we see the new Hydrate regularly!
task appearing at the bottom of the task list.
deleteTask
Deletes a task from the Task Manager according to the index of the task displayed in the task list.
Format: deleteTask INDEX
INDEX
present or if it exceeds the length of the task list.Examples:
deleteTask 1
In this example, after executing deleteTask 4
, the Hydrate regularly!
task added in the
previous example was removed.
sortTasks
Changes the way tasks in the Task Manager are displayed in the task list.
Format: sortTasks PARAMETER
PARAMETER
can only be DESCRIPTION
or DEADLINE
.Examples:
sortTasks DESCRIPTION
sorts tasks by their DESCRIPTION
alphabetically.sortTasks DEADLINE
sorts tasks by their DEADLINE
. Tasks with deadlines are prioritised above tasks with no
deadline.In this example, after executing sortTasks DESCRIPTION
, the tasks are now sorted in ascending
alphanumeric order.
All data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
AddressBook data is saved automatically as a JSON file [JAR file location]/data/addressbook.json
.
Calendar data is saved automatically as a JSON file [JAR file location]/data/calendar.json
.
Task-list data is saved automatically as a JSON file [JAR file location]/data/taskmanager.json
.
Advanced users are welcome to update data directly by editing the data files.
Caution: If your changes to the data file makes its format invalid, UniMate will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
[coming in v2.0]
Details coming soon ...
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous UniMate home folder.
preferences.json
file created by the application before running the application again.Action | Format, Examples |
---|---|
Help | help |
Exit | exit |
Add | add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]… e.g. add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague |
Delete | delete INDEX e.g. delete 3 |
Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]… e.g. edit 2 n/James Lee e/jameslee@example.com |
Find | find KEYWORD [MORE_KEYWORDS] e.g. find James Jake |
Filter | filter [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]… e.g. filter n/John Doe |
List | list |
Sort | sort /COMPARATOR e.g. sort /byname |
Clear | clear |
addEvent | addEvent d/DESCRIPTION ts/START_DATE_TIME te/END_DATE_TIME e.g. addEvent d/Cry about deadlines ts/2023-01-01 00:01 te/2023-12-31 23:59 |
deleteEvent | deleteEvent DATE_TIME e.g. deleteEvent 2023-02-03 12:00 |
clearEvents | clearEvents ts/START_DATE_TIME te/END_DATE_TIME c/CONFIRMATION e.g. clearEvents ts/2023-02-03 12:00 te/2023-02-03 14:00 c/CONFIRMED |
switchList | switchList |
addContactEvent | addContactEvent INDEX d/DESCRIPTION ts/START_DATE_TIME te/END_DATE_TIME e.g. addContactEvent 1 d/Cry about deadlines ts/2023-01-01 00:01 te/2023-12-31 23:59 |
deleteContactEvent | deleteContactEvent INDEX ts/DATE_TIME e.g. deleteContactEvent 1 ts/2023-02-03 12:00 |
editContactEvent | editContactEvent PERSON_INDEX EVENT_INDEX [d/DESCRIPTION] [ts/NEW_START_DATE_TIME] [te/NEW_END_DATE_TIME] e.g. editContactEvent 1 1 d/Edited Description |
viewContactEvents | viewContactEvents INDEX e.g. viewContactEvents 1 |
compareCalendars | compareCalendars [INDEX]... e.g. compareCalendars 1 3 5 |
compareGroupCalendars | compareGroupCalendars [TAG]... e.g. compareGroupCalendars school friend |
addTask | addTask d/DESCRIPTION [te/DEADLINE] e.g. addTask d/Go for a run te/2023-02-14 19:00 |
deleteTask | deleteTask INDEX e.g. deleteTask 1 |
sortTasks | sortTasks PARAMETER e.g. sortTasks DESCRIPTION e.g. sortTasks DEADLINE |