From ccbcca6e9324c4a0cda6ca0dba36f2282a1b59aa Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 19:03:27 +0800 Subject: [PATCH 01/18] Update UserGuide.adoc --- docs/UserGuide.adoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index df0d89774449..a393cca3b227 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -310,6 +310,11 @@ Shows only contacts who have GER1000 in their timetable and are free at mon 10am Downloads the your notes from IVLE, and stores them in the folder "notes" + Format: `downloadAllNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE]` +[NOTE] +**** +You would need to have Google Chrome installed in a default location in order to execute this command +**** + **** * Automatically accesses the your IVLE account using Google Chrome, and downloads all notes and resources of the specified module. From 112667ff28330c1dc7fb02e19767eaafb5986b56 Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 19:04:32 +0800 Subject: [PATCH 02/18] Update UserGuide.adoc --- docs/UserGuide.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index a393cca3b227..0d4be2bfad95 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -311,9 +311,9 @@ Downloads the your notes from IVLE, and stores them in the folder "notes" + Format: `downloadAllNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE]` [NOTE] -**** +==== You would need to have Google Chrome installed in a default location in order to execute this command -**** +==== **** * Automatically accesses the your IVLE account using Google Chrome, and downloads all notes and resources From 4c64be88404238eb2f131863712413ad391c9f67 Mon Sep 17 00:00:00 2001 From: BearPerson1 Date: Tue, 30 Oct 2018 20:14:11 +0800 Subject: [PATCH 03/18] Refactoring --- .../logic/commands/DownloadSelectNotesCommand.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java b/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java index ad6a53d16774..873c56039e61 100644 --- a/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java +++ b/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java @@ -19,13 +19,14 @@ public class DownloadSelectNotesCommand extends DownloadAbstract{ public static final String COMMAND_WORD = "downloadSelectNotes"; - public static final String MESSAGE_USAGE = "downloadSelectNotes user/(username) pass/(password) mod/(moduleCode) file/(0,1,2...n))"; + public static final String MESSAGE_USAGE = "To display all available notes:\r\ndownloadSelectNotes user/(username) " + + "pass/(password) mod/(moduleCode)\r\nTo select the notes(by index):\r\ndownloadSelectNotes user/(username) pass/(password) mod/(moduleCode) file/0,1,2...n"; public static final String NEWLINE_SEPERATOR = "\r\n"; public static final String NO_FILES_SELECTED_MESSAGE = "Please select a file after the \"file/\" tag. Ie: file/(0,1,2...n))"; - public static final String MESSAGE_FILE_DOES_NOT_EXIST_ERROR = "A FILE YOU CHOSE DOES NOT EXIST\r\n DOWNLOAD NOT COMPLETE"; + public static final String MESSAGE_FILE_DOES_NOT_EXIST_ERROR = "A FILE YOU CHOSE DOES NOT EXIST\r\nDOWNLOAD NOT COMPLETE"; private static final String WORKBIN_CSS_SELECTOR_ID = "a[href^=\"/workbin\"]"; @@ -33,6 +34,8 @@ public class DownloadSelectNotesCommand extends DownloadAbstract{ private static final String FILE_DOWNLOAD_LINK_ATTRIBUTE_ID = "href"; + private static final String MESSAGE_SUCCESS_PREFIX = "Here are your the files available for: "; + private ArrayList fileSelect; private String availableDownloadFiles; /** @@ -84,7 +87,7 @@ public CommandResult execute(Model model, CommandHistory history) throws Command if(fileSelect==null) { availableDownloadFiles = getFileNames(driver); driver.close(); - return new CommandResult(availableDownloadFiles); + return new CommandResult(MESSAGE_SUCCESS_PREFIX + moduleCode + "\r\n" + availableDownloadFiles); } initializeDownloadFolder(); From bacc95638b5d2db39732c806aaa625128a8e1a0c Mon Sep 17 00:00:00 2001 From: BearPerson1 Date: Tue, 30 Oct 2018 20:29:35 +0800 Subject: [PATCH 04/18] Refactoring --- .../address/logic/commands/DownloadAbstract.java | 3 --- .../logic/commands/DownloadSelectNotesCommand.java | 12 +----------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/DownloadAbstract.java b/src/main/java/seedu/address/logic/commands/DownloadAbstract.java index de0f1428f653..1d8327026eb5 100644 --- a/src/main/java/seedu/address/logic/commands/DownloadAbstract.java +++ b/src/main/java/seedu/address/logic/commands/DownloadAbstract.java @@ -205,8 +205,5 @@ protected void initializeDownloadFolder(){ } } - public String getCurrentDirPath(){ - return currentDirPath; - } } diff --git a/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java b/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java index 873c56039e61..aa511370f362 100644 --- a/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java +++ b/src/main/java/seedu/address/logic/commands/DownloadSelectNotesCommand.java @@ -100,18 +100,8 @@ public CommandResult execute(Model model, CommandHistory history) throws Command } dynamicWaiting(); driver.close(); - try{ - UnzipUtil.unzipFile(downloadPath, UNZIP_FILE_KEYWORD, - currentDirPath, DOWNLOAD_FILE_PATH, moduleCode); - } - catch (IOException ioe) { - throw new CommandException(MESSAGE_FILE_CORRUPTED); - } - catch (NullPointerException npe) { - throw new CommandException(MESSAGE_NOTES_FOLDER_NOT_FOUND); - } return new CommandResult(moduleCode + MESSAGE_SUCCESS - + currentDirPath + DOWNLOAD_FILE_PATH); + + currentDirPath + DOWNLOAD_RELATIVE_PATH); } driver.close(); throw new CommandException(MESSAGE_MODULE_NOT_FOUND); From 09ac69ddebb9f8b11cf8bc2e0722f0f1170a03fd Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 20:38:32 +0800 Subject: [PATCH 05/18] Update UserGuide.adoc --- docs/UserGuide.adoc | 133 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 120 insertions(+), 13 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 0d4be2bfad95..be52335821ba 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -305,35 +305,124 @@ Shows only contacts who have GER1000 in their timetable and are free at mon 10am === Notes Commands -==== Downloading notes from IVLE : `downloadAllNotes` +==== Downloading all notes from a selected module from IVLE : `downloadAllNotes` -Downloads the your notes from IVLE, and stores them in the folder "notes" + -Format: `downloadAllNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE]` +Downloads the your notes from IVLE, and stores them in the folder "notes" + +Format: `downloadAllNotes `downloadAllNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE]` + +[TIP] +You do not have to Enter the full module code or worry about the capitalization. [NOTE] -==== -You would need to have Google Chrome installed in a default location in order to execute this command -==== +You would need to have Google Chrome installed in the default location in order to execute this command. +[NOTE] +You would be unable to see your inputted command after inputting it, this is a security feature to prevent your login credentials from being compromised. + **** +image::downloadExample.PNG[width="900"] + * Automatically accesses the your IVLE account using Google Chrome, and downloads all notes and resources of the specified module. -* This process can take up to 1 minute, depending on the internet speed of the local area network. +* if an incomplete module code is entered, it will select the a module that matches it the most + + Example: if you are enrolled in `CS2113` and `cs2101` entering `mod/cs21` will select `cs2101` * You may notice a new window of Google Chrome opening up. Please refrain from interferring with the automated process. +image::chromeOpen.png[width="900"] + +* N*Sync might be unresponsive during the download, it is so to prevent you from accidentally introducing file corruption. + * If the process is successful, the result window of NSync will display the exact path to your newly downloaded notes. **** Examples: -* `downloadAllNotes user/e1234567 pass/password1 mod/CS2101` + -Downloads all notes and resources for CS2101 -* `downloadAllNotes user/e1234567 pass/password1 mod/CS2113` + -Downloads all notes and resources for CS2113 +Download Successful + +image::downloadAllSuccessful.PNG[width="900"] + +Module not found + +image::downloadModNotFound.PNG[width="900"] + +Password or username Incorrect + +image::downloadPasswordOrUsernameWrong.PNG[width="900"] + + +==== Display all notes from a selected module from IVLE : `downloadSelectNotes` without prefix `"file/"` +Displays all the available notes of a selected + +Format: `downloadSelectNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE]` + +[NOTE] +Currently the files are not sorted in any order. In a future version we will make its sorted by file type + +image::downloadSelectFileExample.png[width="900"] + +* All available notes from the selected module would be sourced and displayed + +* if a file is not shown, it could be either a private folder or a submission folder, consult your lecturer for more information + +Examples: + +File Fetch Successful + +image::downloadSelectFileSuccess1.png[width="900"] +image::downloadSelectFileSuccess2.png[width="900"] + +Module not found + +image::downloadModNotFound.PNG[width="900"] + +Password or username Incorrect + +image::downloadPasswordOrUsernameWrong.PNG[width="900"] + +==== Downloading selective notes from a selected module from IVLE : `downloadSelectNotes` with prefix `"file/"` +Download a selective number of notes from IVLE, and stores them in the folder "notes". + +Format: `downloadSelectNotes [user/IVLE USERNAME] [pass/IVLE PASSWORD] [mod/ENROLLED MODULE] [file/0,1,2...n]` + +[TIP] +Use `downloadSelectFile` without the `file\` prefix to obtain the file IDs + +image::fileExample.png[width="900"] + +image::downloadSelectExample.png[width="900"] + +* The files would be downloaded one by one from IVLE to your "notes" folder. + +* if you entered a mix of invalid and valid file IDs, N*Sync will only only download the correct files, up till it encounters a invalid ID. + + Example: file/0,1,2,90000000,3 + if 0,1,2,3 are valid file IDs, only file 0,1,2 will be downloaded. + +Examples: + +Download Successful + +image:::downloadSelectSuccess.png[width="900"] + +==== Show all downloaded notes: `showNotes` +Displays all the downloaded notes in the UI + +Format: `showNotes` + +[NOTE] +the files are displayed in the order that it is in your directory + +* It recursively searches your `notes` folder and displays all the files available + +Example: -==== Downloading notes from IVLE : `downloadSelectNotes` +image::showNotes1[width="900"] +image::showNotes2[width="900"] +image::showNotes3[width="900"] ==== Clearing all downloaded notes : `clearNotes` @@ -357,22 +446,40 @@ _{explain how the user can enable/disable data encryption}_ * *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` + * *Clear* : `clear` + * *Clear Notes* : `clearNotes` + * *Download All Notes* : `downloadAllNotes user/e1234567 pass/password1 mod/CS2113` -* *Download Selected Notes* : + +* *Download Selected Notes (seleted notes)* : `downloadSelectNotes user/e1234567 pass/password1 mod/CS2113 file/1,2,3...n` + +* *Download Selected Notes (show all notes)* : `downloadSelectNotes user/e1234567 pass/password1 mod/CS2113` + +* *Show notes* : `showNotes` + * *Delete* : `delete INDEX` + e.g. `delete 3` + * *Edit* : `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]... [em/ENROLLED MODULE]...` + e.g. `edit 2 n/James Lee e/jameslee@example.com` + * *Find* : `find KEYWORD [MORE_KEYWORDS]` + e.g. `find James Jake` + * *Help* : `help` + * *History* : `history` + * *List* : `list` + * *Merge Timetables* : `merge [index 1] [index 2] ` e.g. `merge 1 2 5` + * *Redo* : `redo` + * *Select* : `select INDEX` + e.g.`select 2` + * *Undo* : `undo` From 31e847180d3e456cac5172d0c671e2a5ea5efa03 Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 20:46:15 +0800 Subject: [PATCH 06/18] Update UserGuide.adoc --- docs/UserGuide.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index be52335821ba..bae5194bd3a5 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -408,6 +408,10 @@ Download Successful image:::downloadSelectSuccess.png[width="900"] +File not found + +image::downloadSelectFileNotFound[width="900"] + ==== Show all downloaded notes: `showNotes` Displays all the downloaded notes in the UI From 40097048db278bcae63a82de7acc38d2508b0f97 Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 20:46:27 +0800 Subject: [PATCH 07/18] Update UserGuide.adoc From bb17466420e162d10a40377fb6b043f436d37d56 Mon Sep 17 00:00:00 2001 From: BearPerson1 <39690145+BearPerson1@users.noreply.github.com> Date: Tue, 30 Oct 2018 20:48:22 +0800 Subject: [PATCH 08/18] Add files via upload --- docs/images/chromeOpen.PNG | Bin 0 -> 6362 bytes docs/images/donwloadModNotFound.PNG | Bin 0 -> 9360 bytes docs/images/downloadAllSuccessful.PNG | Bin 0 -> 10855 bytes docs/images/downloadExample.PNG | Bin 0 -> 5709 bytes docs/images/downloadPasswordOrUsernameWrong.PNG | Bin 0 -> 8538 bytes docs/images/downloadSelectExample.PNG | Bin 0 -> 6234 bytes docs/images/downloadSelectFileExample.PNG | Bin 0 -> 5801 bytes docs/images/downloadSelectFileNotFound.PNG | Bin 0 -> 9575 bytes docs/images/downloadSelectFileSuccess2.PNG | Bin 0 -> 9718 bytes docs/images/downloadSelectSuccess.PNG | Bin 0 -> 10298 bytes docs/images/downloadSelectfileSuccess1.PNG | Bin 0 -> 12417 bytes docs/images/showNotes1.PNG | Bin 0 -> 7187 bytes docs/images/showNotes2.PNG | Bin 0 -> 11070 bytes docs/images/showNotes3.PNG | Bin 0 -> 10041 bytes 14 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/chromeOpen.PNG create mode 100644 docs/images/donwloadModNotFound.PNG create mode 100644 docs/images/downloadAllSuccessful.PNG create mode 100644 docs/images/downloadExample.PNG create mode 100644 docs/images/downloadPasswordOrUsernameWrong.PNG create mode 100644 docs/images/downloadSelectExample.PNG create mode 100644 docs/images/downloadSelectFileExample.PNG create mode 100644 docs/images/downloadSelectFileNotFound.PNG create mode 100644 docs/images/downloadSelectFileSuccess2.PNG create mode 100644 docs/images/downloadSelectSuccess.PNG create mode 100644 docs/images/downloadSelectfileSuccess1.PNG create mode 100644 docs/images/showNotes1.PNG create mode 100644 docs/images/showNotes2.PNG create mode 100644 docs/images/showNotes3.PNG diff --git a/docs/images/chromeOpen.PNG b/docs/images/chromeOpen.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b94e3d0c69dd432f4fc427280ae5705c88a364b0 GIT binary patch literal 6362 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 literal 0 HcmV?d00001 diff --git a/docs/images/donwloadModNotFound.PNG b/docs/images/donwloadModNotFound.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e904d498d029aa0d66743df315a330fb21035ea4 GIT binary patch literal 9360 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 literal 0 HcmV?d00001 diff --git a/docs/images/downloadAllSuccessful.PNG b/docs/images/downloadAllSuccessful.PNG new file mode 100644 index 0000000000000000000000000000000000000000..dd0c7f2dafd4e586d4e0ce547489934fe5fa6095 GIT binary patch literal 10855 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