From 6fa4e2db2622d37f9ad8d73ec3a95c6661c5294b Mon Sep 17 00:00:00 2001 From: Trey t Date: Tue, 5 Apr 2022 22:33:12 -0500 Subject: [PATCH] change a bunch of shit to get importing / adding new vote have the right weekday --- .../xmark-solid.imageset/Contents.json | 24 +++ .../xmark-solid.imageset/xmark-solid.png | Bin 0 -> 5334 bytes FeelsWidget/FeelsWidget.swift | 2 +- Shared/AppDelegate.swift | 10 +- .../xmark-solid.imageset/Contents.json | 26 +++ .../xmark-solid.imageset/xmark-solid.png | Bin 0 -> 5334 bytes .../xmark-solid.imageset/xmark-solid@2x.png | Bin 0 -> 13799 bytes .../xmark-solid.imageset/xmark-solid@3x.png | Bin 0 -> 48894 bytes Shared/Models/MoodImagable.swift | 12 +- Shared/Models/MoodTintable.swift | 14 +- Shared/Persisence/PersistenceADD.swift | 12 +- Shared/ShowBasedOnVoteLogics.swift | 196 ++++++------------ Shared/views/AddMoodHeaderView.swift | 5 +- Shared/views/DayView/DayView.swift | 3 +- Shared/views/MainTabView.swift | 1 - Shared/views/MonthView/MonthView.swift | 11 - Shared/views/SettingsView/SettingsView.swift | 15 +- 17 files changed, 141 insertions(+), 190 deletions(-) create mode 100644 FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json create mode 100644 FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png create mode 100644 Shared/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png create mode 100644 Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@2x.png create mode 100644 Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@3x.png diff --git a/FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json b/FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json new file mode 100644 index 0000000..29e51cc --- /dev/null +++ b/FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "filename" : "xmark-solid.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png b/FeelsWidget/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png new file mode 100644 index 0000000000000000000000000000000000000000..686a37bcb467888aca3b91bd5202cc6686005401 GIT binary patch literal 5334 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 literal 0 HcmV?d00001 diff --git a/FeelsWidget/FeelsWidget.swift b/FeelsWidget/FeelsWidget.swift index 507ab01..8458fa7 100644 --- a/FeelsWidget/FeelsWidget.swift +++ b/FeelsWidget/FeelsWidget.swift @@ -32,7 +32,7 @@ struct TimeLineCreator { var timeLineView = [WatchTimelineView]() var startDayOffset = 0 - if !ShowBasedOnVoteLogics.ableToVoteBasedOnCurentTime(voteDate: UserDefaultsStore.getOnboarding().date) { + if !ShowBasedOnVoteLogics.passedTodaysVotingUnlock(voteDate: UserDefaultsStore.getOnboarding().date) { startDayOffset = 1 } diff --git a/Shared/AppDelegate.swift b/Shared/AppDelegate.swift index a60eb9e..4d00513 100644 --- a/Shared/AppDelegate.swift +++ b/Shared/AppDelegate.swift @@ -58,15 +58,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { if let action = LocalNotification.ActionType(rawValue: response.actionIdentifier) { - var date: Date - - switch savedOnboardingData.inputDay { - case .Today: - date = Date() - case .Previous: - date = Calendar.current.date(byAdding: .day, value: -1, to: Date())! - } - + let date = ShowBasedOnVoteLogics.getCurrentVotingDate(onboardingData: savedOnboardingData) switch action { case .horrible: PersistenceController.shared.add(mood: .horrible, forDate: date, entryType: .notification) diff --git a/Shared/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json b/Shared/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json new file mode 100644 index 0000000..142b7c8 --- /dev/null +++ b/Shared/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "xmark-solid.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xmark-solid@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xmark-solid@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png b/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png new file mode 100644 index 0000000000000000000000000000000000000000..686a37bcb467888aca3b91bd5202cc6686005401 GIT binary patch literal 5334 zcmcgw`9qRf_qU{^XMYBX<)N(<6 zt7&?3>02r8NRo_Mbldo! ze>8scI=O)$$<5pR({Jf{`BzirhTrcol%pU0>}0D2@Y^+M-9 zU85#!Js;N~zO?7)d;NAV)8Xt78N;PDW9;th)q}RGsuir+g4y7SSJJ4+^`M0R{pUrx zvx@SMu28Q2DaltP@nqO6SC28&gml%BTM8Y*%=v|cV4Ge?f(>IRo#qEy2+c(j?Ik?H z;xcD+PDXl|e*Bon>t|FS^P5ewMyb zw}eb=EVk!$hclyh*Y&Tkkx{-IWhX`-F`}cBl!dc4RFcE76}`-%c&+7{skwJZ^{JT+ zxnmhj!MjgMAFh&hbhJBi1CaBlZgYenBg5)xLr;#g8x<2dvg7(+Uiw&fc+9mZhNY?8 znkw*O>P@aBF{{escCbeWqDd{ab90QUU3J2q=aY^Er>W7m-q}Mjs#SkRNSF6<%+#+; zIxqqc$(O1oi>xi?3bUKaSaQ5Z@Qoq_I@d*R30XaP_0Vv#81Bra$4Wg@m7m0 zuc(fEuQ^?{QH`1beMQ2bYb`Q`wGj^VMjRmt3S%2DRq0VCJSz@ghgKkFZ zh#6Oga28DukyCBc(#!gbJq5DiIFsK7eHOFPxH9%`n|aSNZ|pxv0XAs)cWIHdCc)t9 z7Y$A&Lmt9d)FmUlKGfn|TA2p>K1qwdkHxx7q}k;pJbx))ylSiO^Vw?Cp@8rxi6xmm z%p(5BrrloK!UDRvGyI-6J3}w>r%17Q)-MNs2pyg*^mJPuNS(1NkBi@V9nq-MVomL5 zF$6P&ruIJBRi_4G!2BI9qVX5c?4d#e>&Vx*!-Mm~%XI;!(W&ka(YQYvnZo%+5Av^i zf?DqDQf&my;f_qVMqkh@$w&{c$>mFE5U##0quP$L;KgWAkJ);E3$7mYnT?kxOL)~t zSD;eW#MO^FSk31QomqeF5Om=RFT~6h&5sR`VejeGMf=@6IIT+WBHJ^fOX8HZn(-;= ziNfoPCm7LeAil?^Y)=#}RGJcM-q*(63&J4FksTYweOJhnMn@{Sn{q2BwG9!C9np1u z;leGotxH$%DZYuq$hJwNc}a)e!Cw)Lr+Fb1_T=Z3_WED02<&j4Z;Lzg`5!*fY6hp;-e&&E}to`*pl{SdR$sB?t`TN)y;$^HLM?l1o4mfAR zU)qbwkL(s0YF}-6K6E_n} zg`59s$EP?Z0I?YPltHP1IWag#KdSngVlzJ9+D9vB%BWsi$l7Onjn&K)q<WbQO zVH-=n(639F?8zAq&sE~24VffIyZ5G}aZZ0Nsi_mGOY>t$w*G8v)t+V|LAT;BXBHZ# z_K9D-5@W`Xce-xq)lnPg6oY6i=N0>N%A2x6_wetl>Wp^|-+4kv7gJnsbM&6p#M+0w zyE{eD+s@hh_}8iX@V19&PG*jygp+MDMqZs`aZG%@rXoTPRXw!PV^Lqos{-QBSCE=Y%!H-BngU zR@#^V$sLh}_;*&hlUkhnlv{CvKs522ah-Ehkp1C8GaEDKI@_>ro+ z<8(is#P+C+aKAtkkCmm2qG**LGYbJU*}GxGSqvmd4lD^yY5{xL;nF{#3khxpz6P?w z^&D`uE^4jVf2d9t;c*GHr>hJFa^6$q>~e(B$tbEyWY>0xQ<><~kDn$fTEm<2^0)z@ zGv#xmr3o@!{w>gCkFeIRAV_SPy7^^rI6W`0FgPhe*yQmbg5vr`3)ge5AH*mrKQ?C0 zhF6p-+=5zeooAQhJIv04h#`T-y%mnuw4x^!`w>*jPj3qQD%IMgon^Nb(24BLWx>u# zd4W$sQ11|r#)zy_Fi+D6cf9=iFs-Ps*Kp+gvp$5#wf>eTo9v$rUA^B4YS}xyzPPU! zG4l7Hz=nBXN+{w_@8If~r^D}p7Xop(U`yxedEk{o;=tSR?!vA$!ZnlOS2OD#`yBfD)9XQx$)=DY60q>r8 zv*x0M19g2%s4uo`f0nPFhkMGbI>HaXZIhyPt%17|J(p*9P#uGcI>880i!s;_)z&2% zI3uWbWtT>jFLma)QQhWxk#sHDIUj8i`TKQNneaoABJ%omRxJ1-7ZDpQ9>Ncqi`a;D z9*#S>4S3k)ELkB=$(0j_RgCe|(Bdf^a*G z6b=S2FT{R*nJ#qUM-f|jeVH}%I8*j6`#oVG^CMQ$_(%1U?Bw2^Mzro>(1XKHutGX$ z_z#<)*Pg*xQA1-w-o&qq5cb3L^_k`txb;5$uzWyJ?@o5QzuTj(&C@8z0r*4j3CAMCbk!Xbb5H|kq)qi zgW`Brf={0&cH|+v^oTeff#~h#so(Y73SIFPsQ{)I$Gd5+efcRO4lv&aUWkV#t``z(592jTk?2HsnMgFy z!O6cIgl=w55LTgRq+{|gN1zLHypRD+oWH%?0rt>H{3;wxYq>4^;7f7GrzC1(ErSt_ z7ZP&|0V#*^+PlGF&=Lh?Il#26#jk=;w0r5Y560k;3?69Oz1uQ3eN9{@n%X^#Pw`L8 zJ?j9woGf$u41|PS)q{{AF6p+-jnvA0dpbYPcY7eg4W%L{`K26q5kbk-kb3VHya=a6L{abE zhZmhxqNAzz(%?nMl;}W{17{smQb$uAZo&0zm8Kl!qtO=p6=amGw&7p|ogndpa885q zs^5OANLSSSN#zF9JM&5#k^u|!5yR$>412-GP&7f3f-h!P`NDv#379ABnu2*S5MKTr zyHPA2^MIg&OnBP^1+YuB$~oTyF5K>BvPu|j2?|r|za|Bjd@!cw>}3dgYsVhe;Yn{4 zG&GJ{MLVS^(EV%7vkBr<#8@n?G2bS@e6zZ%bY8 z2Kw{I&egnRkjs2_m3GTE06!H|`kJ&3NP@M#?F3Q6?|a)R-pXFkhgR#=QuS=*qbTaI zrh@8s0gQ-jpiwUL6t;da@*Ne#fD!lY2QJ7}7bsgP8Y$|SlIoa`u4(`Q1^uqbSq)eM1_J!4AOK1%!`_wRJ`xA4TNTzsZ*AiwxJ%(b zt6uv7ouF1TnFBh=RM3H={BIO3A`tPd7Ht&}D({=8u&fL-YJL({%?0I#hS56<57P#E zE2>RI82`z%ifZc((AV4Dj`Baa*3N7%!;$+1Su)2Y%G2O#e24Zqj5rG=J>4I}_bso4wi=jk^IX89v9!(2bB3pOTbpR3rUY6YH{zwlvv%L}U|vSy=_sm8d_a z!KF$?bxsSz+7>T%JIQ-*!spmTuWK)J1+_TGP*H=qJi#HBay6{odpmVt&(y}i@?CsW zW;A6)+4uFb3BNtyey*?I#bL9lS6VfV&VSDmjNLvu-Z<;AlSr!^Kvysq2REwupVGuG z7|<&Fr3^uU3IBah)DDYoRRSw*$kJ9H&YYQ$g`!?}dP(cpgju$d0KcNSv5D|nI_ zX7iw!NB_SqTxN`~3E$CH|M(*yjv-_<`Rb3)V2t?6Ou@sCv8bm{sxj0y`afldn>i(i zzs7X^Rg*hJ?ccO;RavF8iAUePg*zkV53%SxPH-Lbs9BHE{4LqbjDO}M(_f%!U1!N3C=+ST){}2EO^1b>5!4pGz)<$E&Z#NHjN~IyG5ey!&CrSb$(R`C zuB?Klp7u+Is`fW`>yD~xTO1R|9}Q0$Y^Gakxf+!}iHjen^qi3Ag%i?++jJLd#wl!M zc{>69X@jcHpE6wG5&ZP6=h+F)gy1XS|L?oPx6iX-5At{0O+Rug4Kh-ke$@2z&LC7+Lh&*lWYmi7~wqB2mxp*Hd zwQM?07iNxZZds2ma*8AYWRFIuS+CGFNV4S9*CAd8wv!yIU?`BEB)~V$us9J-`tRcEH zWktvuA~FS>!P&y`CM1VB6#mcDtyp9Jl>huQvtyP;4w62?vguO)3I;u2T`-+!Y)ko> zfwh-ReONvoJ2!|OBRnZq>g}YXqk__sl0stSwn%oEc;uh2t3b2;I2K5W$dPw7uMyPJt5*(vV9^-I@Iw{cdA+kTU-JY_^9Cu9Hj*K~@E cH<0`l<#MzAJ0oAdKd(>_jyvIte)6IHKV@)8NdN!< literal 0 HcmV?d00001 diff --git a/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@2x.png b/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..83ab452dbc03165346d231572e82afffde489011 GIT binary patch literal 13799 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 DY6+{i literal 0 HcmV?d00001 diff --git a/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@3x.png b/Shared/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..00c61b2f868c931d61d905625eb66d379ae1c71e GIT binary patch literal 48894 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

(I3B>w$Bmn>y^nqh9jVMy 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 E50^#!MgRZ+ literal 0 HcmV?d00001 diff --git a/Shared/Models/MoodImagable.swift b/Shared/Models/MoodImagable.swift index ec44d81..398de35 100644 --- a/Shared/Models/MoodImagable.swift +++ b/Shared/Models/MoodImagable.swift @@ -54,9 +54,9 @@ final class FontAwesomeMoodImages: MoodImagable { case .great: return Image("great", bundle: .main) case .missing: - return Image("missing", bundle: .main) + return Image("xmark-solid", bundle: .main) case .placeholder: - return Image("missing", bundle: .main) + return Image("xmark-solid", bundle: .main) } } } @@ -75,9 +75,9 @@ final class EmojiMoodImages: MoodImagable { case .great: return Image(uiImage: "😀".textToImage()!) case .missing: - return Image("x-solid", bundle: .main) + return Image("xmark-solid", bundle: .main) case .placeholder: - return Image("x-solid", bundle: .main) + return Image("xmark-solid", bundle: .main) } } } @@ -96,9 +96,9 @@ final class HandEmojiMoodImages: MoodImagable { case .great: return Image(uiImage: "🙏".textToImage()!) case .missing: - return Image("x-solid", bundle: .main) + return Image("xmark-solid", bundle: .main) case .placeholder: - return Image("x-solid", bundle: .main) + return Image("xmark-solid", bundle: .main) } } } diff --git a/Shared/Models/MoodTintable.swift b/Shared/Models/MoodTintable.swift index d9280dc..d01f621 100644 --- a/Shared/Models/MoodTintable.swift +++ b/Shared/Models/MoodTintable.swift @@ -160,9 +160,9 @@ final class DefaultMoodTint: MoodTintable { case .great: return Color(hex: "31d158") case .missing: - return Color(uiColor: UIColor.lightGray) + return Color(uiColor: UIColor.systemGray2) case .placeholder: - return Color(uiColor: UIColor.lightGray) + return Color(uiColor: UIColor.systemGray2) } } @@ -179,9 +179,9 @@ final class DefaultMoodTint: MoodTintable { case .great: return Color(hex: "208939") case .missing: - return Color(uiColor: UIColor.lightGray) + return Color(uiColor: UIColor.label) case .placeholder: - return Color(uiColor: UIColor.lightGray) + return Color(uiColor: UIColor.label) } } } @@ -322,7 +322,7 @@ final class PastelTint: MoodTintable { case .missing: return Color(uiColor: UIColor.systemGray2) case .placeholder: - return Color(uiColor: UIColor.systemGray4) + return Color(uiColor: UIColor.systemGray2) } } @@ -339,9 +339,9 @@ final class PastelTint: MoodTintable { case .great: return Color(hex: "#6b7e6d") case .missing: - return Color(uiColor: UIColor.systemGray2) + return Color(uiColor: UIColor.label) case .placeholder: - return Color(uiColor: UIColor.systemGray4) + return Color(uiColor: UIColor.label) } } } diff --git a/Shared/Persisence/PersistenceADD.swift b/Shared/Persisence/PersistenceADD.swift index 78f3e26..ea7e0be 100644 --- a/Shared/Persisence/PersistenceADD.swift +++ b/Shared/Persisence/PersistenceADD.swift @@ -16,8 +16,7 @@ extension PersistenceController { }) data.forEach({ - $0.weekDay = Int16(Calendar.current.component(.weekday, from: $0.forDate!.startOfDay)) - $0.forDate = $0.forDate?.startOfDay + $0.weekDay = Int16(Calendar.current.component(.weekday, from: $0.forDate!)) }) try? viewContext.save() } @@ -32,10 +31,7 @@ extension PersistenceController { newItem.timestamp = Date() newItem.moodValue = Int16(mood.rawValue) newItem.forDate = date - - let localTime = date.toLocalTime() - newItem.weekDay = Int16(Calendar.current.component(.weekday, from: localTime)) - + newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date)) newItem.canEdit = true newItem.canDelete = true newItem.entryType = Int16(entryType.rawValue) @@ -47,7 +43,9 @@ extension PersistenceController { func fillInMissingDates() { let currentOnboarding = UserDefaultsStore.getOnboarding() - let endDate = ShowBasedOnVoteLogics.getLastDateVoteShouldExist(onboardingData: currentOnboarding) + var endDate = ShowBasedOnVoteLogics.getCurrentVotingDate(onboardingData: currentOnboarding) + // since its for views take away the last date so vote is enabled + endDate = Calendar.current.date(byAdding: .day, value: -1, to: endDate)! let fetchRequest = NSFetchRequest(entityName: "MoodEntry") fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: false)] diff --git a/Shared/ShowBasedOnVoteLogics.swift b/Shared/ShowBasedOnVoteLogics.swift index 8e8ec46..bb6a2c5 100644 --- a/Shared/ShowBasedOnVoteLogics.swift +++ b/Shared/ShowBasedOnVoteLogics.swift @@ -28,147 +28,14 @@ import SwiftUI */ class ShowBasedOnVoteLogics { - static func returnCurrentVoteStatus(onboardingData: OnboardingData) -> (Bool, DayOptions) { - let passedTimeToVote = ShowBasedOnVoteLogics.ableToVoteBasedOnCurentTime(voteDate: onboardingData.date) + static private func returnCurrentVoteStatus(onboardingData: OnboardingData) -> (Bool, DayOptions) { + let passedTimeToVote = ShowBasedOnVoteLogics.passedTodaysVotingUnlock(voteDate: onboardingData.date) let inputDay: DayOptions = onboardingData.inputDay return (passedTimeToVote, inputDay) } - static func getLastDateVoteShouldExistOnViews(onboardingData: OnboardingData) -> Date { - var date: Date? - - switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { - case (false, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date()) - case (true, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be today - date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) - - case (false, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -2 - date = Calendar.current.date(byAdding: .day, value: -3, to: Date()) - case (true, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date()) - } - - guard let date = date else { - fatalError("missing getCurrentVotingDate") - } - - return date - } - - static func getCurrentVotingDate(onboardingData: OnboardingData) -> Date { - var date: Date? - - switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { - case (false, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) - case (true, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be today - date = Date() - - case (false, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -2 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date()) - case (true, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) - } - - guard let date = date else { - fatalError("missing getCurrentVotingDate") - } - - return date - } - - static func isMissingCurrentVote(onboardingData: OnboardingData) -> Bool { - let startDate = ShowBasedOnVoteLogics.getCurrentVotingDate(onboardingData: onboardingData).startOfDay - let endDate = startDate.endOfDay - - let fetchRequest = NSFetchRequest(entityName: "MoodEntry") - let fromPredicate = NSPredicate(format: "%@ <= %K", startDate - as NSDate, #keyPath(MoodEntry.forDate)) - let toPredicate = NSPredicate(format: "%K < %@", #keyPath(MoodEntry.forDate), endDate as NSDate) - let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate]) - fetchRequest.predicate = datePredicate - let entries = try! PersistenceController.shared.viewContext.count(for: fetchRequest) - - return entries < 1 - } - - static func getVotingTitle(onboardingData: OnboardingData) -> String { - switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { - case (false, .Today): - return String(localized: "add_mood_header_view_title_yesterday") - case (true, .Today): - return String(localized: "add_mood_header_view_title_today") - - case (false, .Previous): - let date = Calendar.current.date(byAdding: .day, value: -2, to: Date())! - return String(format: String(localized: "add_mood_header_view_title"), Random.weekdayName(fromDate: date)) - case (true, .Previous): - return String(localized: "add_mood_header_view_title_yesterday") - } - } - - - /*---------------------------delete---------------------------------------*/ - - static func dateForHeaderVote(onboardingData: OnboardingData) -> Date? { - var date: Date? - - switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { - case (false, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) - case (true, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be today - date = Date() - - case (false, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -2 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date()) - case (true, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) - } - - if let date = date { - return date - } - - return nil - } - - static func getLastDateVoteShouldExist(onboardingData: OnboardingData) -> Date { - var date: Date? - - switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { - case (false, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be -2 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date())! - case (true, .Today): - // if we're passed time to vote and the voting type is previous - last vote should be -1 - date = Calendar.current.date(byAdding: .day, value: -1, to: Date())! - - case (false, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should be -3 - date = Calendar.current.date(byAdding: .day, value: -3, to: Date())! - case (true, .Previous): - // if we're passed time to vote and the voting type is previous - last vote should -2 - date = Calendar.current.date(byAdding: .day, value: -2, to: Date())! - } - - return date! - } - - static func ableToVoteBasedOnCurentTime(voteDate: Date) -> Bool { + static public func passedTodaysVotingUnlock(voteDate: Date) -> Bool { let currentDateComp = Calendar.current.dateComponents([.hour, .minute], from: Date()) let savedDateComp = Calendar.current.dateComponents([.hour, .minute], from: voteDate) @@ -189,5 +56,60 @@ class ShowBasedOnVoteLogics { return false } - + static public func isMissingCurrentVote(onboardingData: OnboardingData) -> Bool { + let startDate = ShowBasedOnVoteLogics.getCurrentVotingDate(onboardingData: onboardingData).startOfDay + let endDate = startDate.endOfDay + + let fetchRequest = NSFetchRequest(entityName: "MoodEntry") + let fromPredicate = NSPredicate(format: "%@ <= %K", startDate + as NSDate, #keyPath(MoodEntry.forDate)) + let toPredicate = NSPredicate(format: "%K < %@", #keyPath(MoodEntry.forDate), endDate as NSDate) + let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate]) + fetchRequest.predicate = datePredicate + let entries = try! PersistenceController.shared.viewContext.count(for: fetchRequest) + + return entries < 1 + } + + static public func getCurrentVotingDate(onboardingData: OnboardingData) -> Date { + var date: Date? + // note to future self, this should account for midnight until next voting unlock + // the vote at 12:03 am will not be passed time, and will be for yesterday + switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { + case (false, .Today): + // if we're passed time to vote and the voting type is previous - last vote should be -1 + date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) + case (true, .Today): + // if we're passed time to vote and the voting type is previous - last vote should be today + date = Date() + + case (false, .Previous): + // if we're passed time to vote and the voting type is previous - last vote should be -2 + date = Calendar.current.date(byAdding: .day, value: -2, to: Date()) + case (true, .Previous): + // if we're passed time to vote and the voting type is previous - last vote should be -1 + date = Calendar.current.date(byAdding: .day, value: -1, to: Date()) + } + + guard let date = date else { + fatalError("missing getCurrentVotingDate") + } + + return date + } + + static public func getVotingTitle(onboardingData: OnboardingData) -> String { + switch ShowBasedOnVoteLogics.returnCurrentVoteStatus(onboardingData: onboardingData) { + case (false, .Today): + return String(localized: "add_mood_header_view_title_yesterday") + case (true, .Today): + return String(localized: "add_mood_header_view_title_today") + + case (false, .Previous): + let date = Calendar.current.date(byAdding: .day, value: -2, to: Date())! + return String(format: String(localized: "add_mood_header_view_title"), Random.weekdayName(fromDate: date)) + case (true, .Previous): + return String(localized: "add_mood_header_view_title_yesterday") + } + } } diff --git a/Shared/views/AddMoodHeaderView.swift b/Shared/views/AddMoodHeaderView.swift index bf89566..a7d492c 100644 --- a/Shared/views/AddMoodHeaderView.swift +++ b/Shared/views/AddMoodHeaderView.swift @@ -60,9 +60,8 @@ struct AddMoodHeaderView: View { } private func addItem(withMood mood: Mood) { - if let date = ShowBasedOnVoteLogics.dateForHeaderVote(onboardingData: onboardingData) { - addItemHeaderClosure(mood, date) - } + let date = ShowBasedOnVoteLogics.getCurrentVotingDate(onboardingData: onboardingData) + addItemHeaderClosure(mood, date) } } diff --git a/Shared/views/DayView/DayView.swift b/Shared/views/DayView/DayView.swift index d185131..286af45 100644 --- a/Shared/views/DayView/DayView.swift +++ b/Shared/views/DayView/DayView.swift @@ -187,7 +187,7 @@ struct DayView: View { private var headerView: some View { VStack { - if ShowBasedOnVoteLogics.isMissingCurrentVote(onboardingData: onboardingData.savedOnboardingData) { + if ShowBasedOnVoteLogics.isMissingCurrentVote(onboardingData: UserDefaultsStore.getOnboarding()) { AddMoodHeaderView(addItemHeaderClosure: { (mood, date) in viewModel.add(mood: mood, forDate: date, entryType: .header) }) @@ -300,6 +300,7 @@ extension DayView { return $0.forDate! > $1.forDate! }), id: \.self) { entry in if filteredDays.currentFilters.contains(Int(entry.weekDay)) { +// let _ = print(entry.forDate, entry.weekDay, filteredDays.currentFilters) EntryListView(entry: entry) .contentShape(Rectangle()) .onTapGesture(perform: { diff --git a/Shared/views/MainTabView.swift b/Shared/views/MainTabView.swift index 7b89ba2..59e74bf 100644 --- a/Shared/views/MainTabView.swift +++ b/Shared/views/MainTabView.swift @@ -20,7 +20,6 @@ struct MainTabView: View { let customizeView: CustomizeView var body: some View { - Self._printChanges() return TabView { dayView .tabItem { diff --git a/Shared/views/MonthView/MonthView.swift b/Shared/views/MonthView/MonthView.swift index 2a8d82e..47caf14 100644 --- a/Shared/views/MonthView/MonthView.swift +++ b/Shared/views/MonthView/MonthView.swift @@ -109,16 +109,6 @@ struct MonthView: View { } extension MonthView { - private var topView: some View { - VStack { - if ShowBasedOnVoteLogics.isMissingCurrentVote(onboardingData: onboardingData.savedOnboardingData) { - Text("Vote") - } - Text("dis top") - .foregroundColor(theme.currentTheme.secondaryBGColor) - } - } - private var settingsButtonView: some View { HStack { Spacer() @@ -204,7 +194,6 @@ extension MonthView { LazyVGrid(columns: columns, spacing: 15) { ForEach(entries, id: \.self) { entry in if filteredDays.currentFilters.contains(Int(entry.weekDay)) { - let _ = print(entry.weekDay, entry.forDate, filteredDays.currentFilters, entry.id) shape.view(withText: Text(""), bgColor: entry.mood == .placeholder ? .clear : moodTint.color(forMood: entry.mood), textColor: .clear) diff --git a/Shared/views/SettingsView/SettingsView.swift b/Shared/views/SettingsView/SettingsView.swift index 15add4c..c3eccd8 100644 --- a/Shared/views/SettingsView/SettingsView.swift +++ b/Shared/views/SettingsView/SettingsView.swift @@ -95,7 +95,7 @@ struct SettingsView: View { guard let selectedFile: URL = try result.get().first else { return } if selectedFile.startAccessingSecurityScopedResource() { let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +0000" + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.timeZone = TimeZone(abbreviation: "UTC") guard let input = String(data: try Data(contentsOf: selectedFile), encoding: .utf8) else { return } @@ -104,7 +104,8 @@ struct SettingsView: View { var rows = input.components(separatedBy: "\n") rows.removeFirst() for row in rows { - let columns = row.components(separatedBy: ",") + let stripped = row.replacingOccurrences(of: " +0000", with: "") + let columns = stripped.components(separatedBy: ",") if columns.count != 7 { continue } @@ -112,13 +113,13 @@ struct SettingsView: View { moodEntry.canDelete = Bool(columns[0])! moodEntry.canEdit = Bool(columns[1])! moodEntry.entryType = Int16(columns[2])! - moodEntry.forDate = dateFormatter.date(from: columns[3]) + moodEntry.forDate = dateFormatter.date(from: columns[3])! moodEntry.moodValue = Int16(columns[4])! - moodEntry.timestamp = dateFormatter.date(from: columns[5]) + moodEntry.timestamp = dateFormatter.date(from: columns[5])! - let localTime = dateFormatter.date(from: columns[3])!.toLocalTime() + let localTime = dateFormatter.date(from: columns[3])! moodEntry.weekDay = Int16(Calendar.current.component(.weekday, from: localTime)) - +// let _ = print("import info: ", columns[3], dateFormatter.date(from: columns[3]), localTime, Int16(Calendar.current.component(.weekday, from: localTime))) try! PersistenceController.shared.viewContext.save() } PersistenceController.shared.saveAndRunDataListerners() @@ -508,7 +509,7 @@ struct TextFile: FileDocument { let weekDay = entry.weekDay let dataString = "\(canDelete),\(canEdit),\(entryType),\(String(describing: forDate)),\(moodValue),\(String(describing:timestamp)),\(weekDay)\n" - print("DATA: \(dataString)") +// print("DATA: \(dataString)") csvString = csvString.appending(dataString) } text = csvString