-// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section) :
- pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section)
-{
-}
- /*}}}*/
-// TranslationIndex::Trans* - Return the URI to the translation files /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-inline string debTranslationsIndex::IndexFile(const char *Type) const
-{
- return _config->FindDir("Dir::State::lists") + URItoFileName(IndexURI(Type));
-}
-string debTranslationsIndex::IndexURI(const char *Type) const
-{
- string Res;
-
- string theURI = URI;
- // FIXME: EVIL! Remove as soon as pdiff support is offical
- string remap = _config->Find("DDTP::URL-Remap::"+URI,"");
- if(!remap.empty())
- theURI = remap;
-
-
- if (Dist[Dist.size() - 1] == '/')
- {
- if (Dist != "/")
- Res = theURI + Dist;
- else
- Res = theURI;
- }
- else
- Res = theURI + "dists/" + Dist + '/' + Section +
- "/i18n/Translation-";
-
- Res += Type;
- return Res;
-}
- /*}}}*/
-// TranslationsIndex::GetIndexes - Fetch the index files /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const
-{
- if (TranslationsAvailable()) {
- string TranslationFile = "Translation-" + LanguageCode();
- new pkgAcqIndexTrans(Owner, IndexURI(LanguageCode().c_str()),
- Info(TranslationFile.c_str()),
- TranslationFile);
- }
-
- return true;
-}
- /*}}}*/
-// TranslationsIndex::Describe - Give a descriptive path to the index /*{{{*/
-// ---------------------------------------------------------------------
-/* This should help the user find the index in the sources.list and
- in the filesystem for problem solving */
-string debTranslationsIndex::Describe(bool Short) const
-{
- char S[300];
- if (Short == true)
- snprintf(S,sizeof(S),"%s",Info(TranslationFile().c_str()).c_str());
- else
- snprintf(S,sizeof(S),"%s (%s)",Info(TranslationFile().c_str()).c_str(),
- IndexFile(LanguageCode().c_str()).c_str());
- return S;
-}
- /*}}}*/
-// TranslationsIndex::Info - One liner describing the index URI /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debTranslationsIndex::Info(const char *Type) const
-{
- string Info = ::URI::SiteOnly(URI) + ' ';
- if (Dist[Dist.size() - 1] == '/')
- {
- if (Dist != "/")
- Info += Dist;
- }
- else
- Info += Dist + '/' + Section;
- Info += " ";
- Info += Type;
- return Info;
-}
- /*}}}*/
-bool debTranslationsIndex::HasPackages() const
-{
- if(!TranslationsAvailable())
- return false;
-
- return FileExists(IndexFile(LanguageCode().c_str()));
-}
-
-// TranslationsIndex::Exists - Check if the index is available /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool debTranslationsIndex::Exists() const
-{
- return FileExists(IndexFile(LanguageCode().c_str()));
-}
- /*}}}*/
-// TranslationsIndex::Size - Return the size of the index /*{{{*/
-// ---------------------------------------------------------------------
-/* This is really only used for progress reporting. */
-unsigned long debTranslationsIndex::Size() const
-{
- struct stat S;
- if (stat(IndexFile(LanguageCode().c_str()).c_str(),&S) != 0)
- return 0;
- return S.st_size;
-}
- /*}}}*/
-// TranslationsIndex::Merge - Load the index file into a cache /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
-{
- // Check the translation file, if in use
- string TranslationFile = IndexFile(LanguageCode().c_str());
- if (TranslationsAvailable() && FileExists(TranslationFile))
- {
- FileFd Trans(TranslationFile,FileFd::ReadOnly);
- debListParser TransParser(&Trans);
- if (_error->PendingError() == true)
- return false;
-
- Prog.SubProgress(0, Info(TranslationFile.c_str()));
- if (Gen.SelectFile(TranslationFile,string(),*this) == false)
- return _error->Error("Problem with SelectFile %s",TranslationFile.c_str());
-
- // Store the IMS information
- pkgCache::PkgFileIterator TransFile = Gen.GetCurFile();
- struct stat TransSt;
- if (fstat(Trans.Fd(),&TransSt) != 0)
- return _error->Errno("fstat","Failed to stat");
- TransFile->Size = TransSt.st_size;
- TransFile->mtime = TransSt.st_mtime;
-
- if (Gen.MergeList(TransParser) == false)
- return _error->Error("Problem with MergeList %s",TranslationFile.c_str());
- }
-
- return true;
-}
- /*}}}*/
-// TranslationsIndex::FindInCache - Find this index /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const
-{
- string FileName = IndexFile(LanguageCode().c_str());
-
- pkgCache::PkgFileIterator File = Cache.FileBegin();
- for (; File.end() == false; File++)
- {
- if (FileName != File.FileName())
- continue;
-
- struct stat St;
- if (stat(File.FileName(),&St) != 0)
- return pkgCache::PkgFileIterator(Cache);
- if ((unsigned)St.st_size != File->Size || St.st_mtime != File->mtime)
- return pkgCache::PkgFileIterator(Cache);
- return File;
- }
- return File;
-}
- /*}}}*/