From 151348f7c2a789596f6b6a0f24c9f009a14da33f Mon Sep 17 00:00:00 2001 From: Michael Sims Date: Thu, 6 Jun 2024 19:06:22 -0700 Subject: [PATCH] Version 2.2.0 --- README.md | 6 + build/environment.md | 39 ++-- build/img.png | Bin 0 -> 95523 bytes build/maclinux/graal.sh | 1 + build/maclinux/native.sh | 35 ++-- build/windows/graal.bat | 1 + build/windows/native.bat | 6 +- pom.xml | 63 ++++++- src/main/java/com/simtechdata/Main.java | 12 +- .../java/com/simtechdata/actions/Actions.java | 108 +++++++---- .../com/simtechdata/actions/DownloadLink.java | 3 + .../java/com/simtechdata/actions/Watch.java | 8 + .../java/com/simtechdata/database/DB.java | 174 ++++++++++-------- .../java/com/simtechdata/database/Graal.java | 2 +- .../java/com/simtechdata/database/Link.java | 4 +- .../java/com/simtechdata/database/SQLite.java | 28 +-- .../com/simtechdata/database/TimeUtil.java | 43 +++-- 17 files changed, 346 insertions(+), 187 deletions(-) create mode 100644 build/img.png diff --git a/README.md b/README.md index 3cde897..6ba258e 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,12 @@ right. ## Version History +* 2.2.0 + * Added the `sb` option which allows a search of entire browser history + * Fixed problem when copying browser history for offline access + * Fixed date issues with different browsers + * Fixed safari schema problem with sqlite + * 2.1.0 * Added check for headless mode in Watch class diff --git a/build/environment.md b/build/environment.md index c670b75..ce0909c 100644 --- a/build/environment.md +++ b/build/environment.md @@ -19,17 +19,30 @@ Click on your operating system to see how to set up the build environment: ## First +If you're in Windows: + +```bash +mkdir C:\github +cd C:\github +``` + +Mac/Linux: + +```bash +mkdir ~/github +cd ~/github +``` + Clone the repository to your local drive: ```bash git clone https://github.com/EasyG0ing1/iget.git -cd iget ``` ### MacOS or Linux ```bash -cd ~/github/iget/build/maclinux +cd iget/build/maclinux chmod +x *.sh ./buildjar.sh ``` @@ -37,7 +50,7 @@ chmod +x *.sh ### Windows ```bash -cd C:\github\iget\build\windows +cd iget\build\windows buildjar.bat ``` @@ -92,12 +105,10 @@ You will then see it do things like updating `yt-dlp` ... give it some time. The next thing you should see will look like this: -```bash -Watching Clipboard - Ctrl+C to exit -``` +> Watching Clipboard - Ctrl+C to exit And **THAT'S ALL YOU SHOULD SEE**. If you see a command prompt show up after that, then something went wrong. Open an -issue and lets talk about it. +issue and let's talk about it. Launch your browser and go to instagram.com and log into your Instagram account. Next, find a reel. If clicking on reel on the left side of the screen doesn't work for you, then just find a content creator and from their page, click on @@ -106,17 +117,15 @@ Reels then click on one of their reels. After you've clicked on a reel, the video should pop up in your browser and start playing. We want the text in the URL field, so highlight all of that text, then RIGHT CLICK on it and select copy. The text should look something like this: -```azure -https://www.instagram.com/reel/C6RT4CKyl2O/ -``` +> `https://www.instagram.com/reel/C6RT4CKyl2O/` + Once you copy it to your clipboard, you should see in the terminal something like this: -```azure -Watching Clipboard - Ctrl+C to exit -Downloading: https://www.instagram.com/reel/C6RT4CKyl2O/?utm_source=ig_embed -Success: https://www.instagram.com/reel/C6RT4CKyl2O/?utm_source=ig_embed -``` +> Watching Clipboard - Ctrl+C to exit +> Downloading: https://www.instagram.com/reel/C6RT4CKyl2O/?utm_source=ig_embed +> Success: https://www.instagram.com/reel/C6RT4CKyl2O/?utm_source=ig_embed + If the Downloading line doesn't show up right away for some reason, click on the Terminal window to make it active, then click on the web browser to make it active and copy the text to the clipboard again. diff --git a/build/img.png b/build/img.png new file mode 100644 index 0000000000000000000000000000000000000000..882f1b85889478eb23e64a21272d33a40f06a44b GIT binary patch literal 95523 zcmd>l`8$;F`~LmR491oryD&n^5-~``Af*sevSjIn5TOtX^T<}p(nj{J&>~wQ#Arcw zsZd1OOSU2V%;%oozkL6PZ$};DsH1!C=UUJ6ysqbl#qlHD9HJZm0Pds4hfV;1fj?pZ zo)vy91%Fxx00l=6>7NXCoO#W*DQ@(N!E*v9aOi!^pC^5B+}e(>g|7Bxvpiez&Apzp zb5J1%B~7!xmL^6;MV;g`Hpdh25m6SsM~PCe$w1#|ZgVnqXfk6mw6lFStGr@zqk~rG znB7-7FmSN8f)+9d|Mo&9zos_M-WpiAA(z$v`-5Ee=J#H6y|4^%$8+j$&fodW zRqH*GtYkln|FE~jG+op8xoNt_g(qjkG<^o2ybRx3&-qep-;4yVR~N!V{2~0m$H%G>)&>SvTGCf_t-u@E#)aw7Jcrey64*%ZuNm$ zdfJRQB@+HI`#W2|>uSoJ>)c|xYkbzN;TuhR4i=lQ*@M*v=5rz13>j_4P;k7bhlj_~ z8Jk|pEA`2<0e#1Vo_maCa>Q#TcPF{TnLda;g*UtC#V6Jf1xO46h-!Bd)oT;2zpK8L zw);Zb%65&0r!z~A!LR=vbEv=7C&=rg8hs&=5}batR*5uiV-UI5-u2C;y7Re5|GIw= z1l}yp!t<#VOOVvWn95JQVzl=0Rn=Q1jfRNJ-@O*T_Ch-s?W~j)adGr83)!ElCmLvL z;F7S1H2uK9FhPm*fvzYClBOpSa@JbK!bUq~ZE>9Y=cX{uTi3)}Vz`mh($LUQ`rLk6 zA+PD;kdoqui}6Ln361SM!}t?*%;kyJX$*Jb?a%{6is<2X{tQB;7oLPh6_hWxgJM+gB75jqj=JF zN9B|pYCds?t$ieAa%yMz(5@<+N&j~OOFDzovqMLS@c(m?&ziUtP zMtb+EEbtRTaUlDsd#WB5B~d&#AIh2}S4&MQ(Izi+Yn6`P^!_fny{{l9Cg$)SsSe7w zXilM7c;n>Q=~H?dWBo(mgh#gm) z&v%ppkC$=tBTdR{uq#8ax zP?;}M`BQspZ8F-<%QRPIrx?-a}SwJr1;+)a=r_0-Fg!X?3K8sq4n zG(Ay0&mV81eS|SU5^r%po1QV$WIposGmIh+h0uuxY3>W}_3qU#Bo;W`U#RGQ;KIQT z&Go>AJ^n=r^dTPj=^Yf?$HNQa9_WcMuCZ`tcw{WD9Q1pDMJN^D)ZnhM{h= zR+brvqi}@HNp|STkbad%PwX&peW&xxz@xJ)>fBeM=%#EI;L%!sRKgxi%{u+va8G4y zuF*Q)^61SpU9>lnqIO#0nN?(eXb?l&{&kD>dc`W1Y!toAp`axyMA*vp4fC+}eMYx6k@;+@ z^lB!BG~piWSR zhZ?;9x{t~ooTp-au7e~tOh4ak1M2Xf`rSBKR9^50ub781l*_+<{xx2CiBeqxfXF@` z7fx=i_?5&5R8P z<}>;rBXr8l%497?gRwDN+ckJ~?lm_ct~@%0AKBtlLO2i@9;v(-aGp+y{_Lf383BGZ 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

kr0&@oLm*(ajX&i&4O92$N~=6D6}> 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

tR*V?vbsX58=i6(s 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 xh*RtdxZ{E*8(CHhj%@3yP&}y-t4p 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∓FplYv3nOJPrAz6e8&eh+vS$5SE=ql+&XT;fW_y4B{7J4ZnRb*%$W=KG zNbAiLem?sCeGM&&R#KmAvGXSE(z|lAo3(LKbnb0lUAeGfigouM-SviP0ljqY-a z8fisI4N_-qS}w-=&Fk$nq~4S?+Ge=^+v(eQ)t@YQxvo z*47zoYikACZQ-Y)#8(BDLantN36r6&ofy;BB3<>E5hnuituCp7ztG`$Yd%F)hcam} z{(Nq3PK-g$aSGK^yTrYRSbmBOFS1YK8SyrNwxEL&{(<@$KO)0j#7;V|ip zSMg_M$4sbjwF(k*#7V|)C(xs+x##iFjxF9r%k0kfaHN<;`hl>wQnfDDfl*!7Tmt4e<*60k39R|Y%&5A85bsnx_+--d3pue;W?G&ehUl=*h~=s%sd)&EF9 zXmlJRbp%4(ke;FF#fmvI_H0$K)&#BZuZFmW!Bo~7BeMtG6`V-E5 zgAJ@yZzzJ7XBw|*74`~O&jCsK+EXbde@e6T)vy!R^mUPL-o`>!fSZOcM0G)Tc4n_p zSao?hWAc50b>aGT>lm$^(zb2m2leGB^>*V&^jER!1IP$tGws1*q~}-V!wCN&GwaCW z)`MrR^c6Ny~`U|-n-z6~Qo1B39BK|#|U;Com%I5=3iYSpTu`Zs61Jip!r7+m8r&lTByFW~Z^K$pNP4)I?LTn?vBhI+-&!>nuoC1&| z@rA_~k8$HJ$(N4!A$@`5Kd-IOH zXq>3+TAo4I+`SSnq1F-Rb_bv1$B9FQk8H80E2b}YB^W2<{${%3?;zXcx*7Hn;W0C@ z$ZB-dA3iL@L?&o$LcZxBW%;xA%;vnx$ZH-Co(i|p94c|H)~-hgG17lp=c{G-U^eDn zCUD}6axR|h$zyoVe~WxK61f4fT~&Z%v#|N6Fd=zPHBJ$mZSMT=^zgj2xJe89l%^$g zWCdK{(sfREFe4XdlyhNcPwF&}_@Y)J=gY!O?$QS=Y2VR*eC63KSiexKO8H0XhlMf= zHu{`8?sBPa(-GnF{#a4AH)VgE+`0?Wrcaed=?vAJ_?e?)y%!m4)h;^pWHL@w{`4(_ zJ-hbs;ToiM1M|yD_E!0sdrqQXW54Tu(tmsYnA7QU@t`(sp~$%?lRT#-?7CQpqv+($ zP_|TOyhu+hV@>CUy*<~SJ(5|1EOBQ2@M>uj1N2!HUND2Gc0r-%|2~}Z zlGA*Kase!<4Vd9$XBn}uqMYzMN2YsiBxWV@l=(MJcdTSCQs4?Q1HOXbbVo7N1%YO0 zz+_1hBIS|0E0qsphxa4#M|M?MUG=bel3(xpd09;Ul^czQ5Pn|P<*h+P*a6A9{O*5eT; z4dVy9!&lA!8_wywU88ea`~r(JHlmgeLW=)9bxJRJApR~WO4PNU?J9+aZvS`Bfq;R~ zf4_4(cOLFVcaQ#%fCzCFFisDzVYGy|(_Cd3*HvHvTU6&p&1K_iVr#;C4n=nnXYFRK zFQ-#5iwR8hgGUJS$7Rjns&O;h>cTi-@525TseR#creIzk;{u&&{QJjc%~z=3NSa|q zeIixTrVq~j p=J}=R5CH;BxboY+|BpYJd7^WolS8GWlPv=O_L(0vD>8LG|38~TRh|F< literal 0 HcmV?d00001 diff --git a/build/maclinux/graal.sh b/build/maclinux/graal.sh index 8287c21..bc70c6f 100755 --- a/build/maclinux/graal.sh +++ b/build/maclinux/graal.sh @@ -2,3 +2,4 @@ rm -R $HOME/github/iget/graalvm mkdir $HOME/github/iget/graalvm java --enable-preview -agentlib:native-image-agent=config-output-dir=$HOME/github/iget/graalvm -jar $HOME/github/iget/target/iGet-jar-with-dependencies.jar setBrowser java --enable-preview -agentlib:native-image-agent=config-merge-dir=$HOME/github/iget/graalvm -jar $HOME/github/iget/target/iGet-jar-with-dependencies.jar graal +java --enable-preview -agentlib:native-image-agent=config-merge-dir=$HOME/github/iget/graalvm -jar $HOME/github/iget/target/iGet-jar-with-dependencies.jar version diff --git a/build/maclinux/native.sh b/build/maclinux/native.sh index 4ae2c82..b726474 100755 --- a/build/maclinux/native.sh +++ b/build/maclinux/native.sh @@ -1,15 +1,20 @@ -native-image \ --Djava.awt.headless=true \ ---no-fallback \ ---verbose \ ---enable-preview \ ---initialize-at-build-time=org.sqlite.util.ProcessRunner \ --cp "$HOME/.m2/repository/org/xerial/sqlite-jdbc/3.45.3.0/sqlite-jdbc-3.45.3.0.jar" \ --H:+ReportExceptionStackTraces \ --H:ReflectionConfigurationFiles=$HOME/github/iget/graalvm/reflect-config.json \ --H:JNIConfigurationFiles=$HOME/github/iget/graalvm/jni-config.json \ --H:ResourceConfigurationFiles=$HOME/github/iget/graalvm/resource-config.json \ --H:SerializationConfigurationFiles=$HOME/github/iget/graalvm/serialization-config.json \ --H:Name=$HOME/github/iget/target/iget \ --jar $HOME/github/iget/target/iGet-jar-with-dependencies.jar \ -$HOME/github/iget/target/iget +#!/bin/bash + +mvn -f $HOME/github/iget/pom.xml clean -Pnative native:compile + + +# native-image \ +# -Djava.awt.headless=true \ +# --no-fallback \ +# --verbose \ +# --enable-preview \ +# --initialize-at-build-time=org.sqlite.util.ProcessRunner \ +# -cp "$HOME/.m2/repository/org/xerial/sqlite-jdbc/3.45.3.0/sqlite-jdbc-3.45.3.0.jar" \ +# -H:+ReportExceptionStackTraces \ +# -H:ReflectionConfigurationFiles=$HOME/github/iget/graalvm/reflect-config.json \ +# -H:JNIConfigurationFiles=$HOME/github/iget/graalvm/jni-config.json \ +# -H:ResourceConfigurationFiles=$HOME/github/iget/graalvm/resource-config.json \ +# -H:SerializationConfigurationFiles=$HOME/github/iget/graalvm/serialization-config.json \ +# -H:Name=$HOME/github/iget/target/iget \ +# -jar $HOME/github/iget/target/iGet-jar-with-dependencies.jar \ +# $HOME/github/iget/target/iget diff --git a/build/windows/graal.bat b/build/windows/graal.bat index 8dde0f9..afd5042 100644 --- a/build/windows/graal.bat +++ b/build/windows/graal.bat @@ -4,3 +4,4 @@ rd /s /q %APPDATA%\iGet mkdir C:\github\iGet\graalvm java --enable-preview -agentlib:native-image-agent=config-output-dir=C:\github\iGet\graalvm -jar C:\github\iGet\target\iGet-jar-with-dependencies.jar setBrowser java --enable-preview -agentlib:native-image-agent=config-merge-dir=C:\github\iGet\graalvm -jar C:\github\iGet\target\iGet-jar-with-dependencies.jar graal +java --enable-preview -agentlib:native-image-agent=config-merge-dir=C:\github\iGet\graalvm -jar C:\github\iGet\target\iGet-jar-with-dependencies.jar version diff --git a/build/windows/native.bat b/build/windows/native.bat index 6854669..31efe93 100644 --- a/build/windows/native.bat +++ b/build/windows/native.bat @@ -1,3 +1,5 @@ @echo off -cd C:\github\iGet -native-image --no-fallback --verbose --enable-preview --initialize-at-build-time=org.sqlite.util.ProcessRunner -cp "%HOMEPATH%\.m2\repository\org\xerial\sqlite-jdbc\3.45.3.0\sqlite-jdbc-3.45.3.0.jar" -H:ReflectionConfigurationFiles=C:\github\iGet\graalvm\reflect-config.json -H:JNIConfigurationFiles=C:\github\iGet\graalvm\jni-config.json -H:ResourceConfigurationFiles=C:\github\iGet\graalvm\resource-config.json -H:SerializationConfigurationFiles=C:\github\iGet\graalvm\serialization-config.json -H:+ReportExceptionStackTraces -jar C:\github\iGet\target\iGet-jar-with-dependencies.jar C:\github\iGet\target\iget + +mvn -f C:\github\iget\pom.xml clean -Pnative native:compile + +rem native-image --no-fallback --verbose --enable-preview --initialize-at-build-time=org.sqlite.util.ProcessRunner -cp "%HOMEPATH%\.m2\repository\org\xerial\sqlite-jdbc\3.45.3.0\sqlite-jdbc-3.45.3.0.jar" -H:ReflectionConfigurationFiles=C:\github\iGet\graalvm\reflect-config.json -H:JNIConfigurationFiles=C:\github\iGet\graalvm\jni-config.json -H:ResourceConfigurationFiles=C:\github\iGet\graalvm\resource-config.json -H:SerializationConfigurationFiles=C:\github\iGet\graalvm\serialization-config.json -H:+ReportExceptionStackTraces -jar C:\github\iGet\target\iGet-jar-with-dependencies.jar C:\github\iGet\target\iget diff --git a/pom.xml b/pom.xml index dfd3da6..ae58155 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.simtechdata iGet - 2.1.0 + 2.2.0 jar iGet @@ -20,14 +20,12 @@ 3.4.1 3.7.1 3.4.1 - 3.1.0 3.2.0 2.16.2 - 21 - 0.0.8 - 1.0.21 - igram + 3.1.0 + iget com.simtechdata.Main + ${project.basedir}/graalvm @@ -43,7 +41,7 @@ org.slf4j slf4j-api - 1.7.36 + 2.0.12 commons-io @@ -131,7 +129,7 @@ jar-with-dependencies - iGet + ${name} @@ -151,7 +149,6 @@ 22 22 - 22 --enable-preview @@ -171,4 +168,52 @@ + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + + + + + native + + + + + org.graalvm.buildtools + native-maven-plugin + ${native-maven-plugin} + true + + ${java.version} + ${imageName} + ${mainClass} + true + + -Djava.awt.headless=true + --no-fallback + --verbose + --enable-preview + --initialize-at-build-time=org.sqlite.util.ProcessRunner + -cp + ${user.home}/.m2/repository/org/xerial/sqlite-jdbc/3.45.3.0/sqlite-jdbc-3.45.3.0.jar + + -march=compatibility + -H:+UnlockExperimentalVMOptions + -H:+ReportExceptionStackTraces + -H:JNIConfigurationFiles=${graalFolder}/jni-config.json + -H:DynamicProxyConfigurationFiles=${graalFolder}/proxy-config.json + -H:ReflectionConfigurationFiles=${graalFolder}/reflect-config.json + -H:ResourceConfigurationFiles=${graalFolder}/resource-config.json + -H:SerializationConfigurationFiles=${graalFolder}/serialization-config.json + + + + + + + diff --git a/src/main/java/com/simtechdata/Main.java b/src/main/java/com/simtechdata/Main.java index a27ae83..efab367 100644 --- a/src/main/java/com/simtechdata/Main.java +++ b/src/main/java/com/simtechdata/Main.java @@ -53,7 +53,7 @@ public void write(int b) { case "checkbrowser" -> SQLite.checkBrowser(); case "setbrowserpath" -> Actions.setBrowserPath(); case "setbrowser" -> Actions.setBrowser(); - case "get" -> { + case "get", "g" -> { if (args.length > 1) { Actions.downloadLink(args[1]); } @@ -77,6 +77,11 @@ public void write(int b) { case "list", "show" -> Actions.showLinks(State.NEW); case "?", "--help" -> showHelp(); case "cmds" -> Actions.showCommands(); + case "sb" -> { + String search = args[1]; + Actions.searchBrowser(search); + System.exit(0); + } case "history" -> { System.out.println(STR."\{NL}Showing Downloaded Links:\{NL}"); Actions.showLinks(State.DOWNLOADED); @@ -122,8 +127,8 @@ private static void showHelp() { (http must begin the link to be recognized as a link) Options: - get - Download links in que - get - download one URL right now + get - Download links in que (can also use g) + get - download one URL right now (can also use g)mac watch - Watch mode looks for links to show up in clipboard then downloads them setFolder - Set the folder where downloads get stored setBrowser - Set which browser you use for Instagram (this helps prevent download failures) @@ -135,6 +140,7 @@ private static void showHelp() { remove - Remove one link from the download list (A menu will be provided) failed - Show links that failed to download version - Show iGet version number + sb - Search browser history for word. Will offer list and selected link will go to clipboard browserHistory - show ALL of the links that are in your browsers history checkBrowser - Lets you verify that iGet can find the History file for your web browser setBrowserPath - Lets you set the path to the browser History file if the above option does not find it. diff --git a/src/main/java/com/simtechdata/actions/Actions.java b/src/main/java/com/simtechdata/actions/Actions.java index d633aa6..23e87ca 100644 --- a/src/main/java/com/simtechdata/actions/Actions.java +++ b/src/main/java/com/simtechdata/actions/Actions.java @@ -8,17 +8,20 @@ import com.simtechdata.settings.AppSettings; import com.simtechdata.settings.Search; +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.SQLException; +import java.util.List; import java.util.*; import java.util.concurrent.*; import static com.simtechdata.enums.OS.NL; -import static com.simtechdata.enums.Reason.DUPLICATE_ENTRY; public class Actions { @@ -93,6 +96,53 @@ public static void addBrowserHistory(int hours, boolean includeFailed) { } } + public static void searchBrowser(String search) { + LinkedList list = DB.searchBrowser(search); + if (list.isEmpty()) { + System.out.println("\n\tNo Results\n\n"); + System.exit(0); + } + StringBuilder sb = new StringBuilder(); + int places = (list.size() < 10) ? 0 : (list.size() < 100) ? 1 : 2; + int count = 1; + for (Link link : list) { + int clip = Math.min(100, link.getLink().length()) - 1; + String url = link.getLink().substring(0, clip); + String date = TimeUtil.toMonthDayYear(link.getTimestamp()); + sb.append(padNumber(count, places)).append(") ").append(url).append(" - ").append(date).append(NL); + count++; + } + sb.append(STR."Chose (\{count} - Quit): "); + System.out.print(sb); + int choice = new Scanner(System.in).nextInt(); + if (choice == count) { + System.exit(0); + } + toClipboard(list.get(choice)); + System.out.println(STR."\{NL}\tLink copied to your clipboard\{NL}"); + } + + private static void toClipboard(Link link) { + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + StringSelection contents = new StringSelection(link.getLink()); + clipboard.setContents(contents, null); + } + + + private static String padNumber(int number, int places) { + String pre = ""; + if (number < 10) { + pre = "0".repeat(places); + } + else if (number < 100) { + pre = "0".repeat(places - 1); + } + else if (number < 1000) { + pre = "0".repeat(places - 2); + } + return STR."\{pre}\{number}"; + } + public static void downloadLink(String lnk) { Link link = new Link(lnk, System.currentTimeMillis()); try { @@ -166,13 +216,9 @@ public static void addLink(Link link, boolean override) { } public static void showHistory() { - System.out.print("Include failed downloads in list? (Y/N): "); - String option = new Scanner(System.in).nextLine(); - boolean includeFailed = option.toLowerCase().contains("y"); - LinkedList historyList = DB.getBrowserHistoryDates(includeFailed); - boolean retryFailed = false; + LinkedList historyList = DB.getBrowserHistoryDates(true); while (true) { - StringBuilder sb = new StringBuilder(STR."Which date would you like to download?\{NL + NL}"); + StringBuilder sb = new StringBuilder(STR."Which date would you like to see (A=ALL)?\{NL + NL}"); int c = 0; for (BrowserHistory history : historyList) { String date = history.getDate(); @@ -180,40 +226,38 @@ public static void showHistory() { sb.append(c).append(") ").append(date).append(STR." (\{count})").append(NL); c++; } - int toggleFailed = c; - sb.append(toggleFailed).append(") Retry Failed Downloads: ").append(retryFailed).append(NL); - int exit = c + 10; + int exit = c + 1; sb.append(STR."\{exit}) QUIT\{NL}: "); System.out.print(sb); - int choice = new Scanner(System.in).nextInt(); - System.out.println(" "); - if (choice == exit) { - break; + String usrChoice = new Scanner(System.in).nextLine(); + if (usrChoice.toLowerCase().contains("a")) { + for (BrowserHistory history : historyList) { + for (Link link : history.getLinkList()) { + System.out.println(STR."\{link.getLink()}\{NL}"); + } + } + System.exit(0); } - else if (choice == toggleFailed) - retryFailed = !retryFailed; else { - BrowserHistory history = historyList.get(choice); - for (Link link : history.getLinkList()) { - if (DB.addLink(link).equals(DUPLICATE_ENTRY)) { - System.out.println(STR."Link already downloaded: \{link.getLink()}"); + int choice = Integer.parseInt(usrChoice); + System.out.println(" "); + if (choice == exit) { + break; + } + else { + int count = historyList.size(); + if (choice >= 0 && choice < count) { + BrowserHistory history = historyList.get(choice); + for (Link link : history.getLinkList()) { + System.out.println(STR."\{link.getLink()}\{NL}"); + } + System.exit(0); } else { - link.download(retryFailed); - } - } - while (executor.getActiveCount() > 0) { - sleep(200); - } - if (DownloadResults.haveFailures()) { - System.out.println("Failures:"); - for (Link link : DownloadResults.getFailedList()) { - System.out.println(STR."\t\{link.getLink()}"); + System.out.println(STR."\{NL}\tInvalid selection\{NL}"); } } } - System.out.println("Hit Enter To Continue"); - new Scanner(System.in).nextLine(); } } diff --git a/src/main/java/com/simtechdata/actions/DownloadLink.java b/src/main/java/com/simtechdata/actions/DownloadLink.java index 2ac09fd..8564a3e 100644 --- a/src/main/java/com/simtechdata/actions/DownloadLink.java +++ b/src/main/java/com/simtechdata/actions/DownloadLink.java @@ -31,6 +31,9 @@ public void showCommand() { } private String formatLink(String link) { + if (link.toLowerCase().contains("youtube") || link.toLowerCase().contains("tu.be")) { + return link; + } if (link.toLowerCase().contains("instagram")) { link = link.replace("instagram.com/reels", "instagram.com/reel"); String[] items = link.replaceFirst("//", "/").split("/"); diff --git a/src/main/java/com/simtechdata/actions/Watch.java b/src/main/java/com/simtechdata/actions/Watch.java index 189a2e2..f19c349 100644 --- a/src/main/java/com/simtechdata/actions/Watch.java +++ b/src/main/java/com/simtechdata/actions/Watch.java @@ -12,6 +12,12 @@ public class Watch { private static final List downloadedLinks = new ArrayList<>(); + private static boolean graal = false; + + public static void startGraal() { + graal = true; + start(); + } public static void start() { @@ -58,6 +64,8 @@ public static void start() { catch (ExecutionException | InterruptedException ignored) { System.out.println(STR."Failed: \{link.getLink()}"); } + if (graal) + System.exit(0); }).start(); } } diff --git a/src/main/java/com/simtechdata/database/DB.java b/src/main/java/com/simtechdata/database/DB.java index f8bea01..9afe034 100644 --- a/src/main/java/com/simtechdata/database/DB.java +++ b/src/main/java/com/simtechdata/database/DB.java @@ -45,26 +45,6 @@ public static State downloadedState(String link) { } } - public static Reason addLink(Link link) { - boolean linkExists = linkExists(link.getLink()); - if (linkExists) { - return downloadedState(link.getLink()).equals(State.DOWNLOADED) ? DUPLICATE_ENTRY : DOWNLOAD_FAILED; - } - String SQL = "INSERT INTO Links (Link, State, Timestamp) VALUES (?, ?, ?);"; - try (Connection conn = getConn(); - PreparedStatement pst = conn.prepareStatement(SQL)) { - pst.setString(1, link.getLink()); - pst.setString(2, NEW.name()); - pst.setLong(3, link.getTimestamp()); - pst.executeUpdate(); - return ADDED_SUCCESSFULLY; - } - catch (SQLException e) { - System.out.println(Arrays.toString(e.getStackTrace())); - } - return FAILED_DATABASE; - } - public static Reason addLink(String link, boolean clearDownloadedFlag) { boolean linkExists = linkExists(link); if (clearDownloadedFlag && linkExists) { @@ -191,70 +171,36 @@ public static LinkedList getBrowserHistoryDates(boolean includeF return historyList; } + public static LinkedList searchBrowser(String search) { + LinkedList list = new LinkedList<>(); + String SQL = STR."SELECT url, last_visit_time as TIME from urls;"; + try (Connection conn = SQLite.getBrowserConnection(); + ResultSet rs = conn.createStatement().executeQuery(SQL)) { + while (rs.next()) { + String url = rs.getString("url"); + long time = rs.getLong("TIME"); + Link link = new Link(url, time); + if (url.toLowerCase().contains(search.toLowerCase())) + list.addLast(link); + } + } + catch (SQLException e) { + e.printStackTrace(); + } + return list; + } + public static LinkedList getBrowserHistory(int hours, boolean includeFailed) { Browser browser = Browser.getBrowser(); LinkedList list = new LinkedList<>(); Set dupeList = new HashSet<>(); - long offsetInSeconds = 978307200; - String SQLChrome = "SELECT url as URL, last_visit_time as TIME from urls " + - "WHERE last_visit_time > ? " + - "AND (" + - " (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR url LIKE(?)" + - ") ORDER BY last_visit_time;"; - String SQLFirefox = "SELECT url as URL, last_visit_date as TIME from moz_places " + - "WHERE last_visit_time > ? " + - "AND (" + - " (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR (url NOT LIKE(?) AND url LIKE(?)) " + - "OR url LIKE(?)" + - ") ORDER BY last_visit_time;"; - String SQLSafari = """ - SELECT - hi.id, - hi.url as URL, - hv.visit_time as TIME - FROM - history_items hi - JOIN - history_visits hv ON hi.id = hv.history_item - JOIN - ( - SELECT - history_item, - MAX(visit_time) as MaxVisitTime - FROM - history_visits - GROUP BY - history_item - ) latest_visits ON hv.history_item = latest_visits.history_item AND hv.visit_time = latest_visits.MaxVisitTime - WHERE hv.visit_time > ? \ - AND (\ - (hi.url NOT LIKE(?) AND hi.url LIKE(?)) \ - OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) \ - OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) \ - OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) \ - OR hi.url LIKE(?)\ - ) ORDER BY hv.visit_time;"""; + long time = convertTimestamp(browser, (hours == -1) ? 0 : hours); + String SQL = getSql(browser); Connection conn; - boolean all = hours == -1; - long time = TimeUtil.getTimestampWithOffset(hours, all); try { conn = SQLite.getBrowserConnection(); PreparedStatement pst; - switch (browser) { - case FIREFOX -> pst = conn.prepareStatement(SQLFirefox); - case SAFARI -> { - pst = conn.prepareStatement(SQLSafari); - time -= offsetInSeconds; - } - default -> pst = conn.prepareStatement(SQLChrome); - } + pst = conn.prepareStatement(SQL); pst.setLong(1, time); pst.setString(2, "%time%"); //NOT pst.setString(3, "%//www.youtube.com%watch%"); @@ -269,7 +215,6 @@ OR hi.url LIKE(?)\ while (rs.next()) { String url = rs.getString("URL"); State state = downloadedState(url); - System.out.println(STR."State: \{state.name()} for link: \{url}"); if (state.equals(NEW) || state.equals(DOES_NOT_EXIST) || (state.equals(FAILED) && includeFailed)) { String[] parts = url.split("/"); boolean add = true; @@ -290,11 +235,84 @@ OR hi.url LIKE(?)\ } } catch (SQLException e) { - System.out.println(Arrays.toString(e.getStackTrace())); + StackTraceElement[] stackTraceElements = e.getStackTrace(); + for (StackTraceElement stackTraceElement : stackTraceElements) { + System.out.println(stackTraceElement.toString()); + } } return list; } + private static String getSql(Browser browser) { + String SQL; + switch (browser) { + case FIREFOX -> SQL = """ + SELECT url as URL, last_visit_date as TIME from moz_places + WHERE last_visit_date < ? + AND ( + (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR url LIKE(?) + ) ORDER BY last_visit_date; + """; + case SAFARI -> SQL = """ + SELECT + hi.id, + hi.url as URL, + hv.visit_time as TIME + FROM + history_items hi + JOIN + history_visits hv ON hi.id = hv.history_item + JOIN + ( + SELECT + history_item, + MAX(visit_time) as MaxVisitTime + FROM + history_visits + GROUP BY + history_item + ) latest_visits ON hv.history_item = latest_visits.history_item AND hv.visit_time = latest_visits.MaxVisitTime + WHERE hv.visit_time < ? + AND ( + (hi.url NOT LIKE(?) AND hi.url LIKE(?)) + OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) + OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) + OR (hi.url NOT LIKE(?) AND hi.url LIKE(?)) + OR hi.url LIKE(?) + ) ORDER BY hv.visit_time; + """; + default -> SQL = """ + SELECT url as URL, last_visit_time as TIME from urls + WHERE last_visit_time < ? + AND ( + (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR (url NOT LIKE(?) AND url LIKE(?)) + OR url LIKE(?) + ) ORDER BY last_visit_time; + """; + } + return SQL; + } + + private static long convertTimestamp(Browser browser, long hours) { + long currentMillis = System.currentTimeMillis(); + long adjustedMillis = currentMillis - (hours * 60 * 60 * 1000); // Subtract 5 hours + long secondsFrom1970To2001 = 978307200; + long unixTimeInSeconds = adjustedMillis / 1000; // Convert from milliseconds to seconds + long offsetBetweenEpochs = 11644473600000L; // Milliseconds from January 1, 1601 to January 1, 1970 + return switch (browser) { + case FIREFOX -> adjustedMillis * 1000; + case SAFARI -> unixTimeInSeconds - secondsFrom1970To2001; + default -> (adjustedMillis + offsetBetweenEpochs) * 1000; + }; + } + public static boolean remove(Link link) { String SQL = "DELETE FROM Links WHERE Link = ?;"; try (Connection conn = getConn(); diff --git a/src/main/java/com/simtechdata/database/Graal.java b/src/main/java/com/simtechdata/database/Graal.java index e046420..4ccaee5 100644 --- a/src/main/java/com/simtechdata/database/Graal.java +++ b/src/main/java/com/simtechdata/database/Graal.java @@ -53,7 +53,7 @@ public void run() { AppSettings.Clear.lastUpdate(); Folder.copyResourceToFile(); System.out.println(STR."\{NL}Copy an instagram link to the clipboard and wait for the download to finish then manually stop the program"); - Watch.start(); + Watch.startGraal(); } catch (SQLException | IOException e) { System.out.println(Arrays.toString(e.getStackTrace())); diff --git a/src/main/java/com/simtechdata/database/Link.java b/src/main/java/com/simtechdata/database/Link.java index 02c8580..f0e88eb 100644 --- a/src/main/java/com/simtechdata/database/Link.java +++ b/src/main/java/com/simtechdata/database/Link.java @@ -34,6 +34,9 @@ private static String formatIGLink(String link) { } private String formatLink(String link) { + if (link.toLowerCase().contains("youtube") || link.toLowerCase().contains("tu.be")) { + return link; + } String[] parts = link.replaceFirst("//", "/").split("/"); int last = parts.length - 1; StringBuilder newURL = new StringBuilder(STR."\{parts[0]}//"); @@ -52,7 +55,6 @@ public String getMonthDayYear() { return TimeUtil.toMonthDayYear(timestamp); } - public void download(boolean retryFailed) { new Thread(() -> { State state = DB.downloadedState(getLink()); diff --git a/src/main/java/com/simtechdata/database/SQLite.java b/src/main/java/com/simtechdata/database/SQLite.java index 74916c6..d86e072 100644 --- a/src/main/java/com/simtechdata/database/SQLite.java +++ b/src/main/java/com/simtechdata/database/SQLite.java @@ -52,6 +52,21 @@ public static Connection getBrowserConnection() { return null; } + private static void checkBrowserFiles() { + browserHistoryFileExists = browserHistoryFile.exists(); + historyCopyExists = browserHistoryCopy.exists(); + if (!browserHistoryFileExists) { + System.out.println(STR."Could not find Browser history file. The assumed path is:\{NL}\{browserHistoryFile.getAbsolutePath()}\{NL}"); + System.out.println("Run iget with the checkBrowser option"); + System.exit(1); + } + System.out.println("*".repeat(40)); + System.out.println(browserHistoryCopy.getAbsolutePath()); + System.out.println(browserHistoryFile.getAbsolutePath()); + System.out.println("*".repeat(40)); + copyHistoryFile(); + } + private static void copyHistoryFile() { /** * To help reduce writes on SSD / NVMe drives, we only make a backup copy of @@ -77,19 +92,6 @@ private static void copyHistoryFile() { } } - private static void checkBrowserFiles() { - browserHistoryFileExists = browserHistoryFile.exists(); - historyCopyExists = browserHistoryCopy.exists(); - if (!browserHistoryFileExists) { - System.out.println(STR."Could not find Browser history file. The assumed path is:\{NL}\{browserHistoryFile.getAbsolutePath()}\{NL}"); - System.out.println("Run iget with the checkBrowser option"); - System.exit(1); - } - if (!historyCopyExists) { - copyHistoryFile(); - } - } - public static void checkBrowser() { browserHistoryFileExists = browserHistoryFile.exists(); String filename = FilenameUtils.getName(browserHistoryFile.getAbsolutePath()); diff --git a/src/main/java/com/simtechdata/database/TimeUtil.java b/src/main/java/com/simtechdata/database/TimeUtil.java index 1e21b18..ca81395 100644 --- a/src/main/java/com/simtechdata/database/TimeUtil.java +++ b/src/main/java/com/simtechdata/database/TimeUtil.java @@ -1,9 +1,8 @@ package com.simtechdata.database; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; +import com.simtechdata.enums.Browser; + +import java.time.*; import java.time.format.DateTimeFormatter; public class TimeUtil { @@ -11,10 +10,29 @@ public class TimeUtil { private static final long WEBKIT_EPOCH_START = 11644473600000000L; public static String toMonthDayYear(long webkitTimestamp) { - long epochMilli = (webkitTimestamp - WEBKIT_EPOCH_START) / 1000; - LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()); + Browser browser = Browser.getBrowser(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yy"); - return dateTime.format(formatter); + switch (browser) { + case FIREFOX -> { + Instant firefoxInstant = Instant.ofEpochMilli(webkitTimestamp / 1000); + LocalDate firefoxDate = firefoxInstant.atZone(ZoneId.systemDefault()).toLocalDate(); + return formatter.format(firefoxDate); + } + + case SAFARI -> { + long secondsFrom1970To2001 = 978307200; // Seconds from Jan 1, 1970 to Jan 1, 2001 + Instant safariInstant = Instant.ofEpochSecond(webkitTimestamp + secondsFrom1970To2001); + LocalDate safariDate = safariInstant.atZone(ZoneId.systemDefault()).toLocalDate(); + return formatter.format(safariDate); + } + + default -> { + long offsetBetweenEpochs = 11644473600000L; // milliseconds from Jan 1, 1601 to Jan 1, 1970 + Instant chromeInstant = Instant.ofEpochMilli((webkitTimestamp / 1000) - offsetBetweenEpochs); + LocalDate chromeDate = chromeInstant.atZone(ZoneId.systemDefault()).toLocalDate(); + return formatter.format(chromeDate); + } + } } public static long toWebKitTime(long epochTime) { @@ -27,15 +45,4 @@ public static String toShortTime(long webkitTimestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy hh:mm:ss a"); return dateTime.format(formatter); } - - public static long convertToWebKitTimestamp(LocalDateTime dateTime) { - long epochMilli = dateTime.toInstant(ZoneOffset.UTC).toEpochMilli(); - return epochMilli * 1000 + WEBKIT_EPOCH_START; - } - - public static long getTimestampWithOffset(long hours, boolean all) { - LocalDateTime localDateTime = LocalDateTime.now(ZoneOffset.UTC); - LocalDateTime pastTime = all ? localDateTime.minusYears(30) : localDateTime.minusHours(hours); - return convertToWebKitTimestamp(pastTime); - } }