1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 #ifndef SEAF_REPO_MGR_H 4 #define SEAF_REPO_MGR_H 5 6 #include "seafile-object.h" 7 #include "commit-mgr.h" 8 #include "branch-mgr.h" 9 10 typedef enum RepoStatus { 11 REPO_STATUS_NORMAL, 12 REPO_STATUS_READ_ONLY, 13 N_REPO_STATUS, 14 } RepoStatus; 15 16 struct _SeafRepoManager; 17 typedef struct _SeafRepo SeafRepo; 18 19 typedef struct SeafVirtRepo { 20 char repo_id[37]; 21 char origin_repo_id[37]; 22 char *path; 23 char base_commit[41]; 24 } SeafVirtRepo; 25 26 struct _SeafRepo { 27 struct _SeafRepoManager *manager; 28 29 gchar id[37]; 30 gchar *name; 31 gchar *desc; 32 gchar *last_modifier; 33 gboolean encrypted; 34 int enc_version; 35 gchar magic[65]; /* hash(repo_id + passwd), key stretched. */ 36 gchar random_key[97]; 37 gchar salt[65]; 38 gboolean no_local_history; 39 gint64 last_modify; 40 gint64 size; 41 gint64 file_count; 42 43 int status; 44 45 SeafBranch *head; 46 gchar root_id[41]; 47 48 gboolean is_corrupted; 49 gboolean repaired; 50 int ref_cnt; 51 52 SeafVirtRepo *virtual_info; 53 54 int version; 55 /* Used to access fs and block sotre. 56 * This id is different from repo_id when this repo is virtual. 57 * Virtual repos share fs and block store with its origin repo. 58 * However, commit store for each repo is always independent. 59 * So always use repo_id to access commit store. 60 */ 61 gchar store_id[37]; 62 }; 63 64 gboolean is_repo_id_valid (const char *id); 65 66 SeafRepo* 67 seaf_repo_new (const char *id, const char *name, const char *desc); 68 69 void 70 seaf_repo_free (SeafRepo *repo); 71 72 void 73 seaf_repo_ref (SeafRepo *repo); 74 75 void 76 seaf_repo_unref (SeafRepo *repo); 77 78 int 79 seaf_repo_set_head (SeafRepo *repo, SeafBranch *branch); 80 81 /* Update repo name, desc, magic etc from commit. 82 */ 83 void 84 seaf_repo_from_commit (SeafRepo *repo, SeafCommit *commit); 85 86 void 87 seaf_fill_repo_obj_from_commit (GList **repos); 88 89 /* Update repo-related fields to commit. 90 */ 91 void 92 seaf_repo_to_commit (SeafRepo *repo, SeafCommit *commit); 93 94 /* 95 * Returns a list of all commits belongs to the repo. 96 * The commits in the repos are all unique. 97 */ 98 GList * 99 seaf_repo_get_commits (SeafRepo *repo); 100 101 GList * 102 seaf_repo_diff (SeafRepo *repo, const char *arg1, const char *arg2, int fold_dir_results, char **error); 103 104 typedef struct _SeafRepoManager SeafRepoManager; 105 typedef struct _SeafRepoManagerPriv SeafRepoManagerPriv; 106 107 struct _SeafRepoManager { 108 struct _SeafileSession *seaf; 109 110 SeafRepoManagerPriv *priv; 111 }; 112 113 SeafRepoManager* 114 seaf_repo_manager_new (struct _SeafileSession *seaf); 115 116 int 117 seaf_repo_manager_init (SeafRepoManager *mgr); 118 119 int 120 seaf_repo_manager_start (SeafRepoManager *mgr); 121 122 /* 123 * Repo Management functions. 124 */ 125 126 int 127 seaf_repo_manager_add_repo (SeafRepoManager *mgr, SeafRepo *repo); 128 129 int 130 seaf_repo_manager_del_repo (SeafRepoManager *mgr, 131 const char *repo_id, 132 GError **error); 133 134 int 135 seaf_repo_manager_del_virtual_repo (SeafRepoManager *mgr, 136 const char *repo_id); 137 138 SeafRepo* 139 seaf_repo_manager_get_repo (SeafRepoManager *manager, const gchar *id); 140 141 /* Return repo object even if it's corrupted. */ 142 SeafRepo* 143 seaf_repo_manager_get_repo_ex (SeafRepoManager *manager, const gchar *id); 144 145 gboolean 146 seaf_repo_manager_repo_exists (SeafRepoManager *manager, const gchar *id); 147 148 GList* 149 seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, 150 const gchar *order_by); 151 152 gint64 153 seaf_repo_manager_count_repos (SeafRepoManager *mgr, GError **error); 154 155 GList* 156 seaf_repo_manager_get_trash_repo_list (SeafRepoManager *mgr, 157 int start, 158 int limit, 159 GError **error); 160 161 GList * 162 seaf_repo_manager_get_trash_repos_by_owner (SeafRepoManager *mgr, 163 const char *owner, 164 GError **error); 165 166 int 167 seaf_repo_manager_del_repo_from_trash (SeafRepoManager *mgr, 168 const char *repo_id, 169 GError **error); 170 171 /* Remove all entries in the repo trash. */ 172 int 173 seaf_repo_manager_empty_repo_trash (SeafRepoManager *mgr, GError **error); 174 175 int 176 seaf_repo_manager_empty_repo_trash_by_owner (SeafRepoManager *mgr, 177 const char *owner, 178 GError **error); 179 180 int 181 seaf_repo_manager_restore_repo_from_trash (SeafRepoManager *mgr, 182 const char *repo_id, 183 GError **error); 184 185 GList * 186 seaf_repo_manager_get_repo_id_list (SeafRepoManager *mgr); 187 188 int 189 seaf_repo_manager_branch_repo_unmap (SeafRepoManager *manager, SeafBranch *branch); 190 191 /* 192 * Repo properties functions. 193 */ 194 195 #define MAX_REPO_TOKEN 64 196 #define DEFAULT_REPO_TOKEN "default" 197 198 char * 199 seaf_repo_manager_get_email_by_token (SeafRepoManager *manager, 200 const char *repo_id, 201 const char *token); 202 char * 203 seaf_repo_manager_generate_repo_token (SeafRepoManager *mgr, 204 const char *repo_id, 205 const char *email, 206 GError **error); 207 208 int 209 seaf_repo_manager_add_token_peer_info (SeafRepoManager *mgr, 210 const char *token, 211 const char *peer_id, 212 const char *peer_ip, 213 const char *peer_name, 214 gint64 sync_time, 215 const char *client_ver); 216 217 int 218 seaf_repo_manager_update_token_peer_info (SeafRepoManager *mgr, 219 const char *token, 220 const char *peer_ip, 221 gint64 sync_time, 222 const char *client_ver); 223 224 gboolean 225 seaf_repo_manager_token_peer_info_exists (SeafRepoManager *mgr, 226 const char *token); 227 228 int 229 seaf_repo_manager_delete_token (SeafRepoManager *mgr, 230 const char *repo_id, 231 const char *token, 232 const char *user, 233 GError **error); 234 235 GList * 236 seaf_repo_manager_list_repo_tokens (SeafRepoManager *mgr, 237 const char *repo_id, 238 GError **error); 239 GList * 240 seaf_repo_manager_list_repo_tokens_by_email (SeafRepoManager *mgr, 241 const char *email, 242 GError **error); 243 int 244 seaf_repo_manager_delete_repo_tokens_by_peer_id (SeafRepoManager *mgr, 245 const char *email, 246 const char *peer_id, 247 GList **tokens, 248 GError **error); 249 250 int 251 seaf_repo_manager_delete_repo_tokens_by_email (SeafRepoManager *mgr, 252 const char *email, 253 GError **error); 254 255 gint64 256 seaf_repo_manager_get_repo_size (SeafRepoManager *mgr, const char *repo_id); 257 258 int 259 seaf_repo_manager_set_repo_history_limit (SeafRepoManager *mgr, 260 const char *repo_id, 261 int days); 262 263 /* 264 * > 0: keep a period of history; 265 * = 0: don't keep history; 266 * < 0: keep full history. 267 */ 268 int 269 seaf_repo_manager_get_repo_history_limit (SeafRepoManager *mgr, 270 const char *repo_id); 271 272 int 273 seaf_repo_manager_set_repo_valid_since (SeafRepoManager *mgr, 274 const char *repo_id, 275 gint64 timestamp); 276 277 gint64 278 seaf_repo_manager_get_repo_valid_since (SeafRepoManager *mgr, 279 const char *repo_id); 280 281 /* 282 * Return the timestamp to stop traversing history. 283 * Returns > 0 if traverse a period of history; 284 * Returns = 0 if only traverse the head commit; 285 * Returns < 0 if traverse full history. 286 */ 287 gint64 288 seaf_repo_manager_get_repo_truncate_time (SeafRepoManager *mgr, 289 const char *repo_id); 290 291 /* 292 * Repo Operations. 293 */ 294 295 int 296 seaf_repo_manager_revert_on_server (SeafRepoManager *mgr, 297 const char *repo_id, 298 const char *commit_id, 299 const char *user_name, 300 GError **error); 301 302 /** 303 * Add a new file in a repo. 304 * The content of the file is stored in a temporary file. 305 * @repo_id: id of the repo 306 * @temp_file_path: path of the temporary file 307 * @parent_dir: the directory to add this file 308 * @file_name: the name of the new file 309 * @user: author of this operation 310 */ 311 int 312 seaf_repo_manager_post_file (SeafRepoManager *mgr, 313 const char *repo_id, 314 const char *temp_file_path, 315 const char *parent_dir, 316 const char *file_name, 317 const char *user, 318 GError **error); 319 320 int 321 seaf_repo_manager_post_multi_files (SeafRepoManager *mgr, 322 const char *repo_id, 323 const char *parent_dir, 324 const char *filenames_json, 325 const char *paths_json, 326 const char *user, 327 int replace_existed, 328 char **new_ids, 329 char **task_id, 330 GError **error); 331 332 /* int */ 333 /* seaf_repo_manager_post_file_blocks (SeafRepoManager *mgr, */ 334 /* const char *repo_id, */ 335 /* const char *parent_dir, */ 336 /* const char *file_name, */ 337 /* const char *blockids_json, */ 338 /* const char *paths_json, */ 339 /* const char *user, */ 340 /* gint64 file_size, */ 341 /* int replace_existed, */ 342 /* char **new_id, */ 343 /* GError **error); */ 344 345 int 346 seaf_repo_manager_post_blocks (SeafRepoManager *mgr, 347 const char *repo_id, 348 const char *blockids_json, 349 const char *paths_json, 350 const char *user, 351 GError **error); 352 353 int 354 seaf_repo_manager_commit_file_blocks (SeafRepoManager *mgr, 355 const char *repo_id, 356 const char *parent_dir, 357 const char *file_name, 358 const char *blockids_json, 359 const char *user, 360 gint64 file_size, 361 int replace_existed, 362 char **new_id, 363 GError **error); 364 365 int 366 seaf_repo_manager_post_empty_file (SeafRepoManager *mgr, 367 const char *repo_id, 368 const char *parent_dir, 369 const char *new_file_name, 370 const char *user, 371 GError **error); 372 373 int 374 seaf_repo_manager_post_dir (SeafRepoManager *mgr, 375 const char *repo_id, 376 const char *parent_dir, 377 const char *new_dir_name, 378 const char *user, 379 GError **error); 380 381 int 382 seaf_repo_manager_mkdir_with_parents (SeafRepoManager *mgr, 383 const char *repo_id, 384 const char *parent_dir, 385 const char *new_dir_path, 386 const char *user, 387 GError **error); 388 389 /** 390 * Update an existing file in a repo 391 * @params: same as seaf_repo_manager_post_file 392 * @head_id: the commit id for the original file version. 393 * It's optional. If it's NULL, the current repo head will be used. 394 * @new_file_id: The return location of the new file id 395 */ 396 int 397 seaf_repo_manager_put_file (SeafRepoManager *mgr, 398 const char *repo_id, 399 const char *temp_file_path, 400 const char *parent_dir, 401 const char *file_name, 402 const char *user, 403 const char *head_id, 404 char **new_file_id, 405 GError **error); 406 407 /* int */ 408 /* seaf_repo_manager_put_file_blocks (SeafRepoManager *mgr, */ 409 /* const char *repo_id, */ 410 /* const char *parent_dir, */ 411 /* const char *file_name, */ 412 /* const char *blockids_json, */ 413 /* const char *paths_json, */ 414 /* const char *user, */ 415 /* const char *head_id, */ 416 /* gint64 file_size, */ 417 /* char **new_file_id, */ 418 /* GError **error); */ 419 420 int 421 seaf_repo_manager_del_file (SeafRepoManager *mgr, 422 const char *repo_id, 423 const char *parent_dir, 424 const char *file_name, 425 const char *user, 426 GError **error); 427 428 SeafileCopyResult * 429 seaf_repo_manager_copy_file (SeafRepoManager *mgr, 430 const char *src_repo_id, 431 const char *src_dir, 432 const char *src_filename, 433 const char *dst_repo_id, 434 const char *dst_dir, 435 const char *dst_filename, 436 const char *user, 437 int need_progress, 438 int synchronous, 439 GError **error); 440 441 SeafileCopyResult * 442 seaf_repo_manager_copy_multiple_files (SeafRepoManager *mgr, 443 const char *src_repo_id, 444 const char *src_dir, 445 const char *src_filenames, 446 const char *dst_repo_id, 447 const char *dst_dir, 448 const char *dst_filenames, 449 const char *user, 450 int need_progress, 451 int synchronous, 452 GError **error); 453 454 SeafileCopyResult * 455 seaf_repo_manager_move_file (SeafRepoManager *mgr, 456 const char *src_repo_id, 457 const char *src_dir, 458 const char *src_filename, 459 const char *dst_repo_id, 460 const char *dst_dir, 461 const char *dst_filename, 462 int replace, 463 const char *user, 464 int need_progress, 465 int synchronous, 466 GError **error); 467 468 SeafileCopyResult * 469 seaf_repo_manager_move_multiple_files (SeafRepoManager *mgr, 470 const char *src_repo_id, 471 const char *src_dir, 472 const char *src_filenames, 473 const char *dst_repo_id, 474 const char *dst_dir, 475 const char *dst_filenames, 476 int replace, 477 const char *user, 478 int need_progress, 479 int synchronous, 480 GError **error); 481 482 int 483 seaf_repo_manager_rename_file (SeafRepoManager *mgr, 484 const char *repo_id, 485 const char *parent_dir, 486 const char *oldname, 487 const char *newname, 488 const char *user, 489 GError **error); 490 491 int 492 seaf_repo_manager_is_valid_filename (SeafRepoManager *mgr, 493 const char *repo_id, 494 const char *filename, 495 GError **error); 496 497 char * 498 seaf_repo_manager_create_new_repo (SeafRepoManager *mgr, 499 const char *repo_name, 500 const char *repo_desc, 501 const char *owner_email, 502 const char *passwd, 503 int enc_version, 504 GError **error); 505 506 char * 507 seaf_repo_manager_create_enc_repo (SeafRepoManager *mgr, 508 const char *repo_id, 509 const char *repo_name, 510 const char *repo_desc, 511 const char *owner_email, 512 const char *magic, 513 const char *random_key, 514 const char *salt, 515 int enc_version, 516 GError **error); 517 518 /* Give a repo and a path in this repo, returns a list of commits, where every 519 * commit contains a unique version of the file. The commits are sorted in 520 * ascending order of commit time. */ 521 GList * 522 seaf_repo_manager_list_file_revisions (SeafRepoManager *mgr, 523 const char *repo_id, 524 const char *start_commit_id, 525 const char *path, 526 int limit, 527 gboolean got_latest, 528 gboolean got_second, 529 GError **error); 530 531 GList * 532 seaf_repo_manager_calc_files_last_modified (SeafRepoManager *mgr, 533 const char *repo_id, 534 const char *parent_dir, 535 int limit, 536 GError **error); 537 538 int 539 seaf_repo_manager_revert_file (SeafRepoManager *mgr, 540 const char *repo_id, 541 const char *commit_id, 542 const char *path, 543 const char *user, 544 GError **error); 545 546 int 547 seaf_repo_manager_revert_dir (SeafRepoManager *mgr, 548 const char *repo_id, 549 const char *old_commit_id, 550 const char *dir_path, 551 const char *user, 552 GError **error); 553 554 /* 555 * Return deleted files/dirs. 556 */ 557 GList * 558 seaf_repo_manager_get_deleted_entries (SeafRepoManager *mgr, 559 const char *repo_id, 560 int show_days, 561 const char *path, 562 const char *scan_stat, 563 int limit, 564 GError **error); 565 566 /* 567 * Set the dir_id of @dir_path to @new_dir_id. 568 * @new_commit_id: The new head commit id after the update. 569 */ 570 int 571 seaf_repo_manager_update_dir (SeafRepoManager *mgr, 572 const char *repo_id, 573 const char *dir_path, 574 const char *new_dir_id, 575 const char *user, 576 const char *head_id, 577 char *new_commit_id, 578 GError **error); 579 580 /* 581 * Permission related functions. 582 */ 583 584 /* Owner functions. */ 585 586 int 587 seaf_repo_manager_set_repo_owner (SeafRepoManager *mgr, 588 const char *repo_id, 589 const char *email); 590 591 char * 592 seaf_repo_manager_get_repo_owner (SeafRepoManager *mgr, 593 const char *repo_id); 594 595 GList * 596 seaf_repo_manager_get_orphan_repo_list (SeafRepoManager *mgr); 597 598 /* TODO: add start and limit. */ 599 /* Get repos owned by this user. 600 */ 601 GList * 602 seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr, 603 const char *email, 604 int ret_corrupted, 605 int start, 606 int limit, 607 gboolean *db_err); 608 GList * 609 seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name); 610 611 GList * 612 seaf_repo_manager_get_repo_ids_by_owner (SeafRepoManager *mgr, 613 const char *email); 614 615 /* Group repos. */ 616 617 int 618 seaf_repo_manager_add_group_repo (SeafRepoManager *mgr, 619 const char *repo_id, 620 int group_id, 621 const char *owner, 622 const char *permission, 623 GError **error); 624 int 625 seaf_repo_manager_del_group_repo (SeafRepoManager *mgr, 626 const char *repo_id, 627 int group_id, 628 GError **error); 629 630 GList * 631 seaf_repo_manager_get_groups_by_repo (SeafRepoManager *mgr, 632 const char *repo_id, 633 GError **error); 634 635 typedef struct GroupPerm { 636 int group_id; 637 char permission[16]; 638 } GroupPerm; 639 640 GList * 641 seaf_repo_manager_get_group_perm_by_repo (SeafRepoManager *mgr, 642 const char *repo_id, 643 GError **error); 644 645 int 646 seaf_repo_manager_set_group_repo_perm (SeafRepoManager *mgr, 647 const char *repo_id, 648 int group_id, 649 const char *permission, 650 GError **error); 651 652 char * 653 seaf_repo_manager_get_group_repo_owner (SeafRepoManager *mgr, 654 const char *repo_id, 655 GError **error); 656 657 GList * 658 seaf_repo_manager_get_group_repoids (SeafRepoManager *mgr, 659 int group_id, 660 GError **error); 661 662 GList * 663 seaf_repo_manager_get_repos_by_group (SeafRepoManager *mgr, 664 int group_id, 665 GError **error); 666 667 GList * 668 seaf_repo_manager_get_group_repos_by_owner (SeafRepoManager *mgr, 669 const char *owner, 670 GError **error); 671 672 int 673 seaf_repo_manager_remove_group_repos (SeafRepoManager *mgr, 674 int group_id, 675 const char *owner, 676 GError **error); 677 678 /* Inner public repos */ 679 680 int 681 seaf_repo_manager_set_inner_pub_repo (SeafRepoManager *mgr, 682 const char *repo_id, 683 const char *permission); 684 685 int 686 seaf_repo_manager_unset_inner_pub_repo (SeafRepoManager *mgr, 687 const char *repo_id); 688 689 gboolean 690 seaf_repo_manager_is_inner_pub_repo (SeafRepoManager *mgr, 691 const char *repo_id); 692 693 GList * 694 seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr, gboolean *db_err); 695 696 gint64 697 seaf_repo_manager_count_inner_pub_repos (SeafRepoManager *mgr); 698 699 GList * 700 seaf_repo_manager_list_inner_pub_repos_by_owner (SeafRepoManager *mgr, 701 const char *user); 702 703 char * 704 seaf_repo_manager_get_inner_pub_repo_perm (SeafRepoManager *mgr, 705 const char *repo_id); 706 707 /* 708 * Comprehensive repo permission checker. 709 * It checks if @user have permission to access @repo_id. 710 */ 711 char * 712 seaf_repo_manager_check_permission (SeafRepoManager *mgr, 713 const char *repo_id, 714 const char *user, 715 GError **error); 716 717 GList * 718 seaf_repo_manager_list_dir_with_perm (SeafRepoManager *mgr, 719 const char *repo_id, 720 const char *dir_path, 721 const char *dir_id, 722 const char *user, 723 int offset, 724 int limit, 725 GError **error); 726 727 /* Web access permission. */ 728 729 int 730 seaf_repo_manager_set_access_property (SeafRepoManager *mgr, const char *repo_id, 731 const char *ap); 732 733 char * 734 seaf_repo_manager_query_access_property (SeafRepoManager *mgr, const char *repo_id); 735 736 /* Decrypted repo token cache. */ 737 738 void 739 seaf_repo_manager_add_decrypted_token (SeafRepoManager *mgr, 740 const char *encrypted_token, 741 const char *session_key, 742 const char *decrypted_token); 743 744 char * 745 seaf_repo_manager_get_decrypted_token (SeafRepoManager *mgr, 746 const char *encrypted_token, 747 const char *session_key); 748 749 /* Virtual repo related. */ 750 751 char * 752 seaf_repo_manager_create_virtual_repo (SeafRepoManager *mgr, 753 const char *origin_repo_id, 754 const char *path, 755 const char *repo_name, 756 const char *repo_desc, 757 const char *owner, 758 const char *passwd, 759 GError **error); 760 761 SeafVirtRepo * 762 seaf_repo_manager_get_virtual_repo_info (SeafRepoManager *mgr, 763 const char *repo_id); 764 765 GList * 766 seaf_repo_manager_get_virtual_info_by_origin (SeafRepoManager *mgr, 767 const char *origin_repo); 768 769 void 770 seaf_virtual_repo_info_free (SeafVirtRepo *vinfo); 771 772 gboolean 773 seaf_repo_manager_is_virtual_repo (SeafRepoManager *mgr, const char *repo_id); 774 775 char * 776 seaf_repo_manager_get_virtual_repo_id (SeafRepoManager *mgr, 777 const char *origin_repo, 778 const char *path, 779 const char *owner); 780 781 GList * 782 seaf_repo_manager_get_virtual_repos_by_owner (SeafRepoManager *mgr, 783 const char *owner, 784 GError **error); 785 786 GList * 787 seaf_repo_manager_get_virtual_repo_ids_by_origin (SeafRepoManager *mgr, 788 const char *origin_repo); 789 790 /* 791 * if @repo_id is a virtual repo, try to merge with origin; 792 * if not, try to merge with its virtual repos. 793 */ 794 int 795 seaf_repo_manager_merge_virtual_repo (SeafRepoManager *mgr, 796 const char *repo_id, 797 const char *exclude_repo); 798 799 /* 800 * Check each virtual repo of @origin_repo_id, if the path corresponds to it 801 * doesn't exist, delete the virtual repo. 802 */ 803 void 804 seaf_repo_manager_cleanup_virtual_repos (SeafRepoManager *mgr, 805 const char *origin_repo_id); 806 807 int 808 seaf_repo_manager_init_merge_scheduler (); 809 810 GList * 811 seaf_repo_manager_get_shared_users_for_subdir (SeafRepoManager *mgr, 812 const char *repo_id, 813 const char *path, 814 const char *from_user, 815 GError **error); 816 817 GList * 818 seaf_repo_manager_get_shared_groups_for_subdir (SeafRepoManager *mgr, 819 const char *repo_id, 820 const char *path, 821 const char *from_user, 822 GError **error); 823 int 824 seaf_repo_manager_edit_repo (const char *repo_id, 825 const char *name, 826 const char *description, 827 const char *user, 828 GError **error); 829 830 gint64 831 seaf_get_total_file_number (GError **error); 832 833 gint64 834 seaf_get_total_storage (GError **error); 835 836 int 837 seaf_repo_manager_add_upload_tmp_file (SeafRepoManager *mgr, 838 const char *repo_id, 839 const char *file_path, 840 const char *tmp_file, 841 GError **error); 842 843 int 844 seaf_repo_manager_del_upload_tmp_file (SeafRepoManager *mgr, 845 const char *repo_id, 846 const char *file_path, 847 GError **error); 848 849 char * 850 seaf_repo_manager_get_upload_tmp_file (SeafRepoManager *mgr, 851 const char *repo_id, 852 const char *file_path, 853 GError **error); 854 855 gint64 856 seaf_repo_manager_get_upload_tmp_file_offset (SeafRepoManager *mgr, 857 const char *repo_id, 858 const char *file_path, 859 GError **error); 860 861 void 862 seaf_repo_manager_update_repo_info (SeafRepoManager *mgr, 863 const char *repo_id, 864 const char *head_commit_id); 865 866 int 867 set_repo_commit_to_db (const char *repo_id, const char *repo_name, gint64 update_time, 868 int version, gboolean is_encrypted, const char *last_modifier); 869 char * 870 seaf_get_trash_repo_owner (const char *repo_id); 871 872 GObject * 873 seaf_get_group_shared_repo_by_path (SeafRepoManager *mgr, 874 const char *repo_id, 875 const char *path, 876 int group_id, 877 gboolean is_org, 878 GError **error); 879 880 GList * 881 seaf_get_group_repos_by_user (SeafRepoManager *mgr, 882 const char *user, 883 int org_id, 884 GError **error); 885 886 int 887 seaf_repo_manager_set_subdir_group_perm_by_path (SeafRepoManager *mgr, 888 const char *repo_id, 889 const char *username, 890 int group_id, 891 const char *permission, 892 const char *path); 893 894 int 895 post_files_and_gen_commit (GList *filenames, 896 SeafRepo *repo, 897 const char *user, 898 char **ret_json, 899 int replace_existed, 900 const char *canon_path, 901 GList *id_list, 902 GList *size_list, 903 GError **error); 904 905 char * 906 seaf_repo_manager_convert_repo_path (SeafRepoManager *mgr, 907 const char *repo_id, 908 const char *path, 909 const char *user, 910 gboolean is_org, 911 GError **error); 912 int 913 seaf_repo_manager_set_repo_status(SeafRepoManager *mgr, 914 const char *repo_id, RepoStatus status); 915 916 int 917 seaf_repo_manager_get_repo_status(SeafRepoManager *mgr, 918 const char *repo_id); 919 #endif 920