|
66 | 66 | namespace
|
67 | 67 | {
|
68 | 68 |
|
| 69 | +struct CachePathParts |
| 70 | +{ |
| 71 | + CachePathParts(CacheType type) |
| 72 | + { |
| 73 | + switch (type) |
| 74 | + { |
| 75 | + case CACHE_TYPE_THUMB: |
| 76 | + rc = get_thumbnails_cache_dir(); |
| 77 | + local = GQ_CACHE_LOCAL_THUMB; |
| 78 | + ext = GQ_CACHE_EXT_THUMB; |
| 79 | + break; |
| 80 | + case CACHE_TYPE_SIM: |
| 81 | + rc = get_thumbnails_cache_dir(); |
| 82 | + local = GQ_CACHE_LOCAL_THUMB; |
| 83 | + ext = GQ_CACHE_EXT_SIM; |
| 84 | + break; |
| 85 | + case CACHE_TYPE_METADATA: |
| 86 | + rc = get_metadata_cache_dir(); |
| 87 | + local = GQ_CACHE_LOCAL_METADATA; |
| 88 | + ext = GQ_CACHE_EXT_METADATA; |
| 89 | + break; |
| 90 | + case CACHE_TYPE_XMP_METADATA: |
| 91 | + rc = get_metadata_cache_dir(); |
| 92 | + local = GQ_CACHE_LOCAL_METADATA; |
| 93 | + ext = GQ_CACHE_EXT_XMP_METADATA; |
| 94 | + break; |
| 95 | + } |
| 96 | + } |
| 97 | + |
| 98 | + gchar *build_path_local(const gchar *source) const |
| 99 | + { |
| 100 | + g_autofree gchar *base = remove_level_from_path(source); |
| 101 | + g_autofree gchar *name = g_strconcat(filename_from_path(source), ext, nullptr); |
| 102 | + |
| 103 | + return g_build_filename(base, local, name, nullptr); |
| 104 | + } |
| 105 | + |
| 106 | + gchar *build_path_rc(const gchar *source) const |
| 107 | + { |
| 108 | + g_autofree gchar *name = g_strconcat(source, ext, nullptr); |
| 109 | + |
| 110 | + return g_build_filename(rc, name, nullptr); |
| 111 | + } |
| 112 | + |
| 113 | + const gchar *rc = nullptr; |
| 114 | + const gchar *local = nullptr; |
| 115 | + const gchar *ext = nullptr; |
| 116 | +}; |
| 117 | + |
69 | 118 | constexpr gint CACHE_LOAD_LINE_NOISE = 8;
|
70 | 119 |
|
| 120 | +gchar *cache_get_location(CacheType type, const gchar *source, gint include_name, mode_t *mode) |
| 121 | +{ |
| 122 | + if (!source) return nullptr; |
| 123 | + |
| 124 | + g_autofree gchar *base = remove_level_from_path(source); |
| 125 | + |
| 126 | + const CachePathParts cache{type}; |
| 127 | + |
| 128 | + g_autofree gchar *name = nullptr; |
| 129 | + if (include_name) |
| 130 | + { |
| 131 | + name = g_strconcat(filename_from_path(source), cache.ext, NULL); |
| 132 | + } |
| 133 | + |
| 134 | + gchar *path = nullptr; |
| 135 | + |
| 136 | + if (((type != CACHE_TYPE_METADATA && type != CACHE_TYPE_XMP_METADATA && options->thumbnails.cache_into_dirs) || |
| 137 | + ((type == CACHE_TYPE_METADATA || type == CACHE_TYPE_XMP_METADATA) && options->metadata.enable_metadata_dirs)) && |
| 138 | + access_file(base, W_OK)) |
| 139 | + { |
| 140 | + path = g_build_filename(base, cache.local, name, NULL); |
| 141 | + if (mode) *mode = 0775; |
| 142 | + } |
| 143 | + |
| 144 | + if (!path) |
| 145 | + { |
| 146 | + path = g_build_filename(cache.rc, base, name, NULL); |
| 147 | + if (mode) *mode = 0755; |
| 148 | + } |
| 149 | + |
| 150 | + return path; |
| 151 | +} |
| 152 | + |
71 | 153 | } // namespace
|
72 | 154 |
|
73 | 155 | /*
|
@@ -542,94 +624,19 @@ gboolean cache_sim_data_filled(ImageSimilarityData *sd)
|
542 | 624 | *-------------------------------------------------------------------
|
543 | 625 | */
|
544 | 626 |
|
545 |
| -struct CachePathParts |
| 627 | +gchar *cache_create_location(CacheType cache_type, const gchar *source) |
546 | 628 | {
|
547 |
| - CachePathParts(CacheType type) |
548 |
| - { |
549 |
| - switch (type) |
550 |
| - { |
551 |
| - case CACHE_TYPE_THUMB: |
552 |
| - rc = get_thumbnails_cache_dir(); |
553 |
| - local = GQ_CACHE_LOCAL_THUMB; |
554 |
| - ext = GQ_CACHE_EXT_THUMB; |
555 |
| - break; |
556 |
| - case CACHE_TYPE_SIM: |
557 |
| - rc = get_thumbnails_cache_dir(); |
558 |
| - local = GQ_CACHE_LOCAL_THUMB; |
559 |
| - ext = GQ_CACHE_EXT_SIM; |
560 |
| - break; |
561 |
| - case CACHE_TYPE_METADATA: |
562 |
| - rc = get_metadata_cache_dir(); |
563 |
| - local = GQ_CACHE_LOCAL_METADATA; |
564 |
| - ext = GQ_CACHE_EXT_METADATA; |
565 |
| - break; |
566 |
| - case CACHE_TYPE_XMP_METADATA: |
567 |
| - rc = get_metadata_cache_dir(); |
568 |
| - local = GQ_CACHE_LOCAL_METADATA; |
569 |
| - ext = GQ_CACHE_EXT_XMP_METADATA; |
570 |
| - break; |
571 |
| - } |
572 |
| - } |
573 |
| - |
574 |
| - gchar *build_path_local(const gchar *source) const |
575 |
| - { |
576 |
| - gchar *base = remove_level_from_path(source); |
577 |
| - gchar *name = g_strconcat(filename_from_path(source), ext, nullptr); |
578 |
| - gchar *path = g_build_filename(base, local, name, nullptr); |
579 |
| - g_free(name); |
580 |
| - g_free(base); |
581 |
| - |
582 |
| - return path; |
583 |
| - } |
584 |
| - |
585 |
| - gchar *build_path_rc(const gchar *source) const |
586 |
| - { |
587 |
| - gchar *name = g_strconcat(source, ext, nullptr); |
588 |
| - gchar *path = g_build_filename(rc, name, nullptr); |
589 |
| - g_free(name); |
| 629 | + mode_t mode = 0755; |
| 630 | + g_autofree gchar *path = cache_get_location(cache_type, source, FALSE, &mode); |
590 | 631 |
|
591 |
| - return path; |
592 |
| - } |
| 632 | + if (!recursive_mkdir_if_not_exists(path, mode)) return nullptr; |
593 | 633 |
|
594 |
| - const gchar *rc = nullptr; |
595 |
| - const gchar *local = nullptr; |
596 |
| - const gchar *ext = nullptr; |
597 |
| -}; |
| 634 | + return g_steal_pointer(&path); |
| 635 | +} |
598 | 636 |
|
599 |
| -gchar *cache_get_location(CacheType type, const gchar *source, gint include_name, mode_t *mode) |
| 637 | +gchar *cache_get_location(CacheType cache_type, const gchar *source) |
600 | 638 | {
|
601 |
| - gchar *path = nullptr; |
602 |
| - gchar *base; |
603 |
| - gchar *name = nullptr; |
604 |
| - |
605 |
| - if (!source) return nullptr; |
606 |
| - |
607 |
| - const CachePathParts cache{type}; |
608 |
| - |
609 |
| - base = remove_level_from_path(source); |
610 |
| - if (include_name) |
611 |
| - { |
612 |
| - name = g_strconcat(filename_from_path(source), cache.ext, NULL); |
613 |
| - } |
614 |
| - |
615 |
| - if (((type != CACHE_TYPE_METADATA && type != CACHE_TYPE_XMP_METADATA && options->thumbnails.cache_into_dirs) || |
616 |
| - ((type == CACHE_TYPE_METADATA || type == CACHE_TYPE_XMP_METADATA) && options->metadata.enable_metadata_dirs)) && |
617 |
| - access_file(base, W_OK)) |
618 |
| - { |
619 |
| - path = g_build_filename(base, cache.local, name, NULL); |
620 |
| - if (mode) *mode = 0775; |
621 |
| - } |
622 |
| - |
623 |
| - if (!path) |
624 |
| - { |
625 |
| - path = g_build_filename(cache.rc, base, name, NULL); |
626 |
| - if (mode) *mode = 0755; |
627 |
| - } |
628 |
| - |
629 |
| - g_free(base); |
630 |
| - if (name) g_free(name); |
631 |
| - |
632 |
| - return path; |
| 639 | + return cache_get_location(cache_type, source, TRUE, nullptr); |
633 | 640 | }
|
634 | 641 |
|
635 | 642 | gchar *cache_find_location(CacheType type, const gchar *source)
|
|
0 commit comments