summaryrefslogtreecommitdiffstats
path: root/kioslave/system
diff options
context:
space:
mode:
Diffstat (limited to 'kioslave/system')
-rw-r--r--kioslave/system/Makefile.am31
-rw-r--r--kioslave/system/dummy.cpp1
-rw-r--r--kioslave/system/entries/Makefile.am5
-rw-r--r--kioslave/system/entries/documents.desktop68
-rw-r--r--kioslave/system/entries/home.desktop78
-rwxr-xr-xkioslave/system/entries/kio_system_documenthelper14
-rw-r--r--kioslave/system/entries/media.desktop71
-rw-r--r--kioslave/system/entries/remote.desktop73
-rw-r--r--kioslave/system/entries/trash.desktop84
-rw-r--r--kioslave/system/entries/users.desktop67
-rw-r--r--kioslave/system/kdedmodule/Makefile.am13
-rw-r--r--kioslave/system/kdedmodule/systemdirnotify.cpp184
-rw-r--r--kioslave/system/kdedmodule/systemdirnotify.desktop64
-rw-r--r--kioslave/system/kdedmodule/systemdirnotify.h47
-rw-r--r--kioslave/system/kdedmodule/systemdirnotifymodule.cpp37
-rw-r--r--kioslave/system/kdedmodule/systemdirnotifymodule.h36
-rw-r--r--kioslave/system/kio_system.cpp189
-rw-r--r--kioslave/system/kio_system.h45
-rw-r--r--kioslave/system/mimetypes/Makefile.am6
-rw-r--r--kioslave/system/mimetypes/system_directory.desktop76
-rw-r--r--kioslave/system/system.protocol19
-rw-r--r--kioslave/system/systemimpl.cpp276
-rw-r--r--kioslave/system/systemimpl.h65
-rw-r--r--kioslave/system/testsystem.cpp69
-rw-r--r--kioslave/system/testsystem.h34
25 files changed, 1652 insertions, 0 deletions
diff --git a/kioslave/system/Makefile.am b/kioslave/system/Makefile.am
new file mode 100644
index 000000000..fb71211dc
--- /dev/null
+++ b/kioslave/system/Makefile.am
@@ -0,0 +1,31 @@
+SUBDIRS= . kdedmodule entries mimetypes
+
+INCLUDES = $(all_includes)
+METASOURCES = AUTO
+
+kde_module_LTLIBRARIES = kio_system.la
+
+kio_system_la_SOURCES = dummy.cpp
+kio_system_la_LIBADD = libkiosystem.la $(LIB_KIO)
+kio_system_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) -no-undefined
+
+dummy.cpp:
+ echo > dummy.cpp
+
+kde_services_DATA = system.protocol
+
+noinst_LTLIBRARIES = libkiosystem.la
+libkiosystem_la_SOURCES = kio_system.cpp systemimpl.cpp
+
+check_PROGRAMS = testsystem
+testsystem_SOURCES = testsystem.cpp
+testsystem_LDADD = libkiosystem.la $(LIB_KIO)
+testsystem_LDFLAGS = $(all_libraries)
+
+## TODO in unsermake: TESTS = testsystem
+check: testsystem
+ ./testsystem
+
+messages:
+ $(XGETTEXT) `find . -name "*.cc" -o -name "*.cpp" -o -name "*.h"` -o $(podir)/kio_system.pot
+
diff --git a/kioslave/system/dummy.cpp b/kioslave/system/dummy.cpp
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/kioslave/system/dummy.cpp
@@ -0,0 +1 @@
+
diff --git a/kioslave/system/entries/Makefile.am b/kioslave/system/entries/Makefile.am
new file mode 100644
index 000000000..1e356badb
--- /dev/null
+++ b/kioslave/system/entries/Makefile.am
@@ -0,0 +1,5 @@
+systemviewdir = $(kde_datadir)/systemview
+systemview_DATA = home.desktop documents.desktop users.desktop media.desktop remote.desktop trash.desktop
+
+bin_SCRIPTS = kio_system_documenthelper
+
diff --git a/kioslave/system/entries/documents.desktop b/kioslave/system/entries/documents.desktop
new file mode 100644
index 000000000..16016e0c5
--- /dev/null
+++ b/kioslave/system/entries/documents.desktop
@@ -0,0 +1,68 @@
+[Desktop Entry]
+Type=Link
+Path[$e]=$( kio_system_documenthelper )
+Icon=folder_important
+Name=Documents Folder
+Name[af]=Dokument Gids
+Name[ar]=مستنداتي
+Name[be]=Тэчка для дакументаў
+Name[bg]=Директория с документи
+Name[bn]=ডকুমেন্ট ফোল্ডার
+Name[br]=Renkell an teulioù
+Name[bs]=Direktorij dokumenata
+Name[ca]=Carpeta de documents
+Name[cs]=Složka s dokumenty
+Name[csb]=Katalog dokùmentów
+Name[da]=Dokumentmappe
+Name[de]=Dokumente
+Name[el]=Φάκελος εγγράφων
+Name[eo]=Dokumenta dosierujo
+Name[es]=Carpeta de documentos
+Name[et]=Dokumentide kataloog
+Name[eu]=Dokumentuen karpeta
+Name[fa]=پوشۀ مستندات
+Name[fi]=Asiakirjakansio
+Name[fr]=Dossier des documents
+Name[fy]=Ofkeppele kamera
+Name[ga]=Fillteán na gCáipéisí
+Name[gl]=Cartafol de Documentos
+Name[he]=תיקיית מסמכים
+Name[hr]=Mapa dokumenata
+Name[hu]=Dokumentumok könyvtár
+Name[is]=Skjalamappa
+Name[it]=Cartella documenti
+Name[ja]=ドキュメントフォルダ
+Name[ka]=დოკუმენტების დასტა
+Name[kk]=Құжаттар қапшығы
+Name[km]=ថត​ឯកសារ
+Name[ko]=문서 탐색기
+Name[lt]=Dokumentų aplankai
+Name[mk]=Папка со документи
+Name[nb]=Dokumentmappe
+Name[nds]=Dokmenten-Orner
+Name[ne]=कागजात फोल्डर
+Name[nl]=Documenten
+Name[nn]=Dokumentmappe
+Name[pa]=ਦਸਤਾਵੇਜ਼ ਫੋਲਡਰ
+Name[pl]=Katalog dokumentów
+Name[pt]=Pasta de Documentos
+Name[pt_BR]=Pasta de Documentos
+Name[ro]=Folder documente
+Name[ru]=Документы
+Name[se]=Dokumeantamáhppa
+Name[sk]=Priečinok dokumentov
+Name[sl]=Mapa z dokumenti
+Name[sr]=Фасцикла са документима
+Name[sr@Latn]=Fascikla sa dokumentima
+Name[sv]=Dokumentkatalog
+Name[te]=పత్రాల ఫొల్డర్
+Name[tg]=Ҳуҷҷатҳо
+Name[th]=โฟลเดอร์เอกสาร
+Name[tr]=Belgeler Dizini
+Name[uk]=Тека документів
+Name[uz]=Hujjatlar jildi
+Name[uz@cyrillic]=Ҳужжатлар жилди
+Name[vi]=Thư mục Tài liệu
+Name[wa]=Ridant documints
+Name[zh_CN]=文档文件夹
+Name[zh_TW]=文件目錄
diff --git a/kioslave/system/entries/home.desktop b/kioslave/system/entries/home.desktop
new file mode 100644
index 000000000..56c07117a
--- /dev/null
+++ b/kioslave/system/entries/home.desktop
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Type=Link
+Path=$HOME
+Icon=folder_home
+Name=Home Folder
+Name[af]=Tuis Gids
+Name[ar]=منزلي
+Name[az]=Ev Qovluğu
+Name[be]=Хатняя тэчка
+Name[bg]=Домашна директория
+Name[bn]=ব্যক্তিগত ফোল্ডার
+Name[br]=Renkell ar gêr
+Name[bs]=Home direktorij
+Name[ca]=Carpeta inici
+Name[cs]=Domovská složka
+Name[csb]=Domôcy katalog
+Name[cy]=Plygell Cartref
+Name[da]=Hjemmemappe
+Name[de]=Persönlicher Ordner
+Name[el]=Προσωπικός φάκελος
+Name[eo]=Hejma dosierujo
+Name[es]=Carpeta personal
+Name[et]=Kodukataloog
+Name[eu]=Etxeko karpeta
+Name[fa]=پوشۀ آغازه
+Name[fi]=Kotikansio
+Name[fr]=Dossier personnel
+Name[fy]=Persoanlike map
+Name[ga]=Fillteán Baile
+Name[gl]=Cartafol Persoal
+Name[he]=תיקיית בית
+Name[hi]=मुख फ़ोल्डर
+Name[hr]=Početna mapa korisnika
+Name[hu]=Saját könyvtár
+Name[is]=Heimasvæði
+Name[it]=Cartella Home
+Name[ja]=ホームフォルダ
+Name[ka]=საწყისი საქაღალდე
+Name[kk]=Мекен қапшығы
+Name[km]=ថត​ផ្ទះ
+Name[ko]=홈 폴더
+Name[lt]=Namų aplankas
+Name[lv]=Mājas mape
+Name[mk]=Домашна папка
+Name[mn]=Хувийн лавлах
+Name[ms]=Folder Laman Utama
+Name[mt]=Direttorju Personali
+Name[nb]=Hjemmemappe
+Name[nds]=Tohuus-Orner
+Name[ne]=गृह फोल्डर
+Name[nl]=Persoonlijke map
+Name[nn]=Heimemappe
+Name[pa]=ਘਰ ਫੋਲਡਰ
+Name[pl]=Katalog domowy
+Name[pt]=Pasta Pessoal
+Name[pt_BR]=Pasta do Usuário
+Name[ro]=Folder personal
+Name[ru]=Домашняя папка
+Name[rw]=Ububiko Urugo
+Name[se]=Ruoktomáhppa
+Name[sk]=Domovský priečinok
+Name[sl]=Domača mapa
+Name[sr]=Домаћа фасцикла
+Name[sr@Latn]=Domaća fascikla
+Name[sv]=Hemkatalog
+Name[ta]=வீட்டு அடைவு
+Name[te]=ఇంటి ఫొల్డర్
+Name[tg]=Феҳристи хонагӣ
+Name[th]=โฟลเดอร์ส่วนตัว
+Name[tr]=Başlangıç Dizini
+Name[tt]=Ana Törgäk
+Name[uk]=Домашня тека
+Name[uz]=Uy jildi
+Name[uz@cyrillic]=Уй жилди
+Name[vi]=Thư mục Nhà
+Name[wa]=Ridant måjhon
+Name[zh_CN]=主文件夹
+Name[zh_TW]=家目錄
diff --git a/kioslave/system/entries/kio_system_documenthelper b/kioslave/system/entries/kio_system_documenthelper
new file mode 100755
index 000000000..7cc2c2b2d
--- /dev/null
+++ b/kioslave/system/entries/kio_system_documenthelper
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Script used by by the document.desktop entry to determine if it must be
+# shown or not
+#
+# Copyright GPL v2 by Kevin Ottens <ervin ipsquad net>
+#
+
+document_path=`kde-config --userpath document | sed "s/\/\$//"`
+home_path=`echo $HOME | sed "s/\/\$//"`
+
+if test "$document_path" != "$home_path" ; then
+ echo $document_path
+fi
+
diff --git a/kioslave/system/entries/media.desktop b/kioslave/system/entries/media.desktop
new file mode 100644
index 000000000..8ad83923a
--- /dev/null
+++ b/kioslave/system/entries/media.desktop
@@ -0,0 +1,71 @@
+[Desktop Entry]
+Type=Link
+URL=media:/
+Icon=system
+Name=Storage Media
+Name[af]=Stoor Media
+Name[ar]=وسائط التخزين
+Name[be]=Носьбіты
+Name[bg]=Съхраняващи устройства
+Name[bn]=স্টোরেজ মিডিয়া
+Name[bs]=Uređaji za smještaj podataka
+Name[ca]=Suports d'emmagatzematge
+Name[cs]=Úložná zařízení
+Name[csb]=Zôpisowné media
+Name[da]=Opbevaringsmedie
+Name[de]=Speichermedien
+Name[el]=Συσκευές αποθήκευσης
+Name[eo]=Enmemoriga Medio
+Name[es]=Dispositivos de almacenamiento
+Name[et]=Andmekandjad
+Name[eu]=Biltegiratze-euskarria
+Name[fa]=رسانۀ ذخیره‌گاه
+Name[fi]=Tallennusmedia
+Name[fr]=Support de stockage
+Name[fy]=Opslachapparaten
+Name[ga]=Meán Stórais
+Name[gl]=Medios de armacenaxe
+Name[he]=התקנים
+Name[hi]=भंडार मीडिया
+Name[hr]=Mediji za pohranjivanje
+Name[hu]=Tárolóeszközök
+Name[is]=Geymslumiðlar
+Name[it]=Dispositivi di archiviazione
+Name[ja]=記憶メディア
+Name[ka]=მონაცემთა შენახვის მოწყობილობები
+Name[kk]=Жинақтаушы құрылғылар
+Name[km]=ឧបករណ៍​ផ្ទុក
+Name[lt]=Saugojimo įrenginiai
+Name[lv]=Datu nesējs
+Name[mk]=Медиуми за податоци
+Name[ms]=Media Storan
+Name[nb]=Lagringsenheter
+Name[nds]=Spiekermedien
+Name[ne]=भण्डारण मिडिया
+Name[nl]=Opslagapparaten
+Name[nn]=Lagringsmedium
+Name[pa]=ਸਟੋਰੇਜ਼ ਮੀਡਿਆ
+Name[pl]=Urządzenia przechowywania danych
+Name[pt]=Dispositivos de Armazenamento
+Name[pt_BR]=Mídia de Armazenamento
+Name[ro]=Mediu de stocare
+Name[ru]=Устройства хранения данных
+Name[rw]=Uburyo bwo Kubika
+Name[se]=Vurkenmedia
+Name[sk]=Zálohovacie médiá
+Name[sl]=Nosilci za shranjevanje
+Name[sr]=Складишни медијуми
+Name[sr@Latn]=Skladišni medijumi
+Name[sv]=Lagringsmedia
+Name[ta]=சேகரிப்பு ஊடகம்
+Name[tg]=Захирагоҳи маълумот
+Name[th]=สื่อเก็บข้อมูล
+Name[tr]=Depolama Ortamı
+Name[tt]=Saqlawlı Media
+Name[uk]=Пристрої зберігання інформації
+Name[uz]=Saqlash uskunalari
+Name[uz@cyrillic]=Сақлаш ускуналари
+Name[vi]=Ổ chứa Dữ liệu
+Name[wa]=Sopoirts di wårdaedje
+Name[zh_CN]=存储介质
+Name[zh_TW]=儲存媒體
diff --git a/kioslave/system/entries/remote.desktop b/kioslave/system/entries/remote.desktop
new file mode 100644
index 000000000..8f064a83b
--- /dev/null
+++ b/kioslave/system/entries/remote.desktop
@@ -0,0 +1,73 @@
+[Desktop Entry]
+Type=Link
+URL=remote:/
+Icon=network
+Name=Remote Places
+Name[af]=Afgeleë Plekke
+Name[ar]=أماكن بعيدة
+Name[be]=Аддаленыя месцы
+Name[bg]=Отдалечени директории
+Name[bn]=দূরবর্তী অবস্থান
+Name[br]=Lec'hiadurioù a-bell
+Name[bs]=Udaljena mjesta
+Name[ca]=Llocs remots
+Name[cs]=Vzdálená umístění
+Name[csb]=Daleczi place
+Name[da]=Eksterne steder
+Name[de]=Netzwerk
+Name[el]=Απομακρυσμένες τοποθεσίες
+Name[eo]=Foraj Lokoj
+Name[es]=Lugares remotos
+Name[et]=Võrgukohad
+Name[eu]=Urruneko lekuak
+Name[fa]=جاهای دور
+Name[fi]=Etäkohteet
+Name[fr]=Emplacements distants
+Name[fy]=Eksterne plakken
+Name[ga]=Áiteanna Cianda
+Name[gl]=Comparticións Remotas
+Name[he]=מקומות מרוחקים
+Name[hi]=रिमोट स्थान
+Name[hr]=Udaljene lokacije
+Name[hu]=Hálózati helyek
+Name[is]=Fjarlægir staðir
+Name[it]=Indirizzi remoti
+Name[ja]=リモートの場所
+Name[ka]=დაშორებული ადგილები
+Name[kk]=Қашықтағы орындар
+Name[km]=កន្លែង​ពី​ចម្ងាយ
+Name[ko]=원격 접속
+Name[lt]=Nutolusios vietos
+Name[lv]=Attālinātās vietas
+Name[mk]=Оддалечени места
+Name[ms]=Tempat Jauh
+Name[nb]=Eksterne steder
+Name[nds]=Feern Steden
+Name[ne]=टाढाको स्थान
+Name[nl]=Externe plekken
+Name[nn]=Eksterne plassar
+Name[pa]=ਰਿਮੋਟ ਥਾਂ
+Name[pl]=Zdalne miejsca
+Name[pt]=Locais Remotos
+Name[pt_BR]=Locais Remotos
+Name[ro]=Locații distante
+Name[ru]=Сетевые ресурсы
+Name[rw]=Imyanya ya Kure
+Name[se]=Gáiddus báikkit
+Name[sk]=Vzdialené miesta
+Name[sl]=Oddaljena mesta
+Name[sr]=Удаљена места
+Name[sr@Latn]=Udaljena mesta
+Name[sv]=Fjärrplatser
+Name[ta]=தொலைதூர இடங்கள்
+Name[te]=సుదూరపు ప్రదేశాలు
+Name[th]=ทางไกล
+Name[tr]=Uzak Yerler
+Name[tt]=Çittäge Urınnar
+Name[uk]=Віддалені місця
+Name[uz]=Masofadagi joylar
+Name[uz@cyrillic]=Масофадаги жойлар
+Name[vi]=Địa chỉ trên mạng
+Name[wa]=Plaeces då lon
+Name[zh_CN]=远程位置
+Name[zh_TW]=遠端空間
diff --git a/kioslave/system/entries/trash.desktop b/kioslave/system/entries/trash.desktop
new file mode 100644
index 000000000..7de5f21b6
--- /dev/null
+++ b/kioslave/system/entries/trash.desktop
@@ -0,0 +1,84 @@
+[Desktop Entry]
+Type=Link
+URL=trash:/
+Icon=trashcan_full
+EmptyIcon=trashcan_empty
+Name=Trash
+Name[af]=Gemors
+Name[ar]=سلة النفايات
+Name[az]=Zibil
+Name[be]=Сметніца
+Name[bg]=Кошче
+Name[bn]=আবর্জনা
+Name[br]=Pod-lastez
+Name[bs]=Smeće
+Name[ca]=Paperera
+Name[cs]=Koš
+Name[csb]=Kòsz
+Name[cy]=Sbwriel
+Name[da]=Affald
+Name[de]=Mülleimer
+Name[el]=Κάδος απορριμμάτων
+Name[en_GB]=Wastebin
+Name[eo]=Rubujo
+Name[es]=Papelera
+Name[et]=Prügikast
+Name[eu]=Zaborra
+Name[fa]=زباله
+Name[fi]=Roskakori
+Name[fr]=Corbeille
+Name[fy]=Jiskefet
+Name[ga]=Bruscar
+Name[gl]=Lixo
+Name[he]=אשפה
+Name[hi]=रद्दी
+Name[hr]=Otpad
+Name[hsb]=Papjernik
+Name[hu]=Szemétkosár
+Name[is]=Rusl
+Name[it]=Cestino
+Name[ja]=ごみ箱
+Name[ka]=ურნა
+Name[kk]=Өшірілгендер
+Name[km]=ធុងសំរាម
+Name[lo]=ຖັງຂີ້ເຫຍື່ອ
+Name[lt]=Šiukšliadėžė
+Name[lv]=Miskaste
+Name[mk]=Корпа
+Name[mn]=Хогийн сав
+Name[ms]=Sampah
+Name[mt]=Skart
+Name[nb]=Papirkurv
+Name[nds]=Affalltünn
+Name[ne]=रद्दीटोकरी
+Name[nl]=Prullenbak
+Name[nn]=Papirkorg
+Name[nso]=Seswaraditlakala
+Name[pa]=ਰੱਦੀ
+Name[pl]=Kosz
+Name[pt]=Lixo
+Name[pt_BR]=Lixo
+Name[ro]=Gunoi
+Name[ru]=Корзина
+Name[se]=Ruskalihtti
+Name[sk]=Kôš
+Name[sl]=Smeti
+Name[sr]=Смеће
+Name[sr@Latn]=Smeće
+Name[sv]=Skräp
+Name[ta]=குப்பை
+Name[te]=చెత్త బుట్ట
+Name[tg]=Ахлотдон
+Name[th]=ถังขยะ
+Name[tr]=Çöp
+Name[tt]=Çüplek
+Name[uk]=Смітник
+Name[uz]=Chiqindilar qutisi
+Name[uz@cyrillic]=Чиқиндилар қутиси
+Name[ven]=Tshikha
+Name[vi]=Thùng rác
+Name[wa]=Batch
+Name[xh]=Inkukumo
+Name[zh_CN]=回收站
+Name[zh_TW]=資源回收桶
+Name[zu]=Izibi
diff --git a/kioslave/system/entries/users.desktop b/kioslave/system/entries/users.desktop
new file mode 100644
index 000000000..3ae601b0b
--- /dev/null
+++ b/kioslave/system/entries/users.desktop
@@ -0,0 +1,67 @@
+[Desktop Entry]
+Type=Link
+URL=home:/
+Icon=folder_home2
+Name=Users Folders
+Name[af]=Gebruiker Gidse
+Name[ar]=مجلّدات المستخدمين
+Name[be]=Тэчкі карыстальнікаў
+Name[bg]=Потребителски директории
+Name[bn]=ব্যবহারকারী ফোল্ডার
+Name[br]=Renkellioù an arveriaded
+Name[bs]=Korisnički direktoriji
+Name[ca]=Carpeta d'usuaris
+Name[cs]=Složka uživatelů
+Name[csb]=Katalodżi brëkòwników
+Name[da]=Brugermapper
+Name[de]=Alle Persönlichen Ordner
+Name[el]=Φάκελος χρηστών
+Name[eo]=Uzantaj dosierujoj
+Name[es]=Carpetas de usuarios
+Name[et]=Kasutajate kataloogid
+Name[eu]=Erabiltzaileen karpetak
+Name[fa]=پوشه‌های‌ کاربران
+Name[fi]=Käyttäjäkansiot
+Name[fr]=Dossiers utilisateurs
+Name[fy]=Brûkersmappen
+Name[ga]=Fillteáin Úsáideora
+Name[gl]=Cartafoles dos Usuarios
+Name[he]=תיקיות משתמשים
+Name[hr]=Korisničke mape
+Name[hu]=Felhasználói könyvtárak
+Name[is]=Notandamöppur
+Name[it]=Cartelle utenti
+Name[ja]=ユーザフォルダ
+Name[ka]=მომხმარებლის დასტები
+Name[kk]=Пайдаланушылардың қапшығы
+Name[km]=ថត​របស់អ្នកប្រើ
+Name[ko]=홈 폴더
+Name[lt]=Naudotojų aplankai
+Name[mk]=Кориснички папки
+Name[nb]=Brukermapper
+Name[nds]=All Tohuusornern
+Name[ne]=प्रयोगकर्ता फोल्डर
+Name[nl]=Gebruikersmappen
+Name[nn]=Brukarmapper
+Name[pa]=ਉਪਭੋਗੀ ਫੋਲਡਰ
+Name[pl]=Katalogi użytkowników
+Name[pt]=Pastas dos Utilizadores
+Name[pt_BR]=Pastas do Usuários
+Name[ro]=Foldere utilizatori
+Name[ru]=Пользовательские папки
+Name[se]=Geavaheaddji máhpat
+Name[sk]=Priečinky používateľov
+Name[sl]=Mapa z uporabniki
+Name[sr]=Фасцикле корисникâ
+Name[sr@Latn]=Fascikle korisnikâ
+Name[sv]=Användares kataloger
+Name[te]=యుజర్ల ఫొల్డర్లు
+Name[th]=โฟลเดอร์ของผู้ใช้
+Name[tr]=Kullanıcı Dizinleri
+Name[uk]=Теки користувачів
+Name[uz]=Foydalanuvchilarning jildlari
+Name[uz@cyrillic]=Фойдаланувчиларнинг жилдлари
+Name[vi]=Thư mục Người dùng
+Name[wa]=Ridant uzeu
+Name[zh_CN]=用户文件夹
+Name[zh_TW]=使用者目錄
diff --git a/kioslave/system/kdedmodule/Makefile.am b/kioslave/system/kdedmodule/Makefile.am
new file mode 100644
index 000000000..bc368f9b1
--- /dev/null
+++ b/kioslave/system/kdedmodule/Makefile.am
@@ -0,0 +1,13 @@
+kde_module_LTLIBRARIES = kded_systemdirnotify.la
+
+METASOURCES = AUTO
+INCLUDES = $(all_includes)
+
+kded_systemdirnotify_la_SOURCES = systemdirnotify.cpp systemdirnotify.skel systemdirnotifymodule.cpp systemdirnotifymodule.skel
+kded_systemdirnotify_la_LDFLAGS = $(all_libraries) -module -avoid-version
+kded_systemdirnotify_la_LIBADD = $(LIB_KSYCOCA)
+
+
+servicesdir = $(kde_servicesdir)/kded
+services_DATA = systemdirnotify.desktop
+
diff --git a/kioslave/system/kdedmodule/systemdirnotify.cpp b/kioslave/system/kdedmodule/systemdirnotify.cpp
new file mode 100644
index 000000000..e0ec57992
--- /dev/null
+++ b/kioslave/system/kdedmodule/systemdirnotify.cpp
@@ -0,0 +1,184 @@
+/* This file is part of the KDE Project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "systemdirnotify.h"
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kdesktopfile.h>
+
+#include <kdirnotify_stub.h>
+
+#include <qdir.h>
+
+SystemDirNotify::SystemDirNotify()
+: mInited( false )
+{
+}
+
+void SystemDirNotify::init()
+{
+ if( mInited )
+ return;
+ mInited = true;
+ KGlobal::dirs()->addResourceType("system_entries",
+ KStandardDirs::kde_default("data") + "systemview");
+
+ QStringList names_found;
+ QStringList dirList = KGlobal::dirs()->resourceDirs("system_entries");
+
+ QStringList::ConstIterator dirpath = dirList.begin();
+ QStringList::ConstIterator end = dirList.end();
+ for(; dirpath!=end; ++dirpath)
+ {
+ QDir dir = *dirpath;
+ if (!dir.exists()) continue;
+
+ QStringList filenames
+ = dir.entryList( QDir::Files | QDir::Readable );
+
+ QStringList::ConstIterator name = filenames.begin();
+ QStringList::ConstIterator endf = filenames.end();
+
+ for(; name!=endf; ++name)
+ {
+ if (!names_found.contains(*name))
+ {
+ KDesktopFile desktop(*dirpath+*name, true);
+
+ QString system_name = *name;
+ system_name.truncate(system_name.length()-8);
+
+ KURL system_url("system:/"+system_name);
+
+ if ( !desktop.readURL().isEmpty() )
+ {
+ m_urlMap[desktop.readURL()] = system_url;
+ names_found.append( *name );
+ }
+ else if ( !desktop.readPath().isEmpty() )
+ {
+ KURL url;
+ url.setPath( desktop.readPath() );
+ m_urlMap[url] = system_url;
+ names_found.append( *name );
+ }
+ }
+ }
+ }
+}
+
+KURL SystemDirNotify::toSystemURL(const KURL &url)
+{
+ kdDebug() << "SystemDirNotify::toSystemURL(" << url << ")" << endl;
+
+ init();
+ QMap<KURL,KURL>::const_iterator it = m_urlMap.begin();
+ QMap<KURL,KURL>::const_iterator end = m_urlMap.end();
+
+ for (; it!=end; ++it)
+ {
+ KURL base = it.key();
+
+ if ( base.isParentOf(url) )
+ {
+ QString path = KURL::relativePath(base.path(),
+ url.path());
+ KURL result = it.data();
+ result.addPath(path);
+ result.cleanPath();
+ kdDebug() << result << endl;
+ return result;
+ }
+ }
+
+ kdDebug() << "KURL()" << endl;
+ return KURL();
+}
+
+KURL::List SystemDirNotify::toSystemURLList(const KURL::List &list)
+{
+ init();
+ KURL::List new_list;
+
+ KURL::List::const_iterator it = list.begin();
+ KURL::List::const_iterator end = list.end();
+
+ for (; it!=end; ++it)
+ {
+ KURL url = toSystemURL(*it);
+
+ if (url.isValid())
+ {
+ new_list.append(url);
+ }
+ }
+
+ return new_list;
+}
+
+ASYNC SystemDirNotify::FilesAdded(const KURL &directory)
+{
+ KURL new_dir = toSystemURL(directory);
+
+ if (new_dir.isValid())
+ {
+ KDirNotify_stub notifier("*", "*");
+ notifier.FilesAdded( new_dir );
+ if (new_dir.upURL().upURL()==KURL("system:/"))
+ {
+ notifier.FilesChanged( new_dir.upURL() );
+ }
+ }
+}
+
+ASYNC SystemDirNotify::FilesRemoved(const KURL::List &fileList)
+{
+ KURL::List new_list = toSystemURLList(fileList);
+
+ if (!new_list.isEmpty())
+ {
+ KDirNotify_stub notifier("*", "*");
+ notifier.FilesRemoved( new_list );
+
+ KURL::List::const_iterator it = new_list.begin();
+ KURL::List::const_iterator end = new_list.end();
+
+ for (; it!=end; ++it)
+ {
+ if ((*it).upURL().upURL()==KURL("system:/"))
+ {
+ notifier.FilesChanged( (*it).upURL() );
+ }
+ }
+ }
+}
+
+ASYNC SystemDirNotify::FilesChanged(const KURL::List &fileList)
+{
+ KURL::List new_list = toSystemURLList(fileList);
+
+ if (!new_list.isEmpty())
+ {
+ KDirNotify_stub notifier("*", "*");
+ notifier.FilesChanged( new_list );
+ }
+}
+
diff --git a/kioslave/system/kdedmodule/systemdirnotify.desktop b/kioslave/system/kdedmodule/systemdirnotify.desktop
new file mode 100644
index 000000000..315cb5bf8
--- /dev/null
+++ b/kioslave/system/kdedmodule/systemdirnotify.desktop
@@ -0,0 +1,64 @@
+[Desktop Entry]
+Type=Service
+Name=KDED System Base URL Notifier
+Name[af]=KDED Stelse URL inkennissteller
+Name[be]=Праверка змены сістэмных файлаў KDED
+Name[bs]=KDED sistemsko obavještenje o baznom URLu
+Name[ca]=Notificador d'URL de base al sistema KDED
+Name[cs]=Démon upozorňování na systémová URL
+Name[csb]=Dôwanié wiédzë ù systemòwëch URL-ach dlô KDED
+Name[da]=KDED Systembais-url påmindelser
+Name[de]=Überwachung für Systemordner
+Name[el]=Ειδοποιητής KDED για URL του συστήματος
+Name[eo]=KDED Sistemo Bazo URL Atentigilo
+Name[es]=Notificador de URL de base sistema de KDED
+Name[et]=KDED süsteemsete URL-ide teadustaja
+Name[eu]=KDEren sistema oinarri URL iragarlea
+Name[fa]=اخطاردهندۀ نشانی وب پایۀ سیستم KDED
+Name[fi]=KDED:in järjestelmä-osoitteiden ilmoittaja
+Name[fr]=Notificateur d'URL système KDED
+Name[fy]=KDED systeem basis URL-adres melding
+Name[gl]=KDED Notificador de Base de URL Remota
+Name[hi]=केडीईडी तंत्र आधार यूआरएल नोटिफ़ॉयर
+Name[hr]=KDED sistemsko URL obavještavanje
+Name[hu]=Alapcím-értesítő
+Name[is]=KDED kerfis grunnslóðar tilkynnari
+Name[it]=Notifica KDED System Base URL
+Name[ja]=KDED システム ベース URL 通知
+Name[kk]=Жергілікті дискідегі өзгеріс туралы қулақтандыру
+Name[ko]=KDED 원격 기반 URL 알리미
+Name[lt]=KDED sistemos pagrindinio URL priminiklis
+Name[lv]=KDED sistēmas bāzes URL atgādinātājs
+Name[ms]=Pemberitahu URL Pangkalan Sistem KDED
+Name[nb]=KDED-Systembase URL-varsler
+Name[nds]=KDED-Narichten för Systeem-Basis-URLs
+Name[ne]=KDED प्रणाली आधारित यूआरएल सूचक
+Name[nl]=KDED systeem basis URL-adres notificatie
+Name[nn]=KDED-Systembase URL-varslar
+Name[pa]=KDE ਸਿਸਟਮ ਆਧਾਰ URL ਸੂਚਨਾ
+Name[pl]=Powiadamianie o systemowych URL-ach dla KDED
+Name[pt]=Notificador URLs de Base de Sistema do KDED
+Name[pt_BR]=Serviço de Notificação da URL da Base do Sistema
+Name[ro]=Notificare KDED pentru URL sistem de bază
+Name[ru]=Проверка изменения локальных файлов
+Name[rw]=Mumenyekanisha wa URL KDED Sisitemu Shingiro
+Name[sk]=KDED notifikátor systémovej URL
+Name[sl]=Obvestilnik KDED sistemskega osnovnega URL-ja
+Name[sr]=Обавештавач о системском базном URL-у, KDED
+Name[sr@Latn]=Obaveštavač o sistemskom baznom URL-u, KDED
+Name[sv]=KDED-meddelande om systembaswebbadresser
+Name[ta]=KDED அமைப்பு சார்ந்த வலைமனை குறிப்பான்
+Name[th]=ตัวแจ้งเตือนพื้นฐานของระบบ URL KDED
+Name[tr]=KDED Sistem Tabanlı URL Hatırlatıcı
+Name[tt]=Cirle URL Üzgärelü Beldergeçe
+Name[uk]=Сповіщувач про системну основну адресу (URL) для KDED
+Name[vi]=Trình thông báo URL hệ thống KDED
+Name[wa]=Notifiaedje KDED d' URL sistinme di båze
+Name[zh_CN]=KDED 系统基 URL 通知器
+Name[zh_TW]=KDED 系統基礎 URL 通知程式
+ServiceTypes=KDEDModule
+X-KDE-ModuleType=Library
+X-KDE-Library=systemdirnotify
+X-KDE-FactoryName=systemdirnotify
+X-KDE-Kded-load-on-demand=true
+X-KDE-Kded-autoload=true
diff --git a/kioslave/system/kdedmodule/systemdirnotify.h b/kioslave/system/kdedmodule/systemdirnotify.h
new file mode 100644
index 000000000..34da65b82
--- /dev/null
+++ b/kioslave/system/kdedmodule/systemdirnotify.h
@@ -0,0 +1,47 @@
+/* This file is part of the KDE Project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _SYSTEMDIRNOTIFY_H_
+#define _SYSTEMDIRNOTIFY_H_
+
+#include <kurl.h>
+#include <kdirnotify.h>
+#include <qmap.h>
+
+class SystemDirNotify : public KDirNotify
+{
+K_DCOP
+
+public:
+ SystemDirNotify();
+
+k_dcop:
+ virtual ASYNC FilesAdded (const KURL &directory);
+ virtual ASYNC FilesRemoved (const KURL::List &fileList);
+ virtual ASYNC FilesChanged (const KURL::List &fileList);
+
+private:
+ void init();
+ KURL toSystemURL(const KURL &url);
+ KURL::List toSystemURLList(const KURL::List &list);
+
+ QMap<KURL,KURL> m_urlMap;
+ bool mInited;
+};
+
+#endif
diff --git a/kioslave/system/kdedmodule/systemdirnotifymodule.cpp b/kioslave/system/kdedmodule/systemdirnotifymodule.cpp
new file mode 100644
index 000000000..36c46fcd0
--- /dev/null
+++ b/kioslave/system/kdedmodule/systemdirnotifymodule.cpp
@@ -0,0 +1,37 @@
+/* This file is part of the KDE Project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "systemdirnotifymodule.h"
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kglobal.h>
+
+SystemDirNotifyModule::SystemDirNotifyModule(const QCString &obj)
+ : KDEDModule(obj)
+{
+}
+
+extern "C" {
+ KDE_EXPORT KDEDModule *create_systemdirnotify(const QCString &obj)
+ {
+ KGlobal::locale()->insertCatalogue("kio_system");
+ return new SystemDirNotifyModule(obj);
+ }
+}
+
diff --git a/kioslave/system/kdedmodule/systemdirnotifymodule.h b/kioslave/system/kdedmodule/systemdirnotifymodule.h
new file mode 100644
index 000000000..c75cd1a9e
--- /dev/null
+++ b/kioslave/system/kdedmodule/systemdirnotifymodule.h
@@ -0,0 +1,36 @@
+/* This file is part of the KDE Project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _SYSTEMDIRNOTIFYMODULE_H_
+#define _SYSTEMDIRNOTIFYMODULE_H_
+
+#include <kdedmodule.h>
+
+#include "systemdirnotify.h"
+
+class SystemDirNotifyModule : public KDEDModule
+{
+K_DCOP
+
+public:
+ SystemDirNotifyModule(const QCString &obj);
+private:
+ SystemDirNotify notifier;
+};
+
+#endif
diff --git a/kioslave/system/kio_system.cpp b/kioslave/system/kio_system.cpp
new file mode 100644
index 000000000..c2683add8
--- /dev/null
+++ b/kioslave/system/kio_system.cpp
@@ -0,0 +1,189 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <stdlib.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <dcopclient.h>
+
+#include <qeventloop.h>
+
+#include "kio_system.h"
+
+
+static const KCmdLineOptions options[] =
+{
+ { "+protocol", I18N_NOOP( "Protocol name" ), 0 },
+ { "+pool", I18N_NOOP( "Socket name" ), 0 },
+ { "+app", I18N_NOOP( "Socket name" ), 0 },
+ KCmdLineLastOption
+};
+
+extern "C" {
+ KDE_EXPORT int kdemain( int argc, char **argv )
+ {
+ // KApplication is necessary to use other ioslaves
+ putenv(strdup("SESSION_MANAGER="));
+ KCmdLineArgs::init(argc, argv, "kio_system", 0, 0, 0, 0);
+ KCmdLineArgs::addCmdLineOptions( options );
+ KApplication app( false, false );
+ // We want to be anonymous even if we use DCOP
+ app.dcopClient()->attach();
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ SystemProtocol slave( args->arg(0), args->arg(1), args->arg(2) );
+ slave.dispatchLoop();
+ return 0;
+ }
+}
+
+
+SystemProtocol::SystemProtocol(const QCString &protocol,
+ const QCString &pool, const QCString &app)
+ : ForwardingSlaveBase(protocol, pool, app)
+{
+}
+
+SystemProtocol::~SystemProtocol()
+{
+}
+
+bool SystemProtocol::rewriteURL(const KURL &url, KURL &newUrl)
+{
+ QString name, path;
+
+ if ( !m_impl.parseURL(url, name, path) )
+ {
+ error(KIO::ERR_MALFORMED_URL, url.prettyURL());
+ return false;
+ }
+
+ if ( !m_impl.realURL(name, path, newUrl) )
+ {
+ error( m_impl.lastErrorCode(), m_impl.lastErrorMessage() );
+ return false;
+ }
+
+ return true;
+}
+
+
+void SystemProtocol::stat(const KURL &url)
+{
+ kdDebug() << "SystemProtocol::stat: " << url << endl;
+
+ QString path = url.path();
+ if ( path.isEmpty() || path == "/" )
+ {
+ // The root is "virtual" - it's not a single physical directory
+ KIO::UDSEntry entry;
+ m_impl.createTopLevelEntry( entry );
+ statEntry( entry );
+ finished();
+ return;
+ }
+
+ QString name;
+ bool ok = m_impl.parseURL(url, name, path);
+
+ if ( !ok )
+ {
+ error(KIO::ERR_MALFORMED_URL, url.prettyURL());
+ return;
+ }
+
+ if( path.isEmpty() )
+ {
+ KIO::UDSEntry entry;
+
+ if ( m_impl.statByName(name, entry) )
+ {
+ statEntry(entry);
+ finished();
+ }
+ else
+ {
+ error(KIO::ERR_DOES_NOT_EXIST, url.prettyURL());
+ }
+ }
+ else
+ {
+ ForwardingSlaveBase::stat(url);
+ }
+}
+
+void SystemProtocol::listDir(const KURL &url)
+{
+ kdDebug() << "SystemProtocol::listDir: " << url << endl;
+
+ if ( url.path().length() <= 1 )
+ {
+ listRoot();
+ return;
+ }
+
+ QString name, path;
+ bool ok = m_impl.parseURL(url, name, path);
+
+ if ( !ok )
+ {
+ error(KIO::ERR_MALFORMED_URL, url.prettyURL());
+ return;
+ }
+
+ ForwardingSlaveBase::listDir(url);
+}
+
+void SystemProtocol::listRoot()
+{
+ KIO::UDSEntry entry;
+
+ KIO::UDSEntryList system_entries;
+ bool ok = m_impl.listRoot(system_entries);
+
+ if (!ok)
+ {
+ error( m_impl.lastErrorCode(), m_impl.lastErrorMessage() );
+ return;
+ }
+
+ totalSize(system_entries.count()+1);
+
+ m_impl.createTopLevelEntry(entry);
+ listEntry(entry, false);
+
+ KIO::UDSEntryListIterator it = system_entries.begin();
+ KIO::UDSEntryListIterator end = system_entries.end();
+
+ for(; it!=end; ++it)
+ {
+ listEntry(*it, false);
+ }
+
+ entry.clear();
+ listEntry(entry, true);
+
+ finished();
+}
+
+
+//#include "kio_system.moc"
diff --git a/kioslave/system/kio_system.h b/kioslave/system/kio_system.h
new file mode 100644
index 000000000..8c7c4664c
--- /dev/null
+++ b/kioslave/system/kio_system.h
@@ -0,0 +1,45 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KIO_MEDIA_H_
+#define _KIO_MEDIA_H_
+
+#include <kio/forwardingslavebase.h>
+
+#include "systemimpl.h"
+
+class SystemProtocol : public KIO::ForwardingSlaveBase
+{
+public:
+ SystemProtocol(const QCString &protocol, const QCString &pool,
+ const QCString &app);
+ virtual ~SystemProtocol();
+
+ virtual bool rewriteURL(const KURL &url, KURL &newUrl);
+
+ virtual void stat(const KURL &url);
+ virtual void listDir(const KURL &url);
+
+private:
+ void listRoot();
+
+ SystemImpl m_impl;
+};
+
+#endif
diff --git a/kioslave/system/mimetypes/Makefile.am b/kioslave/system/mimetypes/Makefile.am
new file mode 100644
index 000000000..4f58439a7
--- /dev/null
+++ b/kioslave/system/mimetypes/Makefile.am
@@ -0,0 +1,6 @@
+mimetypedir = $(kde_mimedir)/inode
+
+mimetype_DATA = system_directory.desktop
+
+
+EXTRA_DIST = $(mimetype_DATA)
diff --git a/kioslave/system/mimetypes/system_directory.desktop b/kioslave/system/mimetypes/system_directory.desktop
new file mode 100644
index 000000000..f7be931d7
--- /dev/null
+++ b/kioslave/system/mimetypes/system_directory.desktop
@@ -0,0 +1,76 @@
+[Desktop Entry]
+Icon=kfm
+Type=MimeType
+MimeType=inode/system_directory
+Comment=System Folder
+Comment[af]=Stelsel Gids
+Comment[ar]=مجلد النظام
+Comment[be]=Сістэмная тэчка
+Comment[bg]=Системна директория
+Comment[bn]=সিস্টেম ফোল্ডার
+Comment[br]=Renkell reiziad
+Comment[bs]=Sistemski direktorij
+Comment[ca]=Carpeta del sistema
+Comment[cs]=Systémová složka
+Comment[csb]=Systemòwi katalog
+Comment[da]=Systemmappe
+Comment[de]=Systemordner
+Comment[el]=Φάκελος συστήματος
+Comment[eo]=Sistema dosierujo
+Comment[es]=Carpeta del sistema
+Comment[et]=Süsteemi kataloog
+Comment[eu]=Sistemaren karpeta
+Comment[fa]=پوشۀ سیستم
+Comment[fi]=Järjestelmän kansio
+Comment[fr]=Dossier système
+Comment[fy]=Systeemmap
+Comment[ga]=Comhadlann Chórais
+Comment[gl]=Cartafol do Sistema
+Comment[he]=תיקיית מערכת
+Comment[hr]=Sistemska mapa
+Comment[hu]=Rendszermappa
+Comment[is]=Kerfismappa
+Comment[it]=Cartella di sistema
+Comment[ja]=システムフォルダ
+Comment[ka]=სისტემური საქაღალდე
+Comment[kk]=Жүйелік қапшық
+Comment[km]=ថត​ប្រព័ន្ធ
+Comment[ko]=홈 폴더
+Comment[lt]=Sistemos aplankas
+Comment[mk]=Системска папка
+Comment[ms]=Folder Sistem
+Comment[nb]=Systemmappe
+Comment[nds]=Systeemorner
+Comment[ne]=प्रणाली फोल्डर
+Comment[nl]=Systeemmap
+Comment[nn]=Systemmappe
+Comment[pa]=ਸਿਸਟਮ ਫੋਲਡਰ
+Comment[pl]=Katalog systemowy
+Comment[pt]=Pasta de Sistema
+Comment[pt_BR]=Pasta do Sistema
+Comment[ro]=Folder de sistem
+Comment[ru]=Системная папка
+Comment[rw]=Ububiko Sisitemu
+Comment[se]=Vuogádatmáhpa
+Comment[sk]=Systémový priečinok
+Comment[sl]=Sistemska mapa
+Comment[sr]=Системска фасцикла
+Comment[sr@Latn]=Sistemska fascikla
+Comment[sv]=Systemkatalog
+Comment[ta]=அமைப்பு அடைவு
+Comment[te]=వ్యవస్థ ఫొల్డర్
+Comment[tg]=Феҳрасти система
+Comment[th]=โฟลเดอร์ระบบ
+Comment[tr]=Sistem Klasörü
+Comment[tt]=Sistem Törgäge
+Comment[uk]=Системна тека
+Comment[uz]=Tizim jildi
+Comment[uz@cyrillic]=Тизим жилди
+Comment[vi]=Thư mục Hệ thống
+Comment[wa]=Ridant sistinme
+Comment[zh_CN]=系统文件夹
+Comment[zh_TW]=系統資料夾
+Patterns=
+
+X-KDE-AutoEmbed=true
+X-KDE-IsAlso=inode/directory
diff --git a/kioslave/system/system.protocol b/kioslave/system/system.protocol
new file mode 100644
index 000000000..1f5723e3e
--- /dev/null
+++ b/kioslave/system/system.protocol
@@ -0,0 +1,19 @@
+[Protocol]
+exec=kio_system
+protocol=system
+input=none
+output=filesystem
+listing=Name,Type,Size,Date,AccessDate,Access,Owner,Group,Link
+reading=true
+writing=true
+makedir=true
+deleting=true
+linking=true
+moving=true
+Icon=system
+maxInstances=4
+#TODO DocPath=kioslave/file.html
+Class=:local
+deleteRecursive=true
+fileNameUsedForCopying=Name
+
diff --git a/kioslave/system/systemimpl.cpp b/kioslave/system/systemimpl.cpp
new file mode 100644
index 000000000..f773dc20e
--- /dev/null
+++ b/kioslave/system/systemimpl.cpp
@@ -0,0 +1,276 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "systemimpl.h"
+
+#include <kdebug.h>
+#include <kglobalsettings.h>
+#include <kstandarddirs.h>
+#include <kdesktopfile.h>
+
+#include <qapplication.h>
+#include <qeventloop.h>
+#include <qdir.h>
+
+#include <sys/stat.h>
+
+SystemImpl::SystemImpl() : QObject()
+{
+ KGlobal::dirs()->addResourceType("system_entries",
+ KStandardDirs::kde_default("data") + "systemview");
+}
+
+bool SystemImpl::listRoot(QValueList<KIO::UDSEntry> &list)
+{
+ kdDebug() << "SystemImpl::listRoot" << endl;
+
+ QStringList names_found;
+ QStringList dirList = KGlobal::dirs()->resourceDirs("system_entries");
+
+ QStringList::ConstIterator dirpath = dirList.begin();
+ QStringList::ConstIterator end = dirList.end();
+ for(; dirpath!=end; ++dirpath)
+ {
+ QDir dir = *dirpath;
+ if (!dir.exists()) continue;
+
+ QStringList filenames
+ = dir.entryList( QDir::Files | QDir::Readable );
+
+
+ KIO::UDSEntry entry;
+
+ QStringList::ConstIterator filename = filenames.begin();
+ QStringList::ConstIterator endf = filenames.end();
+
+ for(; filename!=endf; ++filename)
+ {
+ if (!names_found.contains(*filename))
+ {
+ entry.clear();
+ createEntry(entry, *dirpath, *filename);
+ if ( !entry.isEmpty() )
+ {
+ list.append(entry);
+ names_found.append(*filename);
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+bool SystemImpl::parseURL(const KURL &url, QString &name, QString &path) const
+{
+ QString url_path = url.path();
+
+ int i = url_path.find('/', 1);
+ if (i > 0)
+ {
+ name = url_path.mid(1, i-1);
+ path = url_path.mid(i+1);
+ }
+ else
+ {
+ name = url_path.mid(1);
+ path = QString::null;
+ }
+
+ return name != QString::null;
+}
+
+bool SystemImpl::realURL(const QString &name, const QString &path,
+ KURL &url) const
+{
+ url = findBaseURL(name);
+ if (!url.isValid())
+ {
+ return false;
+ }
+
+ url.addPath(path);
+ return true;
+}
+
+bool SystemImpl::statByName(const QString &filename, KIO::UDSEntry& entry)
+{
+ kdDebug() << "SystemImpl::statByName" << endl;
+
+ QStringList dirList = KGlobal::dirs()->resourceDirs("system_entries");
+
+ QStringList::ConstIterator dirpath = dirList.begin();
+ QStringList::ConstIterator end = dirList.end();
+ for(; dirpath!=end; ++dirpath)
+ {
+ QDir dir = *dirpath;
+ if (!dir.exists()) continue;
+
+ QStringList filenames
+ = dir.entryList( QDir::Files | QDir::Readable );
+
+
+ QStringList::ConstIterator name = filenames.begin();
+ QStringList::ConstIterator endf = filenames.end();
+
+ for(; name!=endf; ++name)
+ {
+ if (*name==filename+".desktop")
+ {
+ createEntry(entry, *dirpath, *name);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+KURL SystemImpl::findBaseURL(const QString &filename) const
+{
+ kdDebug() << "SystemImpl::findBaseURL" << endl;
+
+ QStringList dirList = KGlobal::dirs()->resourceDirs("system_entries");
+
+ QStringList::ConstIterator dirpath = dirList.begin();
+ QStringList::ConstIterator end = dirList.end();
+ for(; dirpath!=end; ++dirpath)
+ {
+ QDir dir = *dirpath;
+ if (!dir.exists()) continue;
+
+ QStringList filenames
+ = dir.entryList( QDir::Files | QDir::Readable );
+
+
+ KIO::UDSEntry entry;
+
+ QStringList::ConstIterator name = filenames.begin();
+ QStringList::ConstIterator endf = filenames.end();
+
+ for(; name!=endf; ++name)
+ {
+ if (*name==filename+".desktop")
+ {
+ KDesktopFile desktop(*dirpath+filename+".desktop", true);
+ if ( desktop.readURL().isEmpty() )
+ {
+ KURL url;
+ url.setPath( desktop.readPath() );
+ return url;
+ }
+
+ return desktop.readURL();
+ }
+ }
+ }
+
+ return KURL();
+}
+
+
+static void addAtom(KIO::UDSEntry &entry, unsigned int ID, long l,
+ const QString &s = QString::null)
+{
+ KIO::UDSAtom atom;
+ atom.m_uds = ID;
+ atom.m_long = l;
+ atom.m_str = s;
+ entry.append(atom);
+}
+
+
+void SystemImpl::createTopLevelEntry(KIO::UDSEntry &entry) const
+{
+ entry.clear();
+ addAtom(entry, KIO::UDS_NAME, 0, ".");
+ addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);
+ addAtom(entry, KIO::UDS_ACCESS, 0555);
+ addAtom(entry, KIO::UDS_MIME_TYPE, 0, "inode/system_directory");
+ addAtom(entry, KIO::UDS_ICON_NAME, 0, "system");
+}
+
+void SystemImpl::createEntry(KIO::UDSEntry &entry,
+ const QString &directory,
+ const QString &file)
+{
+ kdDebug() << "SystemImpl::createEntry" << endl;
+
+ KDesktopFile desktop(directory+file, true);
+
+ kdDebug() << "path = " << directory << file << endl;
+
+ entry.clear();
+
+ // Ensure that we really want this entry to be displayed
+ if ( desktop.readURL().isEmpty() && desktop.readPath().isEmpty() )
+ {
+ return;
+ }
+
+ addAtom(entry, KIO::UDS_NAME, 0, desktop.readName());
+
+ QString new_filename = file;
+ new_filename.truncate(file.length()-8);
+ addAtom(entry, KIO::UDS_URL, 0, "system:/"+new_filename);
+
+ addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);
+ addAtom(entry, KIO::UDS_MIME_TYPE, 0, "inode/directory");
+
+ QString icon = desktop.readIcon();
+ QString empty_icon = desktop.readEntry("EmptyIcon");
+
+ if (!empty_icon.isEmpty())
+ {
+ KURL url = desktop.readURL();
+
+ m_lastListingEmpty = true;
+
+ KIO::ListJob *job = KIO::listDir(url, false, false);
+ connect( job, SIGNAL( entries(KIO::Job *,
+ const KIO::UDSEntryList &) ),
+ this, SLOT( slotEntries(KIO::Job *,
+ const KIO::UDSEntryList &) ) );
+ connect( job, SIGNAL( result(KIO::Job *) ),
+ this, SLOT( slotResult(KIO::Job *) ) );
+ qApp->eventLoop()->enterLoop();
+
+ if (m_lastListingEmpty) icon = empty_icon;
+ }
+
+ addAtom(entry, KIO::UDS_ICON_NAME, 0, icon);
+}
+
+void SystemImpl::slotEntries(KIO::Job *job, const KIO::UDSEntryList &list)
+{
+ if (list.size()>0)
+ {
+ job->kill(true);
+ m_lastListingEmpty = false;
+ qApp->eventLoop()->exitLoop();
+ }
+}
+
+void SystemImpl::slotResult(KIO::Job *)
+{
+ qApp->eventLoop()->exitLoop();
+}
+
+
+#include "systemimpl.moc"
diff --git a/kioslave/system/systemimpl.h b/kioslave/system/systemimpl.h
new file mode 100644
index 000000000..a06874465
--- /dev/null
+++ b/kioslave/system/systemimpl.h
@@ -0,0 +1,65 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef SYSTEMIMPL_H
+#define SYSTEMIMPL_H
+
+#include <kio/global.h>
+#include <kio/job.h>
+#include <kurl.h>
+#include <dcopobject.h>
+
+#include <qobject.h>
+#include <qstring.h>
+
+class SystemImpl : public QObject
+{
+Q_OBJECT
+public:
+ SystemImpl();
+
+ void createTopLevelEntry(KIO::UDSEntry& entry) const;
+ bool statByName(const QString &filename, KIO::UDSEntry& entry);
+
+ bool listRoot(QValueList<KIO::UDSEntry> &list);
+
+ bool parseURL(const KURL &url, QString &name, QString &path) const;
+ bool realURL(const QString &name, const QString &path, KURL &url) const;
+
+ int lastErrorCode() const { return m_lastErrorCode; }
+ QString lastErrorMessage() const { return m_lastErrorMessage; }
+
+private slots:
+ KURL findBaseURL(const QString &filename) const;
+ void slotEntries(KIO::Job *job, const KIO::UDSEntryList &list);
+ void slotResult(KIO::Job *job);
+
+private:
+ void createEntry(KIO::UDSEntry& entry, const QString &directory,
+ const QString &file);
+
+ bool m_lastListingEmpty;
+
+ /// Last error code stored in class to simplify API.
+ /// Note that this means almost no method can be const.
+ int m_lastErrorCode;
+ QString m_lastErrorMessage;
+};
+
+#endif
diff --git a/kioslave/system/testsystem.cpp b/kioslave/system/testsystem.cpp
new file mode 100644
index 000000000..95107680f
--- /dev/null
+++ b/kioslave/system/testsystem.cpp
@@ -0,0 +1,69 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "kio_system.h"
+#include "testsystem.h"
+
+#include <config.h>
+
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kcmdlineargs.h>
+
+#include <stdlib.h>
+
+static bool check(const QString& txt, QString a, QString b)
+{
+ if (a.isEmpty())
+ a = QString::null;
+ if (b.isEmpty())
+ b = QString::null;
+ if (a == b) {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "ok" << endl;
+ }
+ else {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "KO !" << endl;
+ exit(1);
+ }
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ KApplication::disableAutoDcopRegistration();
+ KCmdLineArgs::init(argc,argv,"testsystem", 0, 0, 0, 0);
+ KApplication app;
+
+ TestSystem test;
+ test.setup();
+ test.runAll();
+ kdDebug() << "All tests OK." << endl;
+ return 0; // success. The exit(1) in check() is what happens in case of failure.
+}
+
+void TestSystem::setup()
+{
+
+}
+
+void TestSystem::runAll()
+{
+
+}
+
diff --git a/kioslave/system/testsystem.h b/kioslave/system/testsystem.h
new file mode 100644
index 000000000..2418e66cb
--- /dev/null
+++ b/kioslave/system/testsystem.h
@@ -0,0 +1,34 @@
+/* This file is part of the KDE project
+ Copyright (c) 2004 Kvin Ottens <ervin ipsquad net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef TESTSYSTEM_H
+#define TESTSYSTEM_H
+
+class TestSystem
+{
+public:
+ TestSystem() {}
+ void setup();
+ void runAll();
+
+ // tests
+
+};
+
+#endif