> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Sinkronisasi Dropbox

> Izinkan pengguna menyinkronkan proyek mereka dengan sebuah folder di Dropbox mereka.

> [!NOTE]
>
> Fitur ini dikembangkan oleh [ayaka-notes/ayakaleaf-pro](https://github.com/ayaka-notes/ayakaleaf-pro). Fitur ini diperkenalkan di v6.3.1 sebagai pratinjau awal dan akan dirilis secara resmi di v6.4.0, sehingga konfigurasi dan perilakunya masih dapat berubah. Kami membutuhkan masukan Anda jika Anda mengalami masalah.

Sinkronisasi Dropbox menjaga proyek-proyek milik pengguna tetap tersinkron dengan Dropbox mereka, seperti di Overleaf Cloud: setelah pengguna menautkan akun Dropbox mereka, setiap proyek mereka muncul sebagai folder di `Apps/<your Dropbox app>/`, perubahan di Overleaf dikirim ke Dropbox, dan perubahan yang dibuat di Dropbox kembali ke Overleaf.

### Menyiapkan Sinkronisasi Dropbox

> [!WARNING]
>
> Anda perlu mengaktifkan [git-bridge](https://ayakaleaf-pro.mintlify.site/id/on-premises/configuration/overleaf-toolkit/integrations/git-integration.md) terlebih dahulu: tanpanya, pengaturan akun akan menyembunyikan bagian sinkronisasi proyek.
>
> ```dotenv title="config/overleaf.rc" theme={null}
> GIT_BRIDGE_ENABLED=true
> ```

Buat aplikasi di [Dropbox App Console](https://www.dropbox.com/developers/apps), dengan masuk menggunakan akun Dropbox yang akan menjadi pemilik aplikasi:

1. Klik **Create app**, lalu isi halaman tersebut:
   * **1. Choose an API**: pilih **Scoped access**.
   * **2. Choose the type of access you need**: pilih **App folder**, bukan **Full Dropbox**. Overleaf hanya melakukan sinkronisasi di dalam folder aplikasi.
   * **3. Name your app**: masukkan nama, misalnya `Overleaf`. Nama ini harus unik di Dropbox. Proyek setiap pengguna muncul di `Apps/<name of your app>/` di Dropbox mereka, dan nama ini adalah `DROPBOX_APP_NAME` di bawah.
   * Klik **Create app**. Aplikasi akan terbuka pada tab **Settings**.
2. Pada tab **Permissions**, di bawah **Files and folders**, centang `files.metadata.write`, `files.content.write`, dan `files.content.read`. `account_info.read` dan `files.metadata.read` ikut tercentang bersamanya dan tidak dapat dihapus centangnya. Jangan centang izin lainnya.
3. Klik **Submit** di bilah bagian bawah tab **Permissions**. **Tanpa Submit, izin tidak akan tersimpan**, dan Dropbox akan menolak menyinkronkan file bagi pengguna yang menautkan akun mereka.

![](https://mintcdn.com/ayakaleaf-pro/34P8O6kHo91beEvQ/images/on-premises/dropbox-app-permissions.png?fit=max\&auto=format\&n=34P8O6kHo91beEvQ\&q=85\&s=8e99711b1fcf03d3d1655f65fea3a6b8)

Dropbox App Console: izin yang harus dicentang, disimpan dengan Submit

4. Pada tab **Settings**, di bawah **OAuth 2**, masukkan `${OVERLEAF_SITE_URL}/user/dropbox/oauth/callback` di **Redirect URIs**, lalu **klik Add**. Mengetik URI saja tidak cukup: URI baru tersimpan setelah muncul di daftar di atas kolom tersebut.

![](https://mintcdn.com/ayakaleaf-pro/34P8O6kHo91beEvQ/images/on-premises/dropbox-app-redirect-uri.png?fit=max\&auto=format\&n=34P8O6kHo91beEvQ\&q=85\&s=d980dc4dec22a90b5bf1f7e147cfc7c0)

Dropbox App Console: masukkan redirect URI, lalu klik Add

5. Pada tab **Settings**, di bawah **Webhooks**, masukkan `${OVERLEAF_SITE_URL}/dropbox/webhook` di **Webhook URIs**, lalu **klik Add** juga. Dropbox langsung memanggilnya untuk memeriksa, sehingga Overleaf harus sudah berjalan dengan pengaturan di bawah dan dapat dijangkau dari internet (lihat [Webhook](#webhook)). Statusnya akan menampilkan **Enabled** setelah pemeriksaan berhasil.

Salin **App key** dan **App secret** (klik **Show**) dari tab **Settings**, lalu tambahkan pengaturan berikut ke file variabel lingkungan Overleaf Anda. Anda dapat menambahkan webhook (langkah 5) setelah Overleaf berjalan dengan pengaturan tersebut.

```dotenv title="config/variables.env" wrap theme={null}
# used to encrypt the user's Dropbox refresh token.
# How to generate: `openssl rand -hex 32`
DROPBOX_TOKEN_CIPHER_PASSWORD=0123456789ABCDEFG # changed to yours

# Dropbox Sync Settings
DROPBOX_ENABLED=true
DROPBOX_APP_KEY=
DROPBOX_APP_SECRET=
# the name of your Dropbox app (step 1), which is the folder name in Apps/
DROPBOX_APP_NAME=Overleaf

# OAuth callback is: ${OVERLEAF_SITE_URL}/user/dropbox/oauth/callback
# Webhook is: ${OVERLEAF_SITE_URL}/dropbox/webhook
# (Optional) DROPBOX_SYNC_PROXY_URL=http://10.0.0.1:10808
```

> [!WARNING]
>
> * Sebelum mengonfigurasi redirect URI dan webhook, pastikan `OVERLEAF_SITE_URL` sudah diatur dengan benar.
> * Dropbox menetapkan izin sebuah token saat pengguna menautkan akunnya: mengirimkan izin tidak mengubah token yang sudah ada. Pengguna yang menautkan akun sebelum izin dikirimkan, atau sebelum Anda mengubahnya, harus memutuskan tautan lalu menautkan akun Dropbox mereka kembali.
> * Aplikasi baru berstatus **Development**. Jika **Development users** pada tab **Settings** menampilkan **Only you**, hanya akun Dropbox Anda yang dapat ditautkan: klik **Enable additional users** agar pengguna lain dapat menautkan akun mereka. Setelah itu, akan ditampilkan jumlah pengguna yang telah menautkan akun, misalnya `1 / 500`: **aplikasi Development menampung paling banyak 500 pengguna**. Untuk lebih banyak pengguna, klik **Apply for production**, dan Dropbox akan meninjau aplikasi tersebut.

Jika Anda berada di wilayah dengan akses jaringan yang dibatasi, Anda mungkin perlu mengonfigurasi proxy untuk mengakses Dropbox. Atur variabel lingkungan berikut: `DROPBOX_SYNC_PROXY_URL=http://10.0.0.1:10808`. Proxy tersebut harus berupa forward proxy HTTP/HTTPS standar, dan tidak boleh menggunakan `127.0.0.1`.

#### Create the database indexes

Jalankan ini sekali, sebelum pengguna menautkan akun Dropbox mereka. Indeks yang digunakan oleh sinkronisasi Dropbox tidak dibuat secara otomatis, sehingga tanpa indeks tersebut setiap pencarian sinkronisasi akan memindai seluruh koleksi.

Pengguna Toolkit: jalankan `bin/mongo`. Pengguna Docker Compose: jalankan `docker compose exec mongo mongosh sharelatex`. Lalu tempelkan:

```js theme={null}
db.dropboxEntities.createIndex(
  { 'overleaf.userId': 1, 'dropbox.id': 1 },
  { name: 'overleaf.userId_1_dropbox.id_1', unique: true,
    partialFilterExpression: { 'dropbox.id': { $exists: true } } })
db.dropboxEntities.createIndex(
  { 'overleaf.userId': 1, 'overleaf.id': 1 },
  { name: 'overleaf.userId_1_overleaf.id_1', unique: true,
    partialFilterExpression: { 'overleaf.id': { $exists: true } } })
db.dropboxEntities.createIndex({ 'overleaf.userId': 1, 'dropbox.pathLower': 'hashed' })
db.dropboxProjects.createIndex({ userId: 1, projectId: 1 }, { name: 'projectId_userId_1', unique: true })
db.dropboxProjects.createIndex({ userId: 1, dropboxId: 1 }, { name: 'userId_dropboxId_1', unique: true })
```

Menjalankannya lagi tidak berbahaya: MongoDB melewati indeks yang sudah ada.

> [!CAUTION]
>
> Jangan menjalankan migrasi `dropboxEntities` dari `tools/migrations` sebagai gantinya: `20220825160708_recreate_dropboxEntities` menghapus koleksi tersebut, yang akan menghapus status sinkronisasi setiap pengguna.

### Webhook

Dropbox memberi tahu Overleaf tentang perubahan di Dropbox melalui webhook, sehingga perubahan tersebut muncul di Overleaf dalam hitungan detik. Webhook mengarah ke alamat situs Anda, `${OVERLEAF_SITE_URL}/dropbox/webhook`, tanpa memerlukan port tambahan, tetapi **Dropbox harus dapat menjangkaunya dari internet**. Saat Anda menambahkannya di App Console, Dropbox langsung memeriksanya.

Tanpa webhook, misalnya pada server yang tidak dapat dijangkau Dropbox, perubahan di Overleaf tetap dikirim ke Dropbox, tetapi perubahan di Dropbox hanya kembali saat pengguna mengklik *sync this project now* di dialog Dropbox pada editor.

### Cara kerja sinkronisasi

* **Penautan**: saat pengguna menautkan akun Dropbox mereka, proyek yang mereka miliki dikirim ke Dropbox. Proyek yang dibagikan kepada mereka muncul di Dropbox pada perubahan berikutnya.
* **Overleaf ke Dropbox**: file baru, penggantian nama, pemindahan, penghapusan, dan penggantian nama proyek langsung dikirim. Suntingan di editor dikirim setelah Overleaf menyimpannya ke penyimpanannya, beberapa menit setelah semua orang meninggalkan proyek. Untuk mengirimnya lebih awal, klik *sync this project now* di dialog Dropbox pada editor (sekali per menit).
* **Dropbox ke Overleaf**: file baru dan yang diubah, folder baru, serta penghapusan di dalam folder proyek diterapkan ke proyek. Folder baru di tingkat teratas folder aplikasi menjadi proyek baru. Menghapus folder proyek di Dropbox akan menandai proyek tersebut sebagai terhapus di Overleaf.
* **Konflik**: jika sebuah file berubah di kedua tempat pada saat yang sama, perubahan terakhir yang berlaku. Dropbox mungkin menyimpan versi lainnya sebagai *conflicted copy*.
* **Kolaborator**: kolaborator yang menautkan Dropbox mereka mendapatkan proyek yang dibagikan kepada mereka. Peninjau dan pengguna dengan akses hanya-lihat mendapatkan proyek tersebut, tetapi perubahan mereka di Dropbox tidak disinkronkan kembali ke Overleaf.
* **File yang diabaikan**: file yang tidak disinkronkan Overleaf, seperti hasil build (`.aux`, `.log`, …), `.DS_Store`, atau virtual environment Python, hanya tetap berada di Dropbox.

### Q\&A

> [accordion] Mengapa pengguna tidak dapat menautkan akun Dropbox mereka?
>
> **Jawaban:**
>
> * Folder Dropbox yang belum dikenal Overleaf dicocokkan dengan proyek berdasarkan namanya, sehingga pengguna yang proyek-proyeknya memiliki nama yang sama akan diminta untuk mengganti namanya terlebih dahulu. Nama dibandingkan tanpa memperhatikan huruf besar/kecil, dan proyek yang diarsipkan maupun yang ada di tempat sampah juga diperhitungkan.
> * Satu akun Dropbox hanya dapat ditautkan ke satu akun Overleaf.

> [accordion] Mengapa tautan akun Dropbox diputus?
>
> **Jawaban:** Overleaf memutuskan tautan akun Dropbox ketika Dropbox menolak tokennya (misalnya setelah pengguna menghapus aplikasi di Dropbox), ketika Dropbox penuh, atau ketika Dropbox menangguhkan akun tersebut. Notifikasi di daftar proyek memberi tahu pengguna penyebab mana yang terjadi, hingga mereka menautkan akun tersebut kembali. Pengguna dapat menautkannya kembali setelah masalah teratasi.

> [accordion] Bisakah saya mengganti nama folder proyek di Dropbox?
>
> **Jawaban:** Sebaiknya ganti nama proyek di Overleaf: foldernya di Dropbox juga akan ikut diganti namanya. Bagi Overleaf, mengganti nama folder di Dropbox berarti menghapus folder proyek dan membuat folder baru, sehingga proyek lama ditandai sebagai terhapus dan proyek baru dibuat dari file-file tersebut.

> [accordion] Mengapa beberapa folder proyek diberi nomor, seperti 'Thesis (1)'?
>
> **Jawaban:** Setiap proyek memiliki foldernya sendiri, juga ketika dua proyek memiliki nama yang sama. Dropbox tidak dapat menyimpan dua folder dengan nama yang sama, sehingga Dropbox menambahkan nomor pada folder yang dibuat belakangan. Nomor tersebut bergantung pada nama mana yang masih tersedia di Dropbox saat itu, bukan pada proyek mana yang lebih lama. Overleaf mengetahui folder setiap proyek, sehingga perubahan tidak pernah dikirim ke folder proyek lain yang bernama sama.
>
> Proyek yang diunggah dengan nama yang sudah dipakai juga diberi nama dengan nomor di Overleaf, misalnya "Thesis (1)".

> [accordion] Apa yang terjadi ketika saya menghapus folder proyek di Dropbox?
>
> **Jawaban:**
>
> * Jika tidak ada proyek lain yang memiliki nama folder tersebut, proyek ditandai sebagai terhapus di Overleaf. File dan riwayatnya tetap disimpan.
> * Jika beberapa proyek memiliki nama tersebut, Overleaf tidak dapat mengetahui proyek mana pemilik folder itu. Overleaf memutuskan tautan akun Dropbox dan menampilkan notifikasi yang meminta Anda mengganti nama proyek-proyek tersebut. Berikan nama yang berbeda pada proyek sebelum menghapus foldernya di Dropbox.
> * Folder bernomor, seperti "Thesis (1)", tidak cocok dengan nama proyek mana pun, sehingga menghapusnya tidak mengubah proyek di Overleaf. Klik *sync this project now* di dialog Dropbox pada editor untuk mengirim proyek ke Dropbox lagi.

> [accordion] Apa yang terjadi di Dropbox ketika saya menghapus proyek di Overleaf?
>
> **Jawaban:** Tidak ada, foldernya tetap berada di Dropbox. Hapus folder tersebut di Dropbox jika Anda tidak lagi membutuhkannya.

> [accordion] Apa yang terjadi pada perubahan di Dropbox saat proyek diarsipkan atau berada di tempat sampah?
>
> **Jawaban:** Perubahan tersebut tidak diterapkan ke proyek, dan memulihkan proyek juga tidak akan memasukkannya. Setelah pemulihan, Overleaf berhenti mengirim perubahannya untuk file-file yang sementara itu diubah di Dropbox, sehingga kedua sisi berbeda.
>
> Untuk menyinkronkan kembali file seperti itu, simpan sekali lagi di Dropbox. Overleaf kemudian mengambil versi Dropbox: perubahan yang dibuat pada file tersebut di Overleaf sejak pemulihan akan digantikan, dan tetap ada di riwayat proyek. Pulihkan proyek sebelum Anda mengubahnya di Dropbox.

> [accordion] Mengapa tautan Dropbox di editor membuka halaman beranda Dropbox?
>
> **Jawaban:** Tautan tersebut mengarah ke `Apps/<app folder>/<project>` di dropbox.com, seperti di Overleaf Cloud. Ketika Dropbox menampilkan folder `Apps` dengan nama terjemahan, misalnya `应用` dalam bahasa Tionghoa, tautan tidak menemukan folder tersebut dan Dropbox membuka halaman berandanya sebagai gantinya. Buka folder proyek dari folder `Apps` yang telah diterjemahkan di Dropbox.

> [accordion] Mengapa beberapa file proyek tidak ada di Dropbox?
>
> **Jawaban:** Perubahan yang dibuat saat layanan sinkronisasi tidak berjalan, misalnya saat layanan dimulai ulang, tidak dikirim ke Dropbox setelahnya. Klik *sync this project now* di dialog Dropbox pada editor: tindakan ini mengirim ulang seluruh proyek.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.