calendarui/regionalplugins/calenregionalutil/src/calensolarterms.cpp
changeset 89 b57382753122
parent 55 2c54b51f39c4
equal deleted inserted replaced
83:5aadd1120515 89:b57382753122
    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;
   204              }
   202              }
   205 
   203 
   206         CleanupStack::PopAndDestroy(2); // readStream, file
   204         CleanupStack::PopAndDestroy(2); // readStream, file
   207         iCachedYear = year;
   205         iCachedYear = year;
   208         }
   206         }
   209     OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_READSOLARTERMSL_EXIT );
   207     
   210     }
   208     TRACE_EXIT_POINT;
       
   209     }