19 |
19 |
20 |
20 |
21 //debug |
21 //debug |
22 #include "calendarui_debug.h" |
22 #include "calendarui_debug.h" |
23 |
23 |
24 #include "CalenSolarTerms.h" |
24 #include "calensolarterms.h" |
25 |
25 |
26 #include "CalenLunarPaths.h" |
26 #include "calenlunarpaths.h" |
27 |
27 |
28 #include <f32file.h> |
28 #include <f32file.h> |
29 #include <s32file.h> |
29 #include <s32file.h> |
30 #include "OstTraceDefinitions.h" |
|
31 #ifdef OST_TRACE_COMPILER_IN_USE |
|
32 #include "calensolartermsTraces.h" |
|
33 #endif |
|
34 |
|
35 |
30 |
36 |
31 |
37 // CONSTANTS |
32 // CONSTANTS |
38 _LIT(KSolarTermsFile, "SolarItems"); |
33 _LIT(KSolarTermsFile, "SolarItems"); |
39 // search path for solar item file |
34 // search path for solar item file |
40 //Uncomment for emulator |
35 //Uncomment for emulator |
41 _LIT( KSolarTermsPath, "\\private\\10005901\\" ); |
36 _LIT( KSolarTermsPath, "//private//10005901//" ); |
42 |
37 |
43 //_LIT( KSolarTermsPath, "\\data\\" ); |
38 //_LIT( KSolarTermsPath, "//Data//calenlunarchinese//" ); |
44 const TInt KFirstSolarTermYear(1900); |
39 const TInt KFirstSolarTermYear(1900); |
45 const TInt KLastSolarTermYear(2100); |
40 const TInt KLastSolarTermYear(2100); |
46 |
41 |
47 |
42 |
48 // ======== MEMBER FUNCTIONS ======== |
43 // ======== MEMBER FUNCTIONS ======== |
50 |
45 |
51 // --------------------------------------------------------------------------- |
46 // --------------------------------------------------------------------------- |
52 // |
47 // |
53 // --------------------------------------------------------------------------- |
48 // --------------------------------------------------------------------------- |
54 // |
49 // |
55 EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs) |
50 CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs) |
56 { |
51 { |
57 OstTraceFunctionEntry0( CCALENSOLARTERMS_NEWL_ENTRY ); |
52 TRACE_ENTRY_POINT; |
|
53 |
58 CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs); |
54 CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs); |
59 CleanupStack::PushL( self ); |
55 CleanupStack::PushL( self ); |
60 self->ConstructL(); |
56 self->ConstructL(); |
61 CleanupStack::Pop( self ); |
57 CleanupStack::Pop( self ); |
62 |
58 |
63 OstTraceFunctionExit0( CCALENSOLARTERMS_NEWL_EXIT ); |
59 TRACE_EXIT_POINT; |
64 return self; |
60 return self; |
65 } |
61 } |
66 |
62 |
67 |
63 |
68 // --------------------------------------------------------------------------- |
64 // --------------------------------------------------------------------------- |
69 // |
65 // |
70 // --------------------------------------------------------------------------- |
66 // --------------------------------------------------------------------------- |
71 // |
67 // |
72 EXPORT_C CCalenSolarTerms::~CCalenSolarTerms() |
68 CCalenSolarTerms::~CCalenSolarTerms() |
73 { |
69 { |
74 OstTraceFunctionEntry0( CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY ); |
70 TRACE_ENTRY_POINT; |
75 OstTraceFunctionExit0( CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT ); |
71 TRACE_EXIT_POINT; |
76 } |
72 } |
77 |
73 |
78 |
74 |
79 // --------------------------------------------------------------------------- |
75 // --------------------------------------------------------------------------- |
80 // |
76 // |
81 // --------------------------------------------------------------------------- |
77 // --------------------------------------------------------------------------- |
82 // |
78 // |
83 EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate ) |
79 TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate ) |
84 { |
80 { |
85 OstTraceFunctionEntry0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_ENTRY ); |
81 TRACE_ENTRY_POINT; |
|
82 |
86 ReadSolarTermsL( aDate ); |
83 ReadSolarTermsL( aDate ); |
87 if ( HasSolarTermDataAvailable( aDate ) ) |
84 if ( HasSolarTermDataAvailable( aDate ) ) |
88 { |
85 { |
89 // Solar festival data is available for this date |
86 // Solar festival data is available for this date |
90 for (TInt i(0); i < KSolarTermCount; i++) |
87 for (TInt i(0); i < KSolarTermCount; i++) |
104 // to |
101 // to |
105 // Li Chun (~4.2.), ..., ..., Da Han (~22.1) |
102 // Li Chun (~4.2.), ..., ..., Da Han (~22.1) |
106 i += KSolarTermCount - 2; |
103 i += KSolarTermCount - 2; |
107 TInt foundIndex = i % KSolarTermCount; |
104 TInt foundIndex = i % KSolarTermCount; |
108 |
105 |
109 OstTraceFunctionExit0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
106 TRACE_EXIT_POINT; |
110 return foundIndex; |
107 return foundIndex; |
111 } |
108 } |
112 } |
109 } |
113 OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
110 TRACE_EXIT_POINT; |
114 return KErrNotFound; |
111 return KErrNotFound; |
115 } |
112 } |
116 else |
113 else |
117 { |
114 { |
118 // Solar festival data is NOT available for this date |
115 // Solar festival data is NOT available for this date |
119 OstTraceFunctionExit0( DUP2_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
116 TRACE_EXIT_POINT; |
120 return KErrNotSupported; |
117 return KErrNotSupported; |
121 } |
118 } |
122 } |
119 } |
123 |
120 |
124 |
121 |
127 // ?description_if_needed |
124 // ?description_if_needed |
128 // --------------------------------------------------------------------------- |
125 // --------------------------------------------------------------------------- |
129 // |
126 // |
130 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs ) |
127 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs ) |
131 { |
128 { |
132 OstTraceFunctionEntry0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY ); |
129 TRACE_ENTRY_POINT; |
133 OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT ); |
130 TRACE_EXIT_POINT; |
134 } |
131 } |
135 |
132 |
136 |
133 |
137 // --------------------------------------------------------------------------- |
134 // --------------------------------------------------------------------------- |
138 // ?description_if_needed |
135 // ?description_if_needed |
139 // --------------------------------------------------------------------------- |
136 // --------------------------------------------------------------------------- |
140 // |
137 // |
141 void CCalenSolarTerms::ConstructL() |
138 void CCalenSolarTerms::ConstructL() |
142 { |
139 { |
143 OstTraceFunctionEntry0( CCALENSOLARTERMS_CONSTRUCTL_ENTRY ); |
140 TRACE_ENTRY_POINT; |
144 OstTraceFunctionExit0( CCALENSOLARTERMS_CONSTRUCTL_EXIT ); |
141 TRACE_EXIT_POINT; |
145 } |
142 } |
146 |
143 |
147 |
144 |
148 // --------------------------------------------------------------------------- |
145 // --------------------------------------------------------------------------- |
149 // ?description_if_needed |
146 // ?description_if_needed |
150 // --------------------------------------------------------------------------- |
147 // --------------------------------------------------------------------------- |
151 // |
148 // |
152 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const |
149 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const |
153 { |
150 { |
154 OstTraceFunctionEntry0( CCALENSOLARTERMS_HASSOLARTERMDATAAVAILABLE_ENTRY ); |
151 TRACE_ENTRY_POINT; |
|
152 |
155 // Note: day parameter for TDateTime starts from 0, not from 1 |
153 // Note: day parameter for TDateTime starts from 0, not from 1 |
156 const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 ); |
154 const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 ); |
157 const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 ); |
155 const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 ); |
158 |
156 |
|
157 TRACE_EXIT_POINT; |
159 return TTime(KMinAvailable) <= TTime(aDate) && |
158 return TTime(KMinAvailable) <= TTime(aDate) && |
160 TTime(aDate) <= TTime(KMaxAvailable); |
159 TTime(aDate) <= TTime(KMaxAvailable); |
161 } |
160 } |
162 |
161 |
163 |
162 |
166 // from "SolarItems" file |
165 // from "SolarItems" file |
167 // --------------------------------------------------------- |
166 // --------------------------------------------------------- |
168 // |
167 // |
169 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate) |
168 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate) |
170 { |
169 { |
171 OstTraceFunctionEntry0( CCALENSOLARTERMS_READSOLARTERMSL_ENTRY ); |
170 TRACE_ENTRY_POINT; |
|
171 |
172 // Caches one year of solar items |
172 // Caches one year of solar items |
173 if ( ! HasSolarTermDataAvailable( aDate ) ) |
173 if ( ! HasSolarTermDataAvailable( aDate ) ) |
174 { |
174 { |
175 OstTraceFunctionExit0( CCALENSOLARTERMS_READSOLARTERMSL_EXIT ); |
|
176 return; |
175 return; |
177 } |
176 } |
178 |
177 |
179 TInt year = aDate.Year(); |
178 TInt year = aDate.Year(); |
180 |
179 |
181 if (iCachedYear != year) |
180 if (iCachedYear != year) |
182 { |
181 { |
183 RFile file; |
182 RFile file; |
184 TFindFile ffile(iFs); |
183 RFs& fs = iFs; |
|
184 TFindFile ffile(fs); |
185 User::LeaveIfError(ffile.FindByDir(KSolarTermsFile, KSolarTermsPath)); |
185 User::LeaveIfError(ffile.FindByDir(KSolarTermsFile, KSolarTermsPath)); |
186 // User::LeaveIfError(ffile.FindByPath(KSolarTermsFile, KSolarTermsPath)); |
186 User::LeaveIfError(file.Open(fs, |
187 |
|
188 User::LeaveIfError(file.Open(iFs, |
|
189 ffile.File(), EFileRead)); |
187 ffile.File(), EFileRead)); |
190 CleanupClosePushL(file); |
188 CleanupClosePushL(file); |
191 |
189 |
192 TInt seekPos = |
190 TInt seekPos = |
193 (year - KFirstSolarTermYear) * sizeof(TUint8) * KSolarTermCount; |
191 (year - KFirstSolarTermYear) * sizeof(TUint8) * KSolarTermCount; |