chxavutil.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:10k
源码类别:

Symbian

开发平台:

C/C++

  1. /*****************************************************************************
  2.  * chxavutil.h
  3.  * --------------
  4.  *
  5.  * Synopsis:
  6.  * URL Utility namespace.
  7.  *
  8.  * Target:
  9.  * Symbian OS
  10.  *
  11.  *
  12.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  13.  *
  14.  *****************************************************************************/
  15. #ifndef _chxavutil_h_
  16. #define _chxavutil_h_
  17. // Symbian includes...
  18. #include <aknpopup.h>
  19. #include <akntitle.h>
  20. #include <eikenv.h>
  21. #include <coemain.h>
  22. //#include "hlxclib/string.h"
  23. // Helix includes...
  24. #include "hxtypes.h"
  25. #include "hxassert.h"
  26. #include "unkimp.h"
  27. #include "ihxpckts.h"
  28. #include "hxstring.h"
  29. #include "hxurl.h"
  30. // Includes from this project...
  31. #include "realplayer.rsg"
  32. #include "chxavstringutils.h"
  33. #include "chxavvector.h"
  34. #include "chxavstringutils.h"
  35. #include "chxavcleanupstack.h"
  36. #include "chxavmessagedialog.h"
  37. #include "chxavurlrep.h"
  38. namespace CHXAvUtil {
  39. // constants
  40. //
  41. // file urls take form "file://<host>/<path>"; we are supplying empty string for <host>
  42. _LIT(KFileProtocolPrefix,   "file:///");
  43. _LIT(KRTSPProtocolPrefix,   "rtsp://");
  44. const TUint k_cchMaxTimerText = 20; // more than enough for 0000:00:00
  45. //
  46. // functions
  47. //
  48. CHXString ExtractFilename(const CHXString& path);
  49. void BackToForwardSlash(TPtr& ptr);
  50. void ForwardToBackSlash(TPtr& ptr);
  51. TPtrC PathFromFileURL(const TDesC& fileURL);
  52. HBufC* AllocStdPathFromPlayerUrlL(const CHXString& strBadPath);
  53. HBufC* AllocStdPathFromPlayerUrlL(const TDesC& epURL);
  54. HBufC* AllocHostFromPlayerUrlL(const CHXString& strUrl);
  55. HBufC* AllocDisplayTextForPlayerUrlL(const TDesC& url, bool bHideExt = true);
  56. void ActiveWait(TInt msTotalWait, TInt msPerSleep = 20);
  57. enum ValidateUrlResult
  58. {
  59.     vuGood,
  60.     vuBad,
  61.     vuEmpty,
  62.     vuMissingScheme,
  63.     vuUnsupportedScheme,
  64.     vuHostUnexpected,
  65.     vuMissingHost,
  66.     vuMissingPath,
  67.     vuMissingFile
  68. };
  69. ValidateUrlResult ValidateUrl(const TDesC& url);
  70. TInt ScanPastURLSchemePrefix(const TDesC& url);
  71. bool HasValidURLSchemePrefix(const TDesC& url);         // '{scheme}:'
  72. bool HasValidNetworkURLSchemePrefix(const TDesC& url);  // '{scheme}://'
  73. ///////////////////////////////////
  74. //
  75. template<TInt size>
  76. inline
  77. TInt litSize(const TLitC<size>&)
  78. {
  79.     return size - 1;
  80. }
  81. //
  82. // inlines
  83. //
  84. inline
  85. bool IsFileUrl(const TDesC& url)
  86. {
  87.     TPtrC ptr(url.Left(litSize(KFileProtocolPrefix)));
  88.     return (0 == ptr.CompareF(KFileProtocolPrefix)); 
  89. }
  90. inline
  91. bool IsLocal(const TDesC& url)
  92. {
  93.     return IsFileUrl(url);
  94. }
  95. inline
  96. bool IsFileUrl(const char* pszUrl)
  97. {
  98.     return (0 == strnicmp(pszUrl, "file://", 7));
  99. }
  100. inline
  101. bool IsHttpUrl(const char* pszUrl)
  102. {
  103.     return (0 == strnicmp(pszUrl, "http://", 7));
  104. }
  105. inline
  106. bool IsLocal(const char* pszUrl)
  107. {
  108.     return IsFileUrl(pszUrl);
  109. }
  110. inline bool IsValidUrl(const TDesC& url)
  111. {
  112.     return (vuGood == ValidateUrl(url));
  113. }
  114. // return true if url prefix matches "{scheme}:"
  115. inline
  116. bool HasValidURLSchemePrefix(const TDesC& url)
  117. {
  118.     return (-1 != ScanPastURLSchemePrefix(url));
  119. }
  120. ////////////////////////////////////////
  121. // utVector helper
  122. template< typename T >
  123. inline
  124. void Append( CHXAvVector<T>& vec, const T& val)
  125. {
  126.     int n = vec.Nelements();
  127.     vec.Resize(n+1);
  128.     vec[n] = val;
  129. }
  130. ////////////////////////////////////////////////////////////
  131. //
  132. inline
  133. void BackToForwardSlash(TPtr& ptr)
  134. {
  135.     CHXAvStringUtils::Replace(ptr, '\', '/');
  136. }
  137. ////////////////////////////////////////////////////////////
  138. //
  139. inline
  140. void ForwardToBackSlash(TPtr& ptr)
  141. {
  142.     CHXAvStringUtils::Replace(ptr, '/', '\');
  143. }
  144. ///////////////////////////////////////////////////////////////
  145. // types, typedefs
  146. //
  147. // multiple return value
  148. template< typename T >
  149.     struct Pair
  150. {
  151.     T first;
  152.     T second;
  153. };
  154. ///////////////////////////////////////////////////////////////
  155. // contants
  156. //
  157. // relative to player app folder
  158. _LIT(KPlayerDataFolder, "data\"); 
  159. _LIT(KImagesMBMName, "realplayer.mbm"); 
  160. // relative to player data folder
  161. _LIT(KRecentClipsName, "recent.inf"); 
  162. _LIT(KPluginArchiveName, "plugin_archive.txt");
  163. _LIT(KEPSystemFolderName,   "\system\");
  164. _LIT(KPathSep,            "\");
  165. _LIT(KLinkFileExt,   ".ram");
  166. _LIT(KDot,                ".");
  167. _LIT(KDoubleDot,          "..");
  168. _LIT(KNewline,            "n");
  169. #if defined(_UNICODE)
  170. //note: text control inserts unicode paragraph sep for return key
  171. //0x2028 line separator
  172. //0x2029 paragraph separator
  173. _LIT(KStdWhitespaceCtrlChars,       "ntrx2028x2029");
  174. #else
  175. _LIT(KStdWhitespaceCtrlChars,       "ntr");
  176. #endif
  177. // TWsEvent for inter-app (instance to instance) messaging
  178. const TUint KHXPlayerWsEvent = EEventUser + 0x9D06; // arbitrary - uniqueness likely but not guaranteed 
  179. // message text sent to other r1p instances
  180. _LIT8(KMessage_CloseApp, "close_app");
  181. //
  182. // misc values
  183. //
  184. // minimum amount of memory needed to complete an Add To Pinboard 
  185. const TInt KMinAddToPinboardMem=32*1024;
  186. // This value determines how much each file will be read and passed
  187. // to the recognizer. The larger the buffer, the better chance of
  188. // recognition, however, larger buffers have a performance impact.
  189. // Like so many other things, it's a tradeoff.
  190. const TInt KRecogLength=512;
  191. const TInt KDefaultRecentClipListCount = 6;
  192. // time constants
  193. const TUint k_usecPerMs = 1000;
  194. const TUint k_msPerSecond = 1000;
  195. const TUint k_usecPerSecond =  k_msPerSecond * k_usecPerMs;
  196. const TUint k_secsPerHour = 3600;
  197. const TUint k_secsPerMin  = 60;
  198. const TUint k_msPerHour = k_secsPerHour * k_msPerSecond;
  199. const TUint k_bytesPerKilobyte   = 1024;
  200. const TUint k_bitrateBytesPer1k  = 1000;
  201. // max chars needed to display an integer number
  202. const TUint KMaxInt32Chars = 10;
  203. const TUint KMaxDoubleChars = 20; // long double = 19 actually
  204. // EP-specific error codes (Symbian errors are negative values)
  205. const TInt KEPErrBase = 50;
  206. const TInt KEPControlAlreadyExists = KEPErrBase + 1;
  207. const TInt KEPBadControlID = KEPErrBase + 2;
  208. const TInt KEPMissingSkinControls = KEPErrBase + 3;
  209. ///////////////////////////////////
  210. // return true if entry should be hidden from the user
  211. inline
  212. bool ShouldHideFromUser(const TEntry& entry)
  213. {
  214.     // note: this does not seem to be report systeam attribute 
  215.     // for system dir on Series60 (c.f. BaflUtils::RemoveSystemDirectory() )
  216.     return (entry.IsHidden() || entry.IsSystem());
  217. }
  218. ////////////////////////////////////////////////
  219. // copy 16 bit buffer to 8 bit
  220. inline
  221. void Copy8( TDesC16& text, TDes8& out)
  222. {
  223.     out.Copy( reinterpret_cast<const TUint8*>(text.Ptr()), text.Size());
  224. }
  225. ///////////////////////////////////
  226. //
  227. inline
  228. int PointsToTwips(int points)
  229. {
  230.     return points * 20;
  231. }
  232. //
  233. // unicode/ansi text macros
  234. //
  235. // don't use these directly; see below
  236. #define WTEXT__(str) (L ## str)
  237. #define ATEXT__(str) (str)
  238. // use these; expands str first cpp pass, e.g., handles WTEXT(__FILE__) 
  239. #define WTEXT(str) WTEXT__(str) // make wide (unicode)
  240. #define ATEXT(str) ATEXT__(str) // make ansi
  241. #if defined(_UNICODE)
  242. #define TEXT(a) WTEXT__(a)
  243. typedef wchar_t TCHAR;
  244. #else
  245. #define TEXT__(a) ATEXT__(a)
  246. typedef char TCHAR;
  247. #endif
  248. // ez lookup table helpers
  249. //
  250. // 1) create table
  251. // static const epUtil::KeyValEntry<TUint, const TCHAR*> myTable[] = { Emit_(FOO), ... }
  252. //
  253. // 2) lookup
  254. //  val = epUtil::DoLookup(myTable, ARRAY_COUNT(myTable), someKey);
  255. //
  256. // stringify val as: depends on _UNICODE defined; ansi; or wide(unicode)
  257. #define Emit_(x) { x, TEXT(#x) }  
  258. #define EmitA_(x) { x, ATEXT(#x) }
  259. #define EmitW_(x) { x, WTEXT(#x) }
  260. // simple one-to-one look up table entry for DoLookup
  261. template<typename KeyType_, typename ValType_>
  262. struct KeyValEntry
  263. {
  264.     typedef KeyType_ KeyType;
  265.     typedef ValType_ ValType;
  266.     KeyType_ key;
  267.     ValType_ val;
  268. };
  269. template<typename T>
  270. struct CompareTrait
  271. {
  272.     static bool Compare(const T& left, const T& right) { return (left == right); }
  273. };
  274. template<>
  275. struct CompareTrait<const char*>
  276. {
  277.     static bool Compare(const char* left, const char* right) { return (0 == strcmp(left,right)); }
  278. };
  279. ////////////////////////////////////////////////
  280. // Do simple one-to-one table look up
  281. template <typename EntryType>
  282. typename EntryType::ValType DoLookup(EntryType* pTable, TUint count, 
  283.                                        typename EntryType::KeyType key )
  284. {
  285.     typedef typename EntryType::ValType ValType;
  286.     typedef typename EntryType::KeyType KeyType;
  287.     // return default constructed object by default
  288.     ValType val = ValType();
  289.     for(TUint idx = 0; idx < count; ++idx )
  290.     {
  291.         if(CompareTrait<KeyType>::Compare(key, pTable[idx].key))
  292. {
  293.     val = pTable[idx].val;
  294.     break;
  295. }
  296.     }
  297.     return val;
  298. }
  299. ////////////////////////////////////////////////
  300. // given ordered array of items (valArray),
  301. // returns nearest index that input value (val)
  302. // matches or exceeds
  303. //
  304. // e.g., for:
  305. //
  306. // int vals[] = { 12, 100, 530, 999 }
  307. //
  308. // you get:
  309. //
  310. // val     return
  311. // --------------
  312. // 9       0
  313. // 100     1
  314. // 529     1
  315. // 999     3
  316. // 1000    3
  317. //
  318. //
  319. template< typename T >
  320. TInt GetThresholdIndex(T val, const T valArray[], TInt count)
  321. {
  322.     T bestMatch = 0;
  323.     TInt idxBestMatch = count - 1;
  324.     for( TInt idx = 0; idx < count; ++idx )
  325.     {
  326. bestMatch = valArray[idx];
  327. if( bestMatch > val )
  328. {
  329.     // return next lowest (be conservative), or lowest
  330.     idxBestMatch = max(idx - 1, 0);
  331.     break;
  332. }
  333.     }
  334.     return idxBestMatch;
  335. }
  336. }
  337. using namespace CHXAvUtil;
  338. #endif // _chxavutil_h_