1 /* EasyTAG - tag editor for audio files
2  * Copyright (C) 2014,2015  David King <amigadave@amigadave.com>
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the Free
6  * Software Foundation; either version 2 of the License, or (at your option)
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 51
16  * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  */
18 
19 #ifndef ET_FILE_H_
20 #define ET_FILE_H_
21 
22 #include <glib.h>
23 
24 G_BEGIN_DECLS
25 
26 #include "core_types.h"
27 #include "file_description.h"
28 #include "file_info.h"
29 #include "file_name.h"
30 #include "file_tag.h"
31 
32 /*
33  * Description of each item of the ETFileList list
34  */
35 typedef struct
36 {
37     guint IndexKey;           /* Value used to display the position in the list (and in the BrowserList) - Must be renumered after resorting the list - This value varies when resorting list */
38 
39     guint ETFileKey;          /* Primary key to identify each item of the list (no longer used?) */
40 
41     guint64 FileModificationTime; /* Save modification time of the file */
42 
43     const ET_File_Description *ETFileDescription;
44     gchar               *ETFileExtension;   /* Real extension of the file (keeping the case) (should be placed in ETFileDescription?) */
45     ET_File_Info        *ETFileInfo;        /* Header infos: bitrate, duration, ... */
46 
47     GList *FileNameCur;       /* Points to item of FileNameList that represents the current value of filename state (i.e. file on hard disk) */
48     GList *FileNameNew;       /* Points to item of FileNameList that represents the new value of filename state */
49     GList *FileNameList; /* Contains the history of changes about the filename. */
50     GList *FileNameListBak;   /* Contains items of FileNameList removed by 'undo' procedure but have data currently saved (for example, when you save your last changes, make some 'undo', then make new changes) */
51 
52     GList *FileTag;           /* Points to the current item used of FileTagList */
53     GList *FileTagList;       /* Contains the history of changes about file tag data */
54     GList *FileTagListBak;    /* Contains items of FileTagList removed by 'undo' procedure but have data currently saved */
55 } ET_File;
56 
57 /*
58  * Description of each item of the ETHistoryFileList list
59  */
60 typedef struct
61 {
62     ET_File *ETFile;           /* Pointer to item of ETFileList changed */
63 } ET_History_File;
64 
65 gboolean et_file_check_saved (const ET_File *ETFile);
66 
67 ET_File * ET_File_Item_New (void);
68 void ET_Free_File_List_Item (ET_File *ETFile);
69 
70 void ET_Save_File_Data_From_UI (ET_File *ETFile);
71 gboolean ET_Save_File_Name_Internal (const ET_File *ETFile, File_Name *FileName);
72 gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error);
73 gboolean ET_Save_File_Tag_Internal (ET_File *ETFile, File_Tag *FileTag);
74 
75 gboolean ET_Undo_File_Data (ET_File *ETFile);
76 gboolean ET_Redo_File_Data (ET_File *ETFile);
77 gboolean ET_File_Data_Has_Undo_Data (const ET_File *ETFile);
78 gboolean ET_File_Data_Has_Redo_Data (const ET_File *ETFile);
79 
80 gboolean ET_Manage_Changes_Of_File_Data (ET_File *ETFile, File_Name *FileName, File_Tag *FileTag);
81 void ET_Mark_File_Name_As_Saved (ET_File *ETFile);
82 gchar *et_file_generate_name (const ET_File *ETFile, const gchar *new_file_name);
83 gchar * ET_File_Format_File_Extension (const ET_File *ETFile);
84 
85 gint ET_Comp_Func_Sort_File_By_Ascending_Filename (const ET_File *ETFile1, const ET_File *ETFile2);
86 gint ET_Comp_Func_Sort_File_By_Descending_Filename (const ET_File *ETFile1, const ET_File *ETFile2);
87 gint ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (const ET_File *ETFile1, const ET_File *ETFile2);
88 gint ET_Comp_Func_Sort_File_By_Descending_Creation_Date (const ET_File *ETFile1, const ET_File *ETFile2);
89 gint et_comp_func_sort_file_by_ascending_disc_number (const ET_File *ETFile1,
90                                                       const ET_File *ETFile2);
91 gint et_comp_func_sort_file_by_descending_disc_number (const ET_File *ETFile1,
92                                                        const ET_File *ETFile2);
93 gint ET_Comp_Func_Sort_File_By_Ascending_Track_Number (const ET_File *ETFile1, const ET_File *ETFile2);
94 gint ET_Comp_Func_Sort_File_By_Descending_Track_Number (const ET_File *ETFile1, const ET_File *ETFile2);
95 gint ET_Comp_Func_Sort_File_By_Ascending_Title (const ET_File *ETFile1, const ET_File *ETFile2);
96 gint ET_Comp_Func_Sort_File_By_Descending_Title (const ET_File *ETFile1, const ET_File *ETFile2);
97 gint ET_Comp_Func_Sort_File_By_Ascending_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
98 gint ET_Comp_Func_Sort_File_By_Descending_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
99 gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
100 gint ET_Comp_Func_Sort_File_By_Descending_Album_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
101 gint ET_Comp_Func_Sort_File_By_Ascending_Album (const ET_File *ETFile1, const ET_File *ETFile2);
102 gint ET_Comp_Func_Sort_File_By_Descending_Album (const ET_File *ETFile1, const ET_File *ETFile2);
103 gint ET_Comp_Func_Sort_File_By_Ascending_Year (const ET_File *ETFile1, const ET_File *ETFile2);
104 gint ET_Comp_Func_Sort_File_By_Descending_Year (const ET_File *ETFile1, const ET_File *ETFile2);
105 gint ET_Comp_Func_Sort_File_By_Ascending_Genre (const ET_File *ETFile1, const ET_File *ETFile2);
106 gint ET_Comp_Func_Sort_File_By_Descending_Genre (const ET_File *ETFile1, const ET_File *ETFile2);
107 gint ET_Comp_Func_Sort_File_By_Ascending_Comment (const ET_File *ETFile1, const ET_File *ETFile2);
108 gint ET_Comp_Func_Sort_File_By_Descending_Comment (const ET_File *ETFile1, const ET_File *ETFile2);
109 gint ET_Comp_Func_Sort_File_By_Ascending_Composer (const ET_File *ETFile1, const ET_File *ETFile2);
110 gint ET_Comp_Func_Sort_File_By_Descending_Composer (const ET_File *ETFile1, const ET_File *ETFile2);
111 gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
112 gint ET_Comp_Func_Sort_File_By_Descending_Orig_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
113 gint ET_Comp_Func_Sort_File_By_Ascending_Copyright (const ET_File *ETFile1, const ET_File *ETFile2);
114 gint ET_Comp_Func_Sort_File_By_Descending_Copyright (const ET_File *ETFile1, const ET_File *ETFile2);
115 gint ET_Comp_Func_Sort_File_By_Ascending_Url (const ET_File *ETFile1, const ET_File *ETFile2);
116 gint ET_Comp_Func_Sort_File_By_Descending_Url (const ET_File *ETFile1, const ET_File *ETFile2);
117 gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (const ET_File *ETFile1, const ET_File *ETFile2);
118 gint ET_Comp_Func_Sort_File_By_Descending_Encoded_By (const ET_File *ETFile1, const ET_File *ETFile2);
119 
120 gint ET_Comp_Func_Sort_File_By_Ascending_File_Type (const ET_File *ETFile1, const ET_File *ETFile2);
121 gint ET_Comp_Func_Sort_File_By_Descending_File_Type (const ET_File *ETFile1, const ET_File *ETFile2);
122 gint ET_Comp_Func_Sort_File_By_Ascending_File_Size (const ET_File *ETFile1, const ET_File *ETFile2);
123 gint ET_Comp_Func_Sort_File_By_Descending_File_Size (const ET_File *ETFile1, const ET_File *ETFile2);
124 gint ET_Comp_Func_Sort_File_By_Ascending_File_Duration (const ET_File *ETFile1, const ET_File *ETFile2);
125 gint ET_Comp_Func_Sort_File_By_Descending_File_Duration (const ET_File *ETFile1, const ET_File *ETFile2);
126 gint ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate (const ET_File *ETFile1, const ET_File *ETFile2);
127 gint ET_Comp_Func_Sort_File_By_Descending_File_Bitrate (const ET_File *ETFile1, const ET_File *ETFile2);
128 gint ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate (const ET_File *ETFile1, const ET_File *ETFile2);
129 gint ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (const ET_File *ETFile1, const ET_File *ETFile2);
130 
131 G_END_DECLS
132 
133 #endif /* !ET_FILE_H_ */
134