| | 1126 | static void |
|---|
| | 1127 | fetch_folder_store_from_path (const gchar *path, TnyFolder *origin, gchar **name, TnyFolderStore **into) |
|---|
| | 1128 | { |
|---|
| | 1129 | TnyFolderStore *origin_store; |
|---|
| | 1130 | *name = NULL; |
|---|
| | 1131 | *into = NULL; |
|---|
| | 1132 | |
|---|
| | 1133 | if (path == NULL || path[0] == '\0') { |
|---|
| | 1134 | return; |
|---|
| | 1135 | } |
|---|
| | 1136 | |
|---|
| | 1137 | if (path[0] == '/') { |
|---|
| | 1138 | origin_store = TNY_FOLDER_STORE (tny_folder_get_account (origin)); |
|---|
| | 1139 | path++; |
|---|
| | 1140 | } else { |
|---|
| | 1141 | origin_store = tny_folder_get_folder_store (origin); |
|---|
| | 1142 | } |
|---|
| | 1143 | |
|---|
| | 1144 | while (*path != '\0') { |
|---|
| | 1145 | char *slash_pos; |
|---|
| | 1146 | if (strncmp (path, "../", 3)== 0) { |
|---|
| | 1147 | if (!TNY_IS_ACCOUNT (origin_store)) { |
|---|
| | 1148 | TnyFolderStore *tmp; |
|---|
| | 1149 | tmp = tny_folder_get_folder_store (TNY_FOLDER (origin_store)); |
|---|
| | 1150 | if (tmp) { |
|---|
| | 1151 | g_object_unref (origin_store); |
|---|
| | 1152 | origin_store = tmp; |
|---|
| | 1153 | } |
|---|
| | 1154 | } |
|---|
| | 1155 | path += 3; |
|---|
| | 1156 | } else if ((slash_pos = strstr (path, "/")) != NULL) { |
|---|
| | 1157 | TnyFolderStoreQuery *query; |
|---|
| | 1158 | TnyList *list; |
|---|
| | 1159 | gchar *folder_name; |
|---|
| | 1160 | |
|---|
| | 1161 | query = tny_folder_store_query_new (); |
|---|
| | 1162 | folder_name = g_strndup (path, slash_pos - path); |
|---|
| | 1163 | tny_folder_store_query_add_item (query, folder_name, TNY_FOLDER_STORE_QUERY_OPTION_MATCH_ON_NAME); |
|---|
| | 1164 | g_free (folder_name); |
|---|
| | 1165 | list = tny_simple_list_new (); |
|---|
| | 1166 | tny_folder_store_get_folders (origin_store, list, query, NULL); |
|---|
| | 1167 | g_object_unref (query); |
|---|
| | 1168 | if (tny_list_get_length (list) == 1) { |
|---|
| | 1169 | TnyIterator *iter; |
|---|
| | 1170 | TnyFolderStore *tmp; |
|---|
| | 1171 | iter = tny_list_create_iterator (list); |
|---|
| | 1172 | tmp = TNY_FOLDER_STORE (tny_iterator_get_current (iter)); |
|---|
| | 1173 | g_object_unref (origin_store); |
|---|
| | 1174 | origin_store = tmp; |
|---|
| | 1175 | g_object_unref (iter); |
|---|
| | 1176 | } |
|---|
| | 1177 | g_object_unref (list); |
|---|
| | 1178 | path = slash_pos + 1; |
|---|
| | 1179 | } else { |
|---|
| | 1180 | *name = g_strdup (path); |
|---|
| | 1181 | *into = origin_store; |
|---|
| | 1182 | break; |
|---|
| | 1183 | } |
|---|
| | 1184 | } |
|---|
| | 1185 | } |
|---|
| | 1186 | |
|---|
| 1187 | | tny_folder_copy_async (folder, into, newname, move, |
|---|
| 1188 | | on_rename, NULL, g_object_ref (self)); |
|---|
| 1189 | | |
|---|
| 1190 | | g_free (newname); |
|---|
| | 1250 | if (new_name != NULL) { |
|---|
| | 1251 | |
|---|
| | 1252 | tny_folder_copy_async (folder, into, new_name, move, |
|---|
| | 1253 | on_rename, NULL, g_object_ref (self)); |
|---|
| | 1254 | |
|---|
| | 1255 | g_free (new_name); |
|---|
| | 1256 | } |
|---|