diff --git a/cinera/cinera.c b/cinera/cinera.c
index 2d43b68..a6255ee 100644
--- a/cinera/cinera.c
+++ b/cinera/cinera.c
@@ -14,7 +14,7 @@ typedef struct
version CINERA_APP_VERSION = {
.Major = 0,
.Minor = 5,
- .Patch = 24
+ .Patch = 25
};
// TODO(matt): Copy in the DB 3 stuff from cinera_working.c
@@ -1360,19 +1360,19 @@ InsertCategory(categories *GlobalTopics, categories *LocalTopics, categories *Gl
}
}
- int CategoryIndex;
if(IsMedium)
{
- for(CategoryIndex = 0; CategoryIndex < LocalMedia->Count; ++CategoryIndex)
+ int MediumIndex;
+ for(MediumIndex = 0; MediumIndex < LocalMedia->Count; ++MediumIndex)
{
- if(!StringsDiffer(CategoryMedium[CategoryMediumIndex].Medium, LocalMedia->Category[CategoryIndex].Marker))
+ if(!StringsDiffer(CategoryMedium[CategoryMediumIndex].Medium, LocalMedia->Category[MediumIndex].Marker))
{
return;
}
- if((StringsDiffer(CategoryMedium[CategoryMediumIndex].WrittenName, LocalMedia->Category[CategoryIndex].WrittenText)) < 0)
+ if((StringsDiffer(CategoryMedium[CategoryMediumIndex].WrittenName, LocalMedia->Category[MediumIndex].WrittenText)) < 0)
{
int CategoryCount;
- for(CategoryCount = LocalMedia->Count; CategoryCount > CategoryIndex; --CategoryCount)
+ for(CategoryCount = LocalMedia->Count; CategoryCount > MediumIndex; --CategoryCount)
{
CopyString(LocalMedia->Category[CategoryCount].Marker, LocalMedia->Category[CategoryCount-1].Marker);
CopyString(LocalMedia->Category[CategoryCount].WrittenText, LocalMedia->Category[CategoryCount-1].WrittenText);
@@ -1384,24 +1384,24 @@ InsertCategory(categories *GlobalTopics, categories *LocalTopics, categories *Gl
}
}
- if(CategoryIndex == LocalMedia->Count)
+ if(MediumIndex == LocalMedia->Count)
{
- CopyString(LocalMedia->Category[CategoryIndex].Marker, CategoryMedium[CategoryMediumIndex].Medium);
- CopyString(LocalMedia->Category[CategoryIndex].WrittenText, CategoryMedium[CategoryMediumIndex].WrittenName);
+ CopyString(LocalMedia->Category[MediumIndex].Marker, CategoryMedium[CategoryMediumIndex].Medium);
+ CopyString(LocalMedia->Category[MediumIndex].WrittenText, CategoryMedium[CategoryMediumIndex].WrittenName);
}
++LocalMedia->Count;
- for(CategoryIndex = 0; CategoryIndex < GlobalMedia->Count; ++CategoryIndex)
+ for(MediumIndex = 0; MediumIndex < GlobalMedia->Count; ++MediumIndex)
{
- if(!StringsDiffer(CategoryMedium[CategoryMediumIndex].Medium, GlobalMedia->Category[CategoryIndex].Marker))
+ if(!StringsDiffer(CategoryMedium[CategoryMediumIndex].Medium, GlobalMedia->Category[MediumIndex].Marker))
{
return;
}
- if((StringsDiffer(CategoryMedium[CategoryMediumIndex].WrittenName, GlobalMedia->Category[CategoryIndex].WrittenText)) < 0)
+ if((StringsDiffer(CategoryMedium[CategoryMediumIndex].WrittenName, GlobalMedia->Category[MediumIndex].WrittenText)) < 0)
{
int CategoryCount;
- for(CategoryCount = GlobalMedia->Count; CategoryCount > CategoryIndex; --CategoryCount)
+ for(CategoryCount = GlobalMedia->Count; CategoryCount > MediumIndex; --CategoryCount)
{
CopyString(GlobalMedia->Category[CategoryCount].Marker, GlobalMedia->Category[CategoryCount-1].Marker);
CopyString(GlobalMedia->Category[CategoryCount].WrittenText, GlobalMedia->Category[CategoryCount-1].WrittenText);
@@ -1413,26 +1413,27 @@ InsertCategory(categories *GlobalTopics, categories *LocalTopics, categories *Gl
}
}
- if(CategoryIndex == GlobalMedia->Count)
+ if(MediumIndex == GlobalMedia->Count)
{
- CopyString(GlobalMedia->Category[CategoryIndex].Marker, CategoryMedium[CategoryMediumIndex].Medium);
- CopyString(GlobalMedia->Category[CategoryIndex].WrittenText, CategoryMedium[CategoryMediumIndex].WrittenName);
+ CopyString(GlobalMedia->Category[MediumIndex].Marker, CategoryMedium[CategoryMediumIndex].Medium);
+ CopyString(GlobalMedia->Category[MediumIndex].WrittenText, CategoryMedium[CategoryMediumIndex].WrittenName);
}
++GlobalMedia->Count;
}
else
{
- for(CategoryIndex = 0; CategoryIndex < LocalTopics->Count; ++CategoryIndex)
+ int TopicIndex;
+ for(TopicIndex = 0; TopicIndex < LocalTopics->Count; ++TopicIndex)
{
- if(!StringsDiffer(Marker, LocalTopics->Category[CategoryIndex].Marker))
+ if(!StringsDiffer(Marker, LocalTopics->Category[TopicIndex].Marker))
{
return;
}
- if((StringsDiffer(Marker, LocalTopics->Category[CategoryIndex].Marker)) < 0)
+ if((StringsDiffer(Marker, LocalTopics->Category[TopicIndex].Marker)) < 0)
{
int CategoryCount;
- for(CategoryCount = LocalTopics->Count; CategoryCount > CategoryIndex; --CategoryCount)
+ for(CategoryCount = LocalTopics->Count; CategoryCount > TopicIndex; --CategoryCount)
{
CopyString(LocalTopics->Category[CategoryCount].Marker, LocalTopics->Category[CategoryCount-1].Marker);
}
@@ -1442,35 +1443,40 @@ InsertCategory(categories *GlobalTopics, categories *LocalTopics, categories *Gl
}
}
- if(CategoryIndex == LocalTopics->Count)
+ if(TopicIndex == LocalTopics->Count)
{
- CopyString(LocalTopics->Category[CategoryIndex].Marker, Marker);
+ CopyString(LocalTopics->Category[TopicIndex].Marker, Marker);
}
++LocalTopics->Count;
- for(CategoryIndex = 0; CategoryIndex < GlobalTopics->Count; ++CategoryIndex)
+ for(TopicIndex = 0; TopicIndex < GlobalTopics->Count; ++TopicIndex)
{
- if(!StringsDiffer(Marker, GlobalTopics->Category[CategoryIndex].Marker))
+ if(!StringsDiffer(Marker, GlobalTopics->Category[TopicIndex].Marker))
{
return;
}
- if((StringsDiffer(Marker, GlobalTopics->Category[CategoryIndex].Marker)) < 0)
+ // NOTE(matt): This successfully sorts "nullTopic" at the end, but maybe figure out a more general way to force the
+ // order of stuff, perhaps blocks of dudes that should sort to the start / end
+ if(((StringsDiffer(Marker, GlobalTopics->Category[TopicIndex].Marker)) < 0 || !StringsDiffer(GlobalTopics->Category[TopicIndex].Marker, "nullTopic")))
{
- int CategoryCount;
- for(CategoryCount = GlobalTopics->Count; CategoryCount > CategoryIndex; --CategoryCount)
+ if(StringsDiffer(Marker, "nullTopic")) // NOTE(matt): This test (with the above || condition) forces nullTopic never to be inserted, only appended
{
- CopyString(GlobalTopics->Category[CategoryCount].Marker, GlobalTopics->Category[CategoryCount-1].Marker);
- }
+ int CategoryCount;
+ for(CategoryCount = GlobalTopics->Count; CategoryCount > TopicIndex; --CategoryCount)
+ {
+ CopyString(GlobalTopics->Category[CategoryCount].Marker, GlobalTopics->Category[CategoryCount-1].Marker);
+ }
- CopyString(GlobalTopics->Category[CategoryCount].Marker, Marker);
- break;
+ CopyString(GlobalTopics->Category[CategoryCount].Marker, Marker);
+ break;
+ }
}
}
- if(CategoryIndex == GlobalTopics->Count)
+ if(TopicIndex == GlobalTopics->Count)
{
- CopyString(GlobalTopics->Category[CategoryIndex].Marker, Marker);
+ CopyString(GlobalTopics->Category[TopicIndex].Marker, Marker);
}
++GlobalTopics->Count;
@@ -1478,35 +1484,81 @@ InsertCategory(categories *GlobalTopics, categories *LocalTopics, categories *Gl
}
void
-BuildCategories(buffer *AnnotationClass, buffer *TopicDots, categories *LocalTopics, categories *LocalMedia, int *MarkerIndex)
+BuildCategories(buffer *AnnotationClass, buffer *CategoryIcons, categories *LocalTopics, categories *LocalMedia, int *MarkerIndex, char *DefaultMedium)
{
- if(LocalTopics->Count > 0)
+ bool CategoriesSpan = FALSE;
+ if(!(LocalTopics->Count == 1 && !StringsDiffer(LocalTopics->Category[0].Marker, "nullTopic")
+ && LocalMedia->Count == 1 && !StringsDiffer(LocalMedia->Category[0].Marker, DefaultMedium)))
{
- CopyStringToBuffer(TopicDots, "");
- for(int i = 0; i < LocalTopics->Count; ++i)
- {
- CopyStringToBuffer(TopicDots, "",
- SanitisePunctuation(LocalTopics->Category[i].Marker),
- SanitisePunctuation(LocalTopics->Category[i].Marker));
-
- CopyStringToBuffer(AnnotationClass, " cat_%s",
- SanitisePunctuation(LocalTopics->Category[i].Marker));
- }
- CopyStringToBuffer(TopicDots, "");
+ CategoriesSpan = TRUE;
+ CopyStringToBuffer(CategoryIcons, "");
}
- for(int i = 0; i < LocalMedia->Count; ++i)
+ if(LocalTopics->Count == 1 && !StringsDiffer(LocalTopics->Category[0].Marker, "nullTopic"))
{
- if(!StringsDiffer(LocalMedia->Category[i].Marker, "afk")) // TODO(matt): Initially hidden config
+ char SanitisedMarker[StringLength(LocalTopics->Category[0].Marker)];
+ CopyString(SanitisedMarker, LocalTopics->Category[0].Marker);
+ SanitisePunctuation(SanitisedMarker);
+ CopyStringToBuffer(AnnotationClass, " cat_%s", SanitisedMarker);
+ }
+ else
+ {
+ for(int i = 0; i < LocalTopics->Count; ++i)
{
- CopyStringToBuffer(AnnotationClass, " off_%s skip", SanitisePunctuation(LocalMedia->Category[i].Marker)); // TODO(matt): Bulletproof this?
+ char SanitisedMarker[StringLength(LocalTopics->Category[i].Marker)];
+ CopyString(SanitisedMarker, LocalTopics->Category[i].Marker);
+ SanitisePunctuation(SanitisedMarker);
+
+ CopyStringToBuffer(CategoryIcons, "",
+ LocalTopics->Category[i].Marker,
+ SanitisedMarker);
+
+ CopyStringToBuffer(AnnotationClass, " cat_%s",
+ SanitisedMarker);
}
- else
+ }
+
+ if(LocalMedia->Count == 1 && !StringsDiffer(LocalMedia->Category[0].Marker, DefaultMedium))
+ {
+ char SanitisedMarker[StringLength(LocalMedia->Category[0].Marker)];
+ CopyString(SanitisedMarker, LocalMedia->Category[0].Marker);
+ SanitisePunctuation(SanitisedMarker);
+ CopyStringToBuffer(AnnotationClass, " %s", SanitisedMarker);
+ }
+ else
+ {
+ for(int i = 0; i < LocalMedia->Count; ++i)
{
- CopyStringToBuffer(AnnotationClass, " %s", SanitisePunctuation(LocalMedia->Category[i].Marker));
+ char SanitisedMarker[StringLength(LocalMedia->Category[i].Marker)];
+ CopyString(SanitisedMarker, LocalMedia->Category[i].Marker);
+ SanitisePunctuation(SanitisedMarker);
+
+ if(!StringsDiffer(LocalMedia->Category[i].Marker, "afk")) // TODO(matt): Initially hidden config
+ {
+ CopyStringToBuffer(AnnotationClass, " off_%s skip", SanitisedMarker); // TODO(matt): Bulletproof this?
+ }
+ else
+ {
+ for(int j = 0; j < ArrayCount(CategoryMedium); ++j)
+ {
+ if(!StringsDiffer(LocalMedia->Category[i].Marker, CategoryMedium[j].Medium))
+ {
+ CopyStringToBuffer(CategoryIcons, "